Skip to main content
 首页 » 编程设计

python之如何撤消 TensorFlow session 中的最后一个训练步骤

2025年01月19日29lovecherry

是否有可能撤消最后的训练步骤?例如,当损失值为 '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 步后保存模型)并查看在错误发生前选择一个检查点。