对不起这个微不足道的问题,如果这不是一个合适的地方,请指出一个更好的来源。
有没有办法只为validation_data打印keras指标?
我想跟踪几个特定时期的指标(例如精确度,召回率和f1得分)。在keras git历史中有几种方便的方法,但是在训练时按批次计算它们没有意义,而它们在测试/验证时进行。
因此,培训指标只是把我的日志弄得一团糟。有没有办法让他们静音?
编辑:我知道我可以继承Callback
并且只在纪元结束时做那些,但是那样我每个时期对验证数据进行两次预测,一次在我的回调中,一次由keras在引擎盖下完成计算验证损失。
答案 0 :(得分:3)
ProgbarLogger
仅在verbose > 0
时才会将if verbose:
if steps_per_epoch is not None:
count_mode = 'steps'
else:
count_mode = 'samples'
callbacks += [cbks.ProgbarLogger(count_mode)]
回调添加到模型中。在源代码training.py中:
verbose=0
所以可能的解决方法是:
fit()
中指定ProgbarLogger
以取消内置ProgbarLogger
fit()
并更改代码以忽略培训指标from keras.callbacks import ProgbarLogger
class ValOnlyProgbarLogger(ProgbarLogger):
def __init__(self, verbose, count_mode='samples'):
# Ignore the `verbose` argument specified in `fit()` and pass `count_mode` upstream
self.verbose = verbose
super(ValOnlyProgbarLogger, self).__init__(count_mode)
def on_train_begin(self, logs=None):
# filter out the training metrics
self.params['metrics'] = [m for m in self.params['metrics'] if m.startswith('val_')]
self.epochs = self.params['epochs']
input_tensor = Input(shape=(256,))
out = Dense(10)(input_tensor)
model = Model(input_tensor, out)
model.compile(loss='mse', optimizer='adam', metrics=['mae', 'cosine'])
model.fit(X, Y, validation_data=(XX, YY), verbose=0,
callbacks=[ValOnlyProgbarLogger(verbose=1)])
例如,
Epoch 1/1
1000/1000 [==============================] - 0s 392us/step - val_loss: 0.2479 - val_mean_absolute_error: 0.3988 - val_cosine_proximity: -0.7022
现在将抑制培训指标:
fit_generator
请注意,如果您使用的是fit
而不是count_mode='steps'
,则在初始化ValOnlyProgbarLogger
时需要指定ES6
。