是否有可能撤消最后的训练步骤?例如,当损失值为 '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 训练吗?
请您参考如下方法:
没有这样的事情,但是你可以做这样的事情。 在您的模型中添加:
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 步后保存模型)并查看在错误发生前选择一个检查点。
