tf.keras 自定义指标给出的结果不正确

tf.keras custom metric is giving incorrect results

我在 tf.keras 中针对多标签分类问题实施了自定义指标。

def multilabel_TP(y_true, y_pred, thres = 0.4):
  return (      
                  tf.math.count_nonzero(
                                         tf.math.logical_and(tf.cast(y_true, tf.bool),
                                         tf.cast(y_pred >= thres, tf.bool))
                                       )
         )

count_zero 函数产生整数结果,但是 运行 模型给出浮点值。当在 keras 模型的范围之外尝试时,自定义函数给出了正确的结果。

 8/33 [======>.......................] - ETA: 27s - loss: 0.4294 - multilabel_TP: **121.6250** 
model.compile(loss = 'binary_crossentropy', metrics = multilabel_TP, optimizer= 'adam')
model.fit(train_sentences, y_train, batch_size= 128, epochs = 20, validation_data= (test_sentences, y_test))

为什么会这样?

keras 进度条中显示的是您的 loss/metrics 批次的 运行 平均值,因为模型是按批次训练的,并且权重在每个批次后都在变化。这就是您获得浮点值的原因。

您的指标还应该 return 一个浮点值,也许可以通过对批处理中的元素数量进行除法。那么指标值将更有意义。