搭建了一个卷积神经网络做时序数据的分类,上周五开始训练,历经一个双休周末,还没有跑完。batch_size为128,按照最开始的训练速度感觉应该很快可以完成,但是并不如我所愿。周一查看的时候,每一批次训练都耗时相当长。感觉是不正常的。那是什么原因导致训练越来越慢呢?
我尝试了以下方法,最终找到问题并解决:
1、记录每次迭代所花费时间。
然后尝试:
1、缩小网络规模
2、缩小batch_size
3、迭代中只处理数据,不进行训练
发现并没有改善训练速度,还是会越来越慢。
在google中搜索了一下,训练速度越来越慢的问题?得到如下启示:
因为在运行时的session里定义了tf的op导致的。这样每一次迭代都会在graph里增加新的节点,导致memory leak,程序越来越慢,最后强行退出。至于在运行时程序有没有增加节点,可以在session里定义graph.finalize()锁定graph,如果跑的时候报错就证明程序在动态添加节点导致的越来越慢。
检查训练循环的代码块中是否存在tf 的op节点,发现对label进行one_hot处理是采用的tf.one_hot方法。将其改成numpy的实现方式。训练越来越慢的速度就解决了。
另外可通过增加tf.get_default_graph().finalize() 锁图操作,快速定位和发现问题。
领取专属 10元无门槛券
私享最新 技术干货