Keras 训练循环如何过滤损失值?



我有一个 keras 模型设置如下 (TF 1.2.1(:

import tensorflow.contrib.keras as keras
model = keras.models.Sequential()
...
model.compile(loss=keras.losses.mean_squared_error,
optimizer=keras.optimizers.Adam(lr=1e-4))
model.summary()

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 29, 29, 64)        6336      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 13, 13, 128)       204928    
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 11, 11, 256)       295168    
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 5, 5, 256)         590080    
_________________________________________________________________
flatten_1 (Flatten)          (None, 6400)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 12802     
=================================================================
Total params: 1,109,314
Trainable params: 1,109,314
Non-trainable params: 0

输出是一个简单的浮点向量,它会根据需要收敛。损失是均方误差。示例输出:

18/100 [====>.........................] - ETA: 30s - loss: 31.5118
19/100 [====>.........................] - ETA: 29s - loss: 30.7577
20/100 [=====>........................] - ETA: 29s - loss: 29.7815
21/100 [=====>........................] - ETA: 28s - loss: 29.0535
22/100 [=====>........................] - ETA: 28s - loss: 28.1963
23/100 [=====>........................] - ETA: 28s - loss: 27.3314
24/100 [======>.......................] - ETA: 28s - loss: 26.7219
25/100 [======>.......................] - ETA: 28s - loss: 25.9702
26/100 [======>.......................] - ETA: 27s - loss: 25.4181
27/100 [=======>......................] - ETA: 27s - loss: 25.0638
28/100 [=======>......................] - ETA: 27s - loss: 24.6081
29/100 [=======>......................] - ETA: 26s - loss: 24.0928

损失似乎在稳步减少。但是,当我查看实际损失(keras.callbacks.LambdaCallback@on_batch_end(时,它就不是那么顺利了:

25.473383
28.051779
20.519075
13.204493
20.74946
21.246254
25.611149
13.194682
13.268744
15.408422
17.183851
11.232637
14.493115
10.196851

我试图挖掘 Keras 源代码,但无法理解引擎盖下发生了什么。Keras 如何过滤实际损失?在源代码的什么位置可以找到这个?

谢谢!

因此,progbar 中实际显示的是打印时给定纪元内执行的所有批次的损失平均值。(从 2 批次后的前 2 个开始的平均值,从 3 个时期后的前 3 个时期开始的平均值,依此类推(。所以 - 您可以通过取前n损失值的平均值来获取n-th纪元之后打印的值。您可以在Progbar定义中阅读有关它的信息。

最新更新