是否有可能撤消上一个训练步骤?例如,当损失值为'NaN'时。
...
for step in range(num_epoch):
_, loss_value = sess.run([train_op, loss])
if np.isnan(loss_value):
# something like: sess.undo_last()
break
...
如果有这样的方法。它是否也适用于多GPU培训?
答案 0 :(得分:1)
没有这样的东西,但是你可以做这样的事情。 在您的模型中添加:
loss = tf.check_numerics(loss)
如果你的损失变成NaN或Inf,这将抛出InvalidArgument
例外。由于这是在计算任何反向传播之前计算的,因此不会修改任何权重。
您的示例代码如下所示:
for step in range(num_epoch):
try:
sess.run([train_op])
except InvalidArgument:
break
但这对你没有帮助。通常NaN或Inf损失意味着模型已经处于不良状态。尝试不同的激活功能或更简单的模型,以便它不会去那里。
或者,您可以拥有检查点(在每X步之后保存模型)并查看错误之前选择检查点。