Python Tensorflow 2.0:模型检查点不工作的自定义度量(平衡精度分数)

Python Tensorflow 2.0:模型检查点不工作的自定义度量(平衡精度分数),python,keras,tensorflow2.0,Python,Keras,Tensorflow2.0,我想实现一个基于平衡精度分数的模型检查点回调。为此,我实现了以下类: class BalAccScore(keras.callbacks.Callback): def __init__(self, validation_data=None): super(BalAccScore, self).__init__() self.validation_data = validation_data def on_train_begin(

我想实现一个基于平衡精度分数的模型检查点回调。为此,我实现了以下类:

class BalAccScore(keras.callbacks.Callback):

    def __init__(self, validation_data=None):
        super(BalAccScore, self).__init__()
        self.validation_data = validation_data
        
    def on_train_begin(self, logs={}):
      self.balanced_accuracy = []

    def on_epoch_end(self, epoch, logs={}):
        y_predict = tf.argmax(self.model.predict(self.validation_data[0]), axis=1)
        y_true = tf.argmax(self.validation_data[1], axis=1)
        balacc = balanced_accuracy_score(y_true, y_predict)
        self.balanced_accuracy.append(round(balacc,6))
        logs["val_bal_acc"] = balacc
        keys = list(logs.keys())

        print("\n ------ validation balanced accuracy score: %f ------\n" %balacc)
然后我定义以下回调

balAccScore = BalAccScore(validation_data=(X_2, y_2))
mc = ModelCheckpoint(filepath=callback_path, monitor="val_bal_acc", verbose=1, save_best_only=True, save_freq='epoch')

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['val_bal_acc'])

history = model.fit(X_1, y_1, epochs = 5, batch_size = 512,
                    callbacks=[balAccScore,  mc],
                    validation_data = (X_2, y_2)
                    )
然后我得到了错误

ValueError:未知度量函数:val\u bal\u acc

尽管事实上,当使用例如准确性时,我会在历史记录下找到它,即在编译时设置metrics=[“acc”]。在这种情况下,我得到了预期的警告:

WARNING:tensorflow:Can save best model only with val_bal_acc available, skipping.

但除此之外,该模型运行良好。不确定它为什么不运行。

您应该删除compile中的引号:

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=[val_bal_acc])

或者至少这是它在R

中的工作原理,你能给出一个google colab链接吗?