如何在Keras中的每批次之后更新培训日志输出?

问题描述:

我正在Keras中使用tensorflow后端和Jupyter-Notebook来训练我的模型。虽然MNIST示例在每批次后更新训练日志的输出,但我在不同数据集上的新模型会为每批输出一个新值。现在,而不是使用详细= 2,我希望看到每批后更新的值。如何在Keras中的每批次之后更新培训日志输出?

我的拟合函数如下:

model.fit(X, y_train, validation_split=0.33, epochs=1, batch_size=200, verbose=1) 

输出看起来是这样的:

Train on 16415 samples, validate on 8085 samples 
    Epoch 1/1 
    16415/16415 [==============================] - 
ETA: 73s - loss: 9.0281 -acc: 0.44 - ETA: 49s - loss: 9.0271 - acc: 0.44 - 
ETA: 36s - loss: 8.7043 - acc: 0.46 - ETA: 33s - loss: 8.3979 - acc: 0.47 - 
ETA: 31s - loss: 8.3549 - acc: 0.48 - ETA: 29s - loss: 8.3011 - acc: 0.48 - 
ETA: 28s - loss: 8.1802 - acc: 0.49 - ETA: 27s - loss: 8.1220 - acc: 0.49 - 
ETA: 26s - loss: 8.0995 - acc: 0.49 - ETA: 26s - loss: 8.1178 - acc: 0.49 - 
ETA: 25s - loss: 8.1264 - acc: 0.49 - ETA: 24s - loss: 8.1274 - acc: 0.49 - 
ETA: 24s - loss: 8.0880 - acc: 0.49 - ETA: 23s - loss: 8.0860 - acc: 0.49 - 
ETA: 23s - loss: 8.0894 - acc: 0.49 - ETA: 22s - loss: 8.1303 - acc: 0.49 - 
... 

不过,我希望看到只有一条线,每一批像这样以后更新:

Epoch 1/1 
     16415/16415 [==============================] - 
    ETA: 23s - loss: 9.0281 -acc: 0.44 - ETA: 22s - loss: 9.0271 - acc: 0.49 

除了设置verbose = 2之外,我在keras文档中找不到任何选项,但是这样做培训期间不更新日志。

+0

我认为它是一个问题'stdout',如果你在命令行运行你的代码,我想你会看到的输出如何会期待。这也是困扰我的东西...... – DJK

+1

[Keras详细的培训进度条可能会在每个批次问题上编写一个新行]重复(https://stackoverflow.com/questions/41442276/keras-verbose-training-progress -bar写作-A-新线路上的每批次的问题) – DJK

您可以使用LambdaCallback来调用批次和时期之间的自定义函数。

使用on_batch_end参数传递给函数调用:

from keras.callbacks import LambdaCallback 

def batchOutput(batch, logs): 

    print("Finished batch: " + str(batch)) 
    print(logs) 

batchLogCallback = LambdaCallback(on_batch_end=batchOutput) 

model.fit(x,y,....,callbacks=[batchLogCallback])