在 深度常识追踪(DKT)
这方面,曾经看了多篇论文,对其中的一些模型也是做了简略的理解。所以在这个根底上,我对一个已有的 DKT
程序进行调试学习。本文次要是对训练模型的过程进行学习总结。
环境的调整
在进行程序调试的时候,首先遇到的问题就是环境不能满足程序的运行。虽说配置环境是一个并不是很难,然而容易处处呈现问题。
python 的版本抉择
首先是 python
的版本问题,在下载程序以前,我的电脑上是存在一个版本的 python。然而依据程序所须要的版本与我本机上的不同,同时我也并不想删除原有版本的 python,所以这就须要设计 python 版本切换
的问题了。
这里应用的开发工具是pycharm
,下好对应版本的 python 后,通过设置抉择对应的版本:
应用这个工具的益处是,我不须要对环境变量进行更改,间接就能够切换我所须要的版本,同时还不会影响到其余程序应用的版本问题。
tensorflow
tensorflow-cpu
和 tensorflow-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