在LSTM + AdamOptimizer
上实现Tensorflow 1.6.
时,我遇到一个奇怪的事情。当训练在CPU上运行时,损失是稳定的,但是在Google ML GPU
上运行时,损失将从0波动。 xx到100。
即使我尝试以下方法,问题仍然存在:
最后,我实现了clip_by_global_norm来限制Adam梯度,最终在Google ML GPU训练中损失变得稳定。
optimizer = tf.train.AdamOptimizer(learning_rate=task.HYPER_PARAMS.learning_rate)
gradients, v = zip(*optimizer.compute_gradients(loss))
gradients, _ = tf.clip_by_global_norm(gradients, 5.0)
train_op = optimizer.apply_gradients(zip(gradients, v), global_step=global_step, name="adam_optimizer")
除了clip_by_global_norm方法之外,有人可以提出更好的解决方案吗?或者可以显示更多在Tensorflow上实现AdamOptimizer的示例