如何检索回调指标的历史记录?我有一个类,Metrics
并在fit
Keras模型的功能中使用它,如下所示callbacks=[model_metrics]
。
这是该类Metrics
和fit
函数的完整代码。
class Metrics(Callback):
def on_train_begin(self, logs={}):
self.val_f1s = []
self.val_bal_accs = []
def on_epoch_end(self, epoch, logs={}):
val_predict = np.argmax((np.asarray(self.model.predict(self.validation_data[0]))).round(), axis=1)
val_targ = np.argmax(self.validation_data[1], axis=1)
_val_f1 = metrics.f1_score(val_targ, val_predict, average='weighted')
_val_bal_acc = metrics.balanced_accuracy_score(val_targ, val_predict)
self.val_f1s.append(_val_f1)
self.val_bal_accs.append(_val_bal_acc)
print(" — val_f1: {:f} — val_bal_acc: {:f}".format(_val_f1, _val_bal_acc))
return
model_metrics = Metrics()
history = model.fit(np.array(X_train), y_train,
validation_data=(np.array(X_test), y_test),
epochs=5,
batch_size=2,
callbacks=[model_metrics],
shuffle=False,
verbose=1)
我怎样才能获得history
的val_f1
和val_bal_acc
?现在我只能访问loss
,val_loss
,acc
,val_acc
:
print(history.history.keys())
要与互动keras
历史API,你需要在参数传递metrics
,而不是callbacks
。
在当前状态下,您的val_f1
和val_bal_acc
不会存储在历史记录对象中,而是会存储在您的model_metrics
对象中。
您可以像这样访问它们:
model_metrics.val_f1s
这与访问任何对象的属性相同。
最后,如果您确实想创建自定义指标并希望从历史记录中访问它,则需要定义一个自定义指标(作为函数),然后将其传递到中的metrics
kwarg中model.compile
。这样做是这样的:
def my_metric(y_true y_pred):
return y_true # just a dummy return value
# assume that the model is defined somewhere
model.compile(loss=..., optimizer=..., metrics = [my_metric]
然后,您将能够val_my_metric
在历史对象中找到不合适的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句