7

我正在使用带有 GPU Nvidia Titan X 的 TensorFlow r1.0 训练一个类似 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)

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

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

4

1 回答 1

2

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

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

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

于 2019-02-05T14:33:24.233 回答