Python 如何在Keras中获取历史回调指标?

Python 如何在Keras中获取历史回调指标?,python,keras,Python,Keras,如何检索回调指标的历史记录?我有一个类Metrics,我在Keras模型的fit函数中使用它,如下callbacks=[model\u Metrics] 这是类Metrics和fit功能的完整代码 class Metrics(Callback): def on_train_begin(self, logs={}): self.val_f1s = [] self.val_bal_accs = [] def on_epoch_end(self, e

如何检索回调指标的历史记录?我有一个类
Metrics
,我在Keras模型的
fit
函数中使用它,如下
callbacks=[model\u 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)
如何获取
val\u f1
val\u bal\u acc
历史记录?现在我只能访问
loss
val\u loss
acc
val\u acc

print(history.history.keys())

要与
keras
historyapi交互,您需要传入
metrics
的参数,而不是
callbacks

在当前状态下,您的
val_f1
val_bal_acc
不会存储在历史对象中,而是存储在您的
model_metrics
对象中

您可以这样访问它们:

model_metrics.val_f1s
这与访问任何对象的属性相同

最后,如果确实要创建自定义度量并希望从历史中访问它,则需要定义自定义度量(作为函数),然后将其传递到
模型中的
度量
kwarg中。编译
。这是这样做的:

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\u my\u metric

应该是
my\u metric(y\u pred,y\u true)
还是
my\u metric(y\u true,y\u pred)
或者它并不重要?另外,我尝试创建一个函数如下:
def my\u metric(targ,predict):val\u targ=np.arg(targ,axis=1)返回度量值。平衡的精度分数(val,targ,predict)
,但失败的消息如下:
属性错误:“Tensor”对象没有属性“argmax”
。对于第二个注释,我认为您应该使用tf.argmax或tf.math.argmax