首页 文章

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

提问于
浏览
0

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

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

.

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

2 回答

  • 0

    你在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())
    

    有关张量流时间轴的更多信息,请参阅https://stackoverflow.com/a/37774470/2826818时间轴将允许您查看每个操作所花费的时间并确定哪个操作导致速度减慢 .

  • 0

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

    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之前,我遇到了分段错误)

相关问题