DKT程序的学习

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

环境的调整

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

python的版本选择

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

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

image.png

使用这个工具的好处是,我不需要对环境变量进行更改,直接就可以切换我所需要的版本,同时还不会影响到其他程序使用的版本问题。

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:

image.png

显存不足

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是指训练的第几步。

image.png

每次训练都会出现后面的三个文件,第一次训练会出现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

你可能感兴趣的:(DKT程序的学习)