在训练模型时,我试图在 ResNeXt 和 ResNet 上获得二元分类问题的 f1 分数。当我使用 tf.keras.metrics.F1Score 函数时,我在尝试拟合模型时收到以下错误:
ValueError:FBetaScore 期望形状为(batch_size、output_dim)的 2D 输入,且 output_dim 已完全定义(不是 None)。收到的输入形状: y_pred.shape=(None, 2) 和 y_true.shape=(None, None)。
但是,如果我使用 tfa.metrics.F1Score 函数,我会得到输出而不会出现任何错误。为什么会发生这种情况?这两个 f1 分数函数有什么区别?
此外,在使用 tfa.metrics.F1Score 时,我还打印精度、召回率和准确度值。它们都有相同的值怎么会发生呢?
这就是我编译模型的方式:
f1 =tfa.metrics.F1Score(num_classes=2, average='weighted')
f1score = tf.keras.metrics.F1Score(average="weighted",threshold=0.5)
model.compile (
loss = 'categorical_crossentropy',
optimizer="adam" ,metrics=[ f1score, "Precision", "Recall"]
)
我如何适合我的模型:
history = model.fit(
training_set,
validation_data = val_set,
epochs = 5,
steps_per_epoch = 95,
validation_steps = 95
)
制作trainig_Set和val_set:
training_set = train_datagen.flow_from_directory(
train_Path,
target_size = IMAGE_SIZE,
batch_size = 32,
class_mode = 'categorical'
)
我今天在 FbetaScore 上也遇到了这个问题..你找到解决方案了吗?
fbeta_score = tf.keras.metrics.FBetaScore(average='micro', beta=5.0, threshold=0.6, name='fbeta_score')
# ValueError: FBetaScore expects 2D inputs with shape (batch_size, output_dim). Received input shapes: y_pred.shape=(16, 512, 12) and y_true.shape=(16, 512).