我正在使用 Tensorflow-Keras 開發一個 CNN 模型,其中我已將資料集拆分為訓練、驗證和測驗集。我需要在每個時期結束時呼叫測驗集以及訓練和驗證集來評估模型性能。下面是我跟蹤訓練和驗證集的代碼。
result_dic = {"epochs": []}
json_logging_callback = LambdaCallback(
on_epoch_begin=lambda epoch, logs: [learning_rate],
on_epoch_end=lambda epoch, logs:
result_dic["epochs"].append({
'epoch': epoch 1,
'acc': str(logs['acc']),
'val_acc': str(logs['val_acc'])
}))
model.fit(x_train, y_train,
validation_data=(x_val, y_val),
batch_size=batch_size,
epochs=epochs,
callbacks=[json_logging_callback])
輸出:
Epoch 1/5
1/1 [==============================] - 4s 4s/step - acc: 0.8611 - val_acc: 0.8333
但是,我不確定如何將測驗集添加到我的回呼中以產生以下輸出。
預期輸出:
Epoch 1/5
1/1 [==============================] - 4s 4s/step - acc: 0.8611 - val_acc: 0.8333 - test_acc: xxx
uj5u.com熱心網友回復:
要在每個 epoch 后顯示您的測驗準確率,您可以自定義fit函式以顯示此指標。看看這個檔案,或者你可以,如圖所示這里,定義了一個簡單的回呼為您的測驗資料集,并把它傳遞到你的fit函式:
model.fit(x_train, y_train,
validation_data=(x_val, y_val),
batch_size=batch_size,
epochs=epochs,
callbacks=[json_logging_callback,
your_test_callback((X_test, Y_test))])
如果你想要完全的靈活性,你可以嘗試使用訓練回圈。
更新:由于您希望為所有指標使用單個 JSON,您應該執行以下操作:
定義您TestCallBack的測驗準確度并將其添加loss到您的logs字典中(如果您愿意):
import tensorflow as tf
class TestCallback(tf.keras.callbacks.Callback):
def __init__(self, test_data):
self.test_data = test_data
def on_epoch_end(self, epoch, logs):
x, y = self.test_data
loss, acc = self.model.evaluate(x, y, verbose=0)
logs['test_accuracy'] = acc
然后將測驗準確度添加到您的結果字典中:
result_dic = {"epochs": []}
json_logging_callback = tf.keras.callbacks.LambdaCallback(
on_epoch_begin=lambda epoch, logs: [learning_rate],
on_epoch_end=lambda epoch, logs:
result_dic["epochs"].append({
'epoch': epoch 1,
'acc': str(logs['accuracy']),
'val_acc': str(logs['val_accuracy']),
'test_acc': str(logs['test_accuracy'])
}))
然后在您的fit函式中使用這兩個回呼,但請注意回呼的順序:
model.fit(x_train, y_train,
validation_data=(x_val, y_val),
batch_size=batch_size,
epochs=epochs,
callbacks=callbacks=[TestCallback((x_test, y_test)), json_logging_callback])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323911.html
