运行神经网络需要更长的时间



我正在运行一系列神经网络(使用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 秒(原始持续时间),但后一个模型需要更长的时间才能运行。

可能的原因是什么,可以实施哪些解决方案?

.

注意:我没有包含任何代码,因为它会使这篇文章更加密集,但如果有必要,我可以上传它。

您是否在 NVIDA GPU 上运行?如果是这样,旧模型的某些部分可能仍在 GPU 上。尝试在慢速模型运行时运行nvidia-smi,看看是否有其他东西占用了 GPU 内存/资源。

如果这不起作用,您还可以运行 tensorflow 时间线并比较慢速和快速运行。有关如何在 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())

有关 tensorflow 时间线的更多信息,请参阅 https://stackoverflow.com/a/37774470/2826818 时间线将允许您查看每个操作花费的时间,并确定导致速度变慢的操作。

您可以在完成每个模型后清除会话,这为我解决了问题。

from keras import backend as K
for model in models_to_train:
model.fit(X, y)
# save necessary metrics
K.clear_session()

(在我将tensoflow-gpu更新到1.9.0之前,我也遇到了分段错误)

最新更新