深度常识追踪(DKT)这方面,曾经看了多篇论文,对其中的一些模型也是做了简略的理解。所以在这个根底上,我对一个已有的DKT程序进行调试学习。本文次要是对训练模型的过程进行学习总结。

环境的调整

在进行程序调试的时候,首先遇到的问题就是环境不能满足程序的运行。虽说配置环境是一个并不是很难, 然而容易处处呈现问题。

python的版本抉择

首先是python的版本问题,在下载程序以前,我的电脑上是存在一个版本的python。然而依据程序所须要的版本与我本机上的不同,同时我也并不想删除原有版本的python,所以这就须要设计python版本切换的问题了。

这里应用的开发工具是pycharm,下好对应版本的python后,通过设置抉择对应的版本:

应用这个工具的益处是,我不须要对环境变量进行更改,间接就能够切换我所须要的版本,同时还不会影响到其余程序应用的版本问题。

tensorflow

tensorflow-cputensorflow-gpu的抉择。在个别进行小数据量的解决时,抉择两种之间的差异并不大,然而在进行大数据量的计算的时候,cpu版的计算工夫就会呈现显著的减少。

基于该程序性的数据量比拟大的根底,这里就抉择应用gpu版。

装置tensorflow-gpu间接应用python包治理装置工具pip进行装置。

pip install tensorflow-gpu==1.10.0
留神:如果在装置的过程中提醒呈现pip版本的问题,间接将pip更新到最新的版本就能够了。

CUDA

因为下面抉择了tensorflow-gpu==1.10.0,所以对CUDA的版本也是有对应的要求,这就跟我之前的版本呈现了抵触,

tensorflow:ImportError: Could not find 'cudart64_90.dll'

依照报错的提醒,tensorflow的导入须要CUDA9的版本。

去官网下载完CUDA9之后,在进行环境变量配置的时候,肯定要将CUDA_PATH设置为版本9的对门路。

CUDNN

装置完CUDA后,仍然会呈现报错:

ImportError: Could not find ‘cudnn64_7.dll’

报错提醒导入须要cudnn7的反对,在官网上找到对应CUDA9版本的cudnn,而后进行下载解压,并将对应文件放到装置好的cuda的文件夹下:

bin\cudnn64_7.dll放到\bin目录下。

include\cudnn.h放到\include目录下。

lib\x64\cudnn.lib放到\lib\x64目录下。

numpy

持续报错:

ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject

呈现该报错的次要起因,是numpy的版本不对,须要将numpy的版本更新为1.16.0

pip install -U numpy==1.16.0

更新numpy,间接应用pip进行更新。

pip show numpy

更新后查看一下numpy的版本,胜利更新到1.16.0:

显存有余

ResourceExhaustedError: OOM when allocating tensor with shape[512] and type float on /job:localhost

呈现该报错的起因是:网络tensor过大,训练时参数过多,导致显存不够,资源耗尽。

因为依照训练的要求,训练参数不能批改,所以在解决时,将batch_size改小。

在tensorflow中,batch_size是每个训练批次的大小,它次要影响实现每个epoch(全数据集)所须要的工夫,以及每个迭代(iteration)之间梯度的平滑水平。

一般来说,在正当范畴内适当的增大batch_size可能减少内存的利用率,进步大矩阵乘法的并行效率。这就使得实现每个epoch的工夫缩小。

然而同时,增大batch_size也可能会使得内存的容量不够,这也就是导致咱们下面的问题。

解决:

1.放大batch_size:程序开始时,batch_size设置的大小为16,将其放大一半后,未能解决问题,持续放大,最初,将其设置为4.

2.敞开电脑中其余运行的无关程序:其余运行的程序也会在肯定水平上占用内存,所以将这些程序敞开,也能增大一些能够应用的内存。

tensorflow.saver

在训练循环中,定期调用saver.save()办法,向文件夹中写入蕴含了以后模型中所有可训练变量的 checkpoint文件。

saver.save(sess, FLAGS.train_dir, global_step=step)

其中sess是tensorflow中的会话管制(session);FLAGS.train_dir是训练的checkpoint的存储地位;global_step是指训练的第几步。

每次训练都会呈现前面的三个文件,第一次训练会呈现checkpoint文件,并且每次都会在该文件中创立一个检查点。

留神:save办法中的门路并不能主动创立,所以在保留之前肯定须要先建设好相应的文件夹。

相干参考:

https://blog.csdn.net/u011311291/article/details/81393933
https://blog.csdn.net/zhaotun123/article/details/99680151
https://blog.csdn.net/qq_37099552/article/details/105023680
https://stackoverflow.com/questions/60323366/valueerror-numpy-ufunc-size-changed-may-indicate-binary-incompatibility-expec
https://blog.csdn.net/winycg/article/details/78572438
https://blog.csdn.net/hl1hl/article/details/85638276