CSVLogger 不适用于 keras 的 model.evaluate 过程

tid*_*idy 3 python keras tensorflow2.0

我想将评估结果记录到带有 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
Run Code Online (Sandbox Code Playgroud)

我是否以错误的方式将评估结果记录到文件中?

Man*_*han 5

这是预期的行为。CSVLogger实现仅用于训练的回调方法。对于评价,on_test_begin()on_test_batch_begin()on_test_batch_end()on_test_end()回调方法由keras训练模块model.evaluate使用时不被CSVLogger实现,并且因此没有CSV文件被创建()调用。

https://github.com/tensorflow/tensorflow/blob/v2.0.0-alpha0/tensorflow/python/keras/callbacks.py#L1514

自定义 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])
Run Code Online (Sandbox Code Playgroud)