关于python:DKT程序的学习

47次阅读

共计 2529 个字符,预计需要花费 7 分钟才能阅读完成。

深度常识追踪(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

正文完
 0