要在每个时期后显示您的测试准确性,您可以自定义您的fit
函数来显示此指标。看看这个文档 https://www.tensorflow.org/guide/keras/customizing_what_happens_in_fit或者你可以,如图所示here https://github.com/keras-team/keras/issues/2548,为您的测试数据集定义一个简单的回调并将其传递到您的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))])
如果您想要完全的灵活性,您可以尝试使用训练循环 https://www.tensorflow.org/guide/basic_training_loops.
更新:由于您希望所有指标都使用一个 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])