TensorFlow如何安全地手动终止训练(KeyboardInterrupt)

时间:2017-07-11 11:34:07

标签: python tensorflow neural-network

我希望为我的代码添加功能,这样如果我希望在任何时候终止代码,它将安全地终止训练并保存变量。虽然我已经尝试过寻找更好的解决方案,但我认为抓住KeyboardInterrupt例外是我最好的选择。

然而,它会安全吗?更具体地说,以下代码是否有效:

with tf.Session() as sess    
    try:
        for i in range(FLAGS.max_steps):
            sess.run(train_op, feed_dict=some_feed_dictionary)
            # Some other summary writing and evaluative operations
    except KeyboardInterrupt:
        print("Manual interrupt occurred.")

    print('Done training for {} steps'.format(global_steps))
    save_path = saver.save(sess, 'Standard CNN', global_step=global_steps, write_meta_graph=False)

或者它是否不安全并且可能导致损坏的保存文件,因为键盘中断在任何张量流操作的中间都可以自由发生?有没有足够的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

我个人使用与此非常相似的东西,一直在训练中捕捉KeyboardInterrupt,唯一的区别是我"保存"在每个sess.run步骤(或每个步骤中的每一步)之后,从未遇到过问题。

我不知道#34的答案是否不安全"但我知道我的方法甚至可以避免提出这个问题......

在您的代码中看起来像这样:

with tf.Session() as sess    
    try:
        for i in range(FLAGS.max_steps):
            sess.run(train_op, feed_dict=some_feed_dictionary)
            # Some other summary writing and evaluative operations
            if i % save_steps == 0:
                save_path = saver.save(sess, 'Standard CNN', global_step=global_steps, write_meta_graph=False)
    except KeyboardInterrupt:
        print("Manual interrupt occurred.")
        print('Done training for {} steps'.format(global_steps))

为了澄清,save_steps变量确定了保存之间的步数。