CSVLogger не работает для model.evaluate процесс для керас - PullRequest
0 голосов
/ 31 мая 2019

Я хочу записать результат оценки в файл с tenorflow 2.0 (керас).Я использую метод обратного вызова.Это хорошо работает для 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

Неправильно ли я веду журнал результатов оценки в файл?

1 Ответ

1 голос
/ 31 мая 2019

Это ожидаемое поведение. CSVLogger реализует методы обратного вызова только для обучения. Для оценки методы обратного вызова on_test_begin(), on_test_batch_begin(), on_test_batch_end() и on_test_end() вызываются обучающим модулем keras, которые не реализованы в CSVLogger, и, следовательно, файлы csv не создаются при использовании с model.evaluate ().

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...