【发布时间】:2018-01-18 03:07:53
【问题描述】:
我试图了解 Tensorflow 训练如何依赖于之前运行的结果。当我们训练一个模型时,我们将在优化器中指定学习率,以最小的成本训练模型。子epoch的学习率不会改变,但是当全局步数达到子epoch的倍数时学习率会改变。
def Train(...):
epoch = 5
sub_epoch = 3
for i in range(epoch):
for j in range(sub_epoch):
session.run(optimizer, ...)
因为我不确定 Tensorflow 在训练数据时是如何工作的,如果每次运行都依赖于之前运行的内部结果,我担心将训练分成多个线程,这会导致训练结果不准确。
假设 sub-epoch 为 3,我们可以在 3 个不同的线程中以相同的学习率训练每个 sub-epoch 的数据,并等待所有 3 个线程完成后再进行下一个 epoch 训练吗?
Thread 1, epoch 0, sub-epoch 0: Train(data1, lr1)
Thread 2, epoch 0, sub-epoch 1: Train(data2, lr1)
Thread 3, epoch 0, sub-epoch 2: Train(data3, lr1)
[wait for all 3 threads to complete]
Thread 1, epoch 1, sub-epoch 0: Train(data4, lr2)
Thread 2, epoch 1, sub-epoch 1: Train(data5, lr2)
Thread 3, epoch 1, sub-epoch 2: Train(data6, lr2)
...
我想知道训练依赖,请有人告诉我下面哪个描述是正确的?
- 无论学习率如何,训练都取决于之前运行的结果
- 训练取决于先前以不同学习率运行的 epoch 的结果(即上述场景)
- 训练完全不依赖于之前的结果
- 其他 -- 请解释
因为我不熟悉它的工作原理,所以我可能会问一些愚蠢的问题,如果上面描述的任何事情有问题,请随时告诉我(例如,我们不需要等待所有 3 个线程都完成等)
【问题讨论】:
标签: multithreading tensorflow dependencies