使用汇总操作训练TensorFlow模型比没有汇总操作要慢得多

时间:2017-02-23 04:07:25

标签: tensorflow tensorboard nvidia-titan

我正在使用TensorFlow r1.0和GPU Nvidia Titan X训练类似Inception的模型。

我添加了一些摘要操作来可视化训练过程,使用如下代码:

def variable_summaries(var):
"""Attach a lot of summaries to a Tensor (for TensorBoard visualization)."""
    with tf.name_scope('summaries'):
        mean = tf.reduce_mean(var)
        tf.summary.scalar('mean', mean)
        with tf.name_scope('stddev'):
            stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
        tf.summary.scalar('stddev', stddev)
        tf.summary.scalar('max', tf.reduce_max(var))
        tf.summary.scalar('min', tf.reduce_min(var))
        tf.summary.histogram('histogram', var)

当我运行这些操作时,训练一个纪元的时间成本约为400秒。但是当我关闭这些操作时,训练一个纪元的时间成本只有90秒。

如何优化图表以最小化汇总操作时间成本?

1 个答案:

答案 0 :(得分:0)

摘要当然会减慢训练过程,因为您需要执行更多操作,并且需要将它们写入光盘。此外,直方图摘要还会进一步降低训练速度,因为对于直方图,与标量值相比,您需要从GPU复制到CPU的数据更多。 因此,我将尽量少使用直方图日志记录,这可能会有所不同。

通常的解决方案是仅每X批次计算一次汇总。由于您每个时期仅计算一个摘要,而不是每个批次,因此值得尝试使用更少的摘要日志记录。

取决于您的数据集中有多少批次,但通常不会因收集较少的日志而丢失很多信息。