代码之家  ›  专栏  ›  技术社区  ›  tidy

csvlogger不适用于Model.Evaluate过程

  •  0
  • tidy  · 技术社区  · 5 年前

    我想将评估结果记录到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
    

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   Manoj Mohan    5 年前

    这是预期行为。 CSVLogger 仅为培训实现回调方法。 为了评估, on_test_begin() , on_test_batch_begin() , on_test_batch_end() on_test_end() callback方法由keras培训模块调用,该模块不是由csvlogger实现的,因此与model.evaluate()一起使用时不会创建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])