我在用TensorFlow做实验。我刚刚发布了一个关于它面临的问题的question。不过,我也有一个可能更理论上的问题,但实际后果。
在训练模型时,我发现精度可能会有所不同。因此,可能会发生最后一个纪元没有显示出最佳的精度。例如,在历元N上,I的精度为85%,而在最后一个历元上,精度为65%。我想用N历元上的权重来预测。
我想知道是否有一种方法能以最好的精度记住那个时代的权值,以便以后使用?
第一个简单的方法是:
运行N个阶段
记住最好的准确性
重新开始训练,直到我们达到一个新纪元,显示出与步骤2中存储的相同的精度。
使用当前重量预测
有更好的吗?

最佳答案

对!你需要在你的训练过程中做一个saver and save your session periodically。伪代码实现如下所示:

model = my_model()
saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(init_op)
    for epoch in range(NUM_EPOCHS):
        for batch in range(NUM_BATCHES):

            # ... train your model ...

            if batch % VALIDATION_FREQUENCY == 0:
                # Periodically test against a validation set.
                error = sess.run(model.error, feed_dict=valid_dict)
                if error < min_error:
                    min_error = error  # store your best error so far
                    saver.save(sess, MODEL_PATH)  # save the best-performing network so far

然后,当您想根据性能最佳的迭代测试模型时:
saver.restore(sess, MODEL_PATH)
test_error = sess.run(model.error, feed_dict=test_dict)

在保存和加载元图时也可以查看this tutorial。我发现根据您的用例,加载步骤有点棘手。

07-27 18:09