我正在运行一系列神经网络(使用Tensorflow后端的Keras库),我在Jupyter Notebook中训练每个神经网络的时间有以下结果:
ELAPSED TIME: 2.7005105018615723
0
ELAPSED TIME: 2.4810903072357178
1
ELAPSED TIME: 2.801435708999634
2
ELAPSED TIME: 2.6753993034362793
3
ELAPSED TIME: 2.8625667095184326
4
ELAPSED TIME: 2.5828065872192383
5
以后你有:
ELAPSED TIME: 5.062163829803467
0
ELAPSED TIME: 5.162402868270874
1
ELAPSED TIME: 5.301288366317749
2
ELAPSED TIME: 5.386904001235962
3
ELAPSED TIME: 6.126806020736694
4
该程序包含一个功能,可以在各自的数据集上训练单独的神经网络模型,并仅导出其最终训练精度(保存到另一个文件中)。
我认为之后网络训练需要更长时间的原因是因为程序消耗了太多内存,因此我会在获得训练准确性之后删除模型(使用del关键字),但这并不是似乎做得很多。
如果我要重新启动Jupyter Notebook内核,运行每个网络的时间将缩短到大约2秒(原始持续时间),但后面的模型运行需要更长的时间。
可能的原因是什么,以及可以实施哪些解决方案?
注意:我没有包含任何代码,因为它会使这篇文章更加密集,但如果有必要,我可以上传它。
答案 0 :(得分:0)
你在NVIDA GPU上运行吗?如果是这样,旧模型的某些部分仍然可以在GPU上。在慢速模型运行时尝试运行nvidia-smi
,看看是否有其他东西正在耗尽GPU内存/资源。
如果这不起作用,您还可以运行张量流时间轴,并在慢速和快速运行之间进行比较。有关如何在Keras中生成时间轴的更多信息:https://github.com/tensorflow/tensorflow/issues/9868以及我在下面粘贴的用于创建时间轴的代码来自该链接
from tensorflow.python.client import timeline
# Make your keras model
# ...
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
model.compile(loss='MSE', optimizer='Adam', options=run_options, run_metadata=run_metadata)
# Run model in your usual way
# ...
trace = timeline.Timeline(step_stats=run_metadata.step_stats)
with open('timeline.ctf.json', 'w') as f:
f.write(trace.generate_chrome_trace_format())
有关张量流时间轴的更多信息,请参阅https://stackoverflow.com/a/37774470/2826818时间轴将允许您查看每个操作所花费的时间,并确定哪个操作导致速度减慢。
答案 1 :(得分:0)
使用完每种模型后,您可以清除会话,这对我来说已经解决了这个问题。
max_guids=2
(在我将tensoflow-gpu更新到1.9.0之前,我也遇到了分段错误)