python - 每个纪元后的自定义回调以记录某些信息

标签 python machine-learning keras

我知道如何 save the model after every epoch :

savemodel = ModelCheckpoint(filepath='models/model_{epoch:02d}-{loss:.2f}.h5')
model.fit(X, Y, batch_size=4, epochs=32, verbose=1, callbacks=[savemodel])

如何使用自定义回调函数来记录某些信息:

def write_metrics(): 
    with open('log.txt', 'a') as f:  # append to the log file
        f.write('{epoch:02d}: loss = {loss:.1f}')

model.fit(X, Y, batch_size=4, epochs=32, verbose=1, callbacks=[savemodel, write_metrics])

?

使用此代码将无法工作,因为 {loss}{epoch} 未在 f.write('{epoch:02d} : loss = {loss:.1f}').

最佳答案

这是解决方案,通过子类化 Callback:

from keras.callbacks import Callback

class MyLogger(Callback):
    def on_epoch_end(self, epoch, logs=None):
        with open('log.txt', 'a+') as f:
            f.write('%02d %.3f\n' % (epoch, logs['loss']))

然后

mylogger = MyLogger()
model.fit(X, Y, batch_size=32, epochs=32, verbose=1, callbacks=[mylogger])

甚至

model.fit(X, Y, batch_size=32, epochs=32, verbose=1, callbacks=[MyLogger()])

关于python - 每个纪元后的自定义回调以记录某些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640596/

相关文章:

python - python排序中输入变量不可更改的问题

machine-learning - SVM 权重向量

keras - 如何使用 conda 更新 Keras

python - 是否可以在我的 tensorflow 训练模型上添加另一个数据集?

python - 未找到 Virtualenv 命令

python - 如何改进这个 django View 代码?

python - 如何修改 train_step 以便在调用 model.fit() 时支持验证集?

python - 如何使用 scikit-learn 在 Python 中打印简单线性回归的截距和斜率?

python - 如何在 Keras 中使用类权重进行图像分割

python - 交叉熵损失和逻辑损失之间有什么区别吗?