在tensorflow和随机梯度下降的训练中,我偶尔遇到一个问题,在那里我加载了一个小批,对我的优化操作造成了极大的破坏,把它推给了Nans。当然,这会在训练过程中产生一个错误,迫使我重新开始。即使我将优化操作包装在try语句中,当出现异常时,损坏也会发生,并且需要重新启动。
有谁有一个好的方法,基本上,将优化返回到一个有效的状态,当它遇到一个错误?我想你可以用检查点来做这件事,但是保存/恢复的文档很不稳定,我不确定.
发布于 2016-10-27 18:50:48
就像你说的那样,检查站就是这样做的。您的案例的关键步骤如下:
首先,在定义了图形之后创建一个保护程序对象:
saver = tf.train.Saver(max_to_keep=5, keep_checkpoint_every_n_hours=1)接下来,在训练期间间歇地写出检查点:
for step in range(max_steps):
... some training steps here
# Save the model every 100 iterations
if step % 100 == 0:
saver.save(sess, checkpoint_dir, global_step=step)最后,当您捕获一个错误时,重新加载最后一个好的检查点:
# this next command restores the latest checkpoint or explicitly specify the filename if you want to use some other logic
restore_fn = tf.train.latest_checkpoint(FLAGS.restore_dir)
print('Restoring from %s' % restore_fn)
saver.restore(sess, restore_fn)发布于 2016-10-28 10:00:48
回答另一个问题:
您使用的是哪个优化器?
大跳转,像你可以得到简单的梯度下降,不应该是不可能的梯度剪裁或优化一个有限的步长(如亚当)。
https://stackoverflow.com/questions/40289739
复制相似问题