[英]how to validate neural network in tensorflow?
目前,我的神經網絡僅使用訓練數據集進行訓練,但我也想進行驗證,但我無法弄清楚該怎么做。 我應該在每個時期之后對整個驗證集進行測試嗎? 如果是,那么從測試中,我將獲得准確性,但是我也無法弄清楚該怎么做? 如何根據它調整參數? 我是否再次運行優化器? 在這種情況下,驗證集的結果如何影響它?
optimiser = tf.train.RMSPropOptimizer(learning_rate=learning_rate).minimize(cost)
# finally setup the initialisation operator
init_op = tf.global_variables_initializer()
train = ["/Users/User/project/data/train.tfrecords"]
dataset = d.getTrainData(train, trainSize, batch_size)
iterator = dataset.make_initializable_iterator()
x_batch, y_batch = iterator.get_next()
validate = ["/Users/User/project/data/validate.tfrecords"]
datasetV = d.getValData(validate, valSize, batch_size)
iteratorV = datasetV.make_initializable_iterator()
x_batch_V, y_batch_V = iteratorV.get_next()
with tf.Session() as sess:
saver = tf.train.Saver()
sess.run(init_op)
e = 0
for _ in range(epochs):
dataset.shuffle(dataSize)
e = e + 1
sess.run(iterator.initializer)
sess.run(iteratorV.initializer)
i = 1
try:
while True:
xy, z = sess.run((x_batch, y_batch))
summary, _, c = sess.run([merged, optimiser, cost],
feed_dict={x: xy, y: z})
print ("cost of batch ", i, ": ", c)
train_writer.add_summary(summary, e)
i = i + 1
except tf.errors.OutOfRangeError:
# Raised when we reach the end of the file.
pass
print ("end of epoch ", e)
save_path = saver.save(sess, "/Users/User/project/model/model.ckpt")
print("Model saved in file: %s" % save_path)
return
(順便說一句我正在使用tensorflow 1.2版)感謝您的幫助!
您需要一個驗證集,該驗證集與訓練集不同。 如果您沒有,請考慮使用一些隨機過程拆分訓練集,以選擇隨機示例來選擇驗證集。 您代碼中的唯一區別應該是您不運行訓練操作(從sess.run
刪除optimiser
)。
至少要在培訓結束時運行一次,並檢查損失(以及可能對您重要的其他指標)是否足夠接近您從培訓中獲得的損失。 關鍵是要確保您沒有過度擬合訓練數據集。 如果您進行繪圖,則可能需要不定期運行以將其與訓練數據一起繪圖。 如果您想在模型開始過度擬合時盡早停止,查看圖有時會很有用。
如果要進行超參數調整,則需要對超參數進行各種更改來運行訓練,然后選擇組合,以在驗證數據集上為您提供最佳結果。 您應該在最后使用第三個數據集(測試數據集),以確保在進行超參數調整時不會意外過擬合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.