【发布时间】:2017-07-13 09:48:27
【问题描述】:
我正在使用 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)
当我运行这些操作时,训练一个 epoch 的时间成本约为 400 秒。但是当我关闭这些操作时,训练一个 epoch 的时间成本只有 90 秒。
如何优化图以最小化汇总操作的时间成本?
【问题讨论】:
-
也许不那么频繁地计算摘要?此外,TF 1.0 重构事物以提高效率——当使用钩子时,摘要与其他张量同时计算,因此所有中间量都被重用
-
我使用的是 TF 1.0。您能否更清楚地说明如何使用钩子?我尝试使用 CPU 来计算摘要,但没有太大帮助。我猜这是因为 GPU 和 CPU 之间的数据传输。 @YaroslavBulatov
-
在转向钩子之前,你能减少计算摘要的次数吗?
-
哦,是的,我当然可以。但实际上,我只是计算每个时期的摘要,而不是每个批次。如果我将摘要减少到每 10 个 epoch,恐怕我会丢失一些训练过程的信息。
标签: tensorflow tensorboard nvidia-titan