我在用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。我发现根据您的用例,加载步骤有点棘手。