Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSVLOGER不适用于KERA的模型评估过程_Python_Keras_Tensorflow2.0 - Fatal编程技术网

Python CSVLOGER不适用于KERA的模型评估过程

Python CSVLOGER不适用于KERA的模型评估过程,python,keras,tensorflow2.0,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, c

我想用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
仅为培训实施回调方法。 对于evaluate,keras培训模块调用了测试开始时的
,测试批处理开始时的
,\u测试批处理结束时的
和测试结束时的
回调方法,这些回调方法不是由CSVLogger实现的,因此与model.evaluate()一起使用时不会创建csv文件

自定义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美分。这有点骇人,但我发现添加以下代码行可以使其适用于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类中,这些测试用例函数与train用例函数相同。唯一需要注意的是,它还将在CSV文件中创建一个历元列。但保存的统计数据来自批次