如何在TensorFlow中撤消会话中的最后一个训练步骤?

时间:2018-01-12 11:52:35

标签: python python-3.x tensorflow

是否有可能撤消上一个训练步骤?例如,当损失值为'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培训?

1 个答案:

答案 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步之后保存模型)并查看错误之前选择检查点。