0
我想以最高的準確度保存模型,我需要在每個步驟中採取一批驗證數據進行驗證,以便在每一步訓練之後,訓練數據集將因時代而重複使用,但是如果train_batch_size
等於validation_batch_size
,驗證數據集也將被重用?因爲驗證數據集遠小於訓練數據集。我應該怎麼做?我的意思是重用驗證集沒有任何問題?或者我分別設置不同的尺寸。validation_batch_size等於訓練CNN中的train_batch_size?
MAX_EPOCH = 10
for epoch in range(MAX_EPOCH):
# training
train_step = int(80000/TRAIN_BATCH_SIZE)
train_loss, train_acc = 0, 0
for step in range(epoch * train_step, (epoch + 1) * train_step):
x_train, y_train = sess.run([x_train_batch, y_train_batch])
train_summary, _, err, ac = sess.run([merged, train_op, loss, acc],
feed_dict={x: x_train, y_: y_train,
mode: learn.ModeKeys.TRAIN,
global_step: step})
train_loss += err
train_acc += ac
if (step + 1) % 100 == 0:
train_writer.add_summary(train_summary, step)
print("Epoch %d,train loss= %.2f,train accuracy=%.2f%%" % (
epoch, (train_loss/train_step), (train_acc/train_step * 100.0)))
# validation
val_step = int(20000/VAL_BATCH_SIZE)
val_loss, val_acc = 0, 0
for step in range(epoch * val_step, (epoch + 1) * val_step):
x_val, y_val = sess.run([x_val_batch, y_val_batch])
val_summary, err, ac = sess.run([merged, loss, acc],
feed_dict={x: x_val, y_: y_val, mode: learn.ModeKeys.EVAL,
global_step: step})
val_loss += err
val_acc += ac
if (step + 1) % 100 == 0:
valid_writer.add_summary(val_summary, step)
print(
"Epoch %d,validation loss= %.2f,validation accuracy=%.2f%%" % (
epoch, (val_loss/val_step), (val_acc/val_step * 100.0)))
我剛修改我的問題,根據你的意思添加一些代碼,上面的代碼是正確的?每個時代我都有20000個驗證集樣本迭代完成驗證,最後保存模型的最精確時代?在另一個問題中,我展示了我所有的代碼,也許你可以看看它[https://stackoverflow.com/questions/45953858/how-to-adjust-parameters-when-the-cnn-model-is-over -配件)。 – Gary