对不起,这个小问题,如果这不是合适的地方,请给我一个更好的来源。
是否有一种只为validation_data打印keras指标的方法?
我想跟踪几个划时代的指标(例如精确性、召回率和f1评分)。在keras git历史记录中有几种方便的方法可供使用,但它们在训练时按批处理计算时没有意义,而在测试/验证时则这样做。
所以训练指标只是把我的日志弄得乱七八糟。有办法让他们安静下来吗?
编辑:我知道我可以子类Callback,并且只在划时代结束时做这些,但是那样的话,我将对每个时代的验证数据做两个预测,一个在回调中,另一个由幕后的keras来计算验证损失。
发布于 2017-12-13 03:57:11
只有当ProgbarLogger回调( verbose > 0 )时,才会将该回调添加到模型中。在源代码training.py中
if verbose:
if steps_per_epoch is not None:
count_mode = 'steps'
else:
count_mode = 'samples'
callbacks += [cbks.ProgbarLogger(count_mode)]因此,一个可能的解决办法是:
verbose=0中指定fit()以抑制内置ProgbarLoggerProgbarLogger,并更改代码以忽略培训指标。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,则在初始化ValOnlyProgbarLogger时需要指定count_mode='steps'。
https://stackoverflow.com/questions/47774931
复制相似问题