Keras,仅针对验证数据打印指标

时间:2017-12-12 14:24:29

标签: keras

对不起这个微不足道的问题,如果这不是一个合适的地方,请指出一个更好的来源。

有没有办法只为validation_data打印keras指标?

我想跟踪几个特定时期的指标(例如精确度,召回率和f1得分)。在keras git历史中有几种方便的方法,但是在训练时按批次计算它们没有意义,而它们在测试/验证时进行。

因此,培训指标只是把我的日志弄得一团糟。有没有办法让他们静音?

编辑:我知道我可以继承Callback并且只在纪元结束时做那些,但是那样我每个时期对验证数据进行两次预测,一次在我的回调中,一次由keras在引擎盖下完成计算验证损失。

1 个答案:

答案 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