CSVLogger 不适用于 keras 的 model.evaluate 进程
CSVLogger does not work for model.evaluate process for keras
我想将评估结果记录到带有 tensorflow 2.0 (keras) 的文件中。我使用回调方法。它适用于 model.fit 但似乎不适用于 model.evaluate。
这是我的代码:
csv_logger = CSVLogger(logfile, append=True, separator=';')
model.fit(train_dataset, epochs=50, callbacks=[csv_logger]) // works
model.evaluate(test_dataset, callbacks=[csv_logger]) // not work
我是否以错误的方式将评估结果记录到文件中?
这是预期的行为。 CSVLogger
仅为训练实施回调方法。
对于评估,on_test_begin()
、on_test_batch_begin()
、on_test_batch_end()
和 on_test_end()
回调方法由 keras 训练模块调用,这些方法未由 CSVLogger 实现,因此在使用时不会创建 csv 文件model.evaluate().
可以像这样实现自定义 CSV 回调:
class MyCSVLogger(Callback):
def __init__(self, filename):
self.filename = filename
print(filename)
def on_test_begin(self, logs=None):
# open csv file
print('test begin')
def on_test_batch_begin(self, batch, logs=None):
pass
def on_test_batch_end(self, batch, logs=None):
# write the contents of the dictionary logs to csv file
# sample content of logs {'batch': 0, 'size': 2, 'loss': -0.0, 'accuracy': 1.0}
print(logs)
def on_test_end(self, logs=None):
# close csv file
print('test end')
csv_logger = MyCSVLogger('abc.csv')
model.evaluate(X_eval,y_eval, callbacks=[csv_logger])
只是在这里为 Manoj Mohan 的出色回答加我 2 美分。这有点 hacky,但我发现添加以下代码行使其适用于 TF2.1:
from tensorflow.keras.callbacks import CSVLogger
CSVLogger.on_test_begin = CSVLogger.on_train_begin
CSVLogger.on_test_batch_end = CSVLogger.on_epoch_end
CSVLogger.on_test_end = CSVLogger.on_train_end
基本上它只是将测试用例函数添加到 CSVLogger class,这些函数与训练用例函数相同。唯一需要注意的是,它还会在您的 CSV 文件中创建一个纪元列。保存的统计数据来自批次
我想将评估结果记录到带有 tensorflow 2.0 (keras) 的文件中。我使用回调方法。它适用于 model.fit 但似乎不适用于 model.evaluate。 这是我的代码:
csv_logger = CSVLogger(logfile, append=True, separator=';')
model.fit(train_dataset, epochs=50, callbacks=[csv_logger]) // works
model.evaluate(test_dataset, callbacks=[csv_logger]) // not work
我是否以错误的方式将评估结果记录到文件中?
这是预期的行为。 CSVLogger
仅为训练实施回调方法。
对于评估,on_test_begin()
、on_test_batch_begin()
、on_test_batch_end()
和 on_test_end()
回调方法由 keras 训练模块调用,这些方法未由 CSVLogger 实现,因此在使用时不会创建 csv 文件model.evaluate().
可以像这样实现自定义 CSV 回调:
class MyCSVLogger(Callback):
def __init__(self, filename):
self.filename = filename
print(filename)
def on_test_begin(self, logs=None):
# open csv file
print('test begin')
def on_test_batch_begin(self, batch, logs=None):
pass
def on_test_batch_end(self, batch, logs=None):
# write the contents of the dictionary logs to csv file
# sample content of logs {'batch': 0, 'size': 2, 'loss': -0.0, 'accuracy': 1.0}
print(logs)
def on_test_end(self, logs=None):
# close csv file
print('test end')
csv_logger = MyCSVLogger('abc.csv')
model.evaluate(X_eval,y_eval, callbacks=[csv_logger])
只是在这里为 Manoj Mohan 的出色回答加我 2 美分。这有点 hacky,但我发现添加以下代码行使其适用于 TF2.1:
from tensorflow.keras.callbacks import CSVLogger
CSVLogger.on_test_begin = CSVLogger.on_train_begin
CSVLogger.on_test_batch_end = CSVLogger.on_epoch_end
CSVLogger.on_test_end = CSVLogger.on_train_end
基本上它只是将测试用例函数添加到 CSVLogger class,这些函数与训练用例函数相同。唯一需要注意的是,它还会在您的 CSV 文件中创建一个纪元列。保存的统计数据来自批次