Как записать вывод потери Keras в файл

Когда вы запускаете модель нейронной сети Keras, вы можете увидеть что-то вроде этого в консоли:

Epoch 1/3 6/1000 [..............................] - ETA: 7994s - loss: 5111.7661 

С течением времени потери, надеюсь, улучшаются. Я хочу записывать эти потери в файл со временем, чтобы я мог учиться у них. Я пытался:

 logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG) 

но это не сработает. Я не уверен, какой уровень ведения журнала мне нужен в этой ситуации.

Я также попытался использовать обратный вызов, например, в:

 def generate_train_batch(): while 1: for i in xrange(0,dset_X.shape[0],3): yield dset_X[i:i+3,:,:,:],dset_y[i:i+3,:,:] class LossHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}): self.losses = [] def on_batch_end(self, batch, logs={}): self.losses.append(logs.get('loss')) logloss=LossHistory() colorize.fit_generator(generate_train_batch(),samples_per_epoch=1000,nb_epoch=3,callbacks=['logloss']) 

но, очевидно, это не запись в файл. Независимо от метода, через обратный вызов или модуль регистрации или что-то еще, я хотел бы услышать ваши решения для регистрации потери керановой нейронной сети в файл. Благодаря!

Существует простое решение вашей проблемы. Каждый раз, когда используется какой-либо метод fit , в результате возвращается специальный обратный вызов, называемый History Callback . Он имеет history поля, которая является словарем всех показателей, зарегистрированных после каждой эпохи. Таким образом, чтобы получить список значений функции потерь после каждой эпохи, вы можете легко сделать:

 history_callback = model.fit(params...) loss_history = history_callback.history["loss"] 

Легко сохранить такой список в файл (например, путем преобразования его в массив numpy и использование метода savetxt ).

ОБНОВИТЬ:

Пытаться:

 import numpy numpy_loss_history = numpy.array(loss_history) numpy.savetxt("loss_history.txt", numpy_loss_history, delimiter=",") 

ОБНОВЛЕНИЕ 2:

Решение проблемы записи потери после каждой партии записано в документации Keras Callbacks в параграфе « Создать обратный вызов».

Вы можете использовать обратный вызов CSVLogger .

как пример:

 from keras.callbacks import CSVLogger csv_logger = CSVLogger('log.csv', append=True, separator=';') model.fit(X_train, Y_train, callbacks=[csv_logger]) 

Посмотрите: Keras Callbacks

Старый вопрос, но здесь идет. Выход Keras history идеально соответствует вводу данных pandas DataSet.

Если вы хотите, чтобы вся история была csv в одной строке: pandas.DataFrame(model.fit(...).history).to_csv("history.csv")

ура

Вы можете перенаправить объект sys.stdout к файлу перед методом model.fit и переназначить его на стандартную консоль после метода model.fit следующим образом:

 import sys oldStdout = sys.stdout file = open('logFile', 'w') sys.stdout = file model.fit(Xtrain, Ytrain) sys.stdout = oldStdout