[英]How to use tfa.metrics.F1Score with image_dataset_from_directory correctly?
Colab code is here : Colab 代码在这里:
I am following the docs here to get the result for multiclass prediction我正在关注此处的文档以获得多类预测的结果
When I train using当我训练使用
#last layer
tf.keras.layers.Dense(2, activation='softmax')
model.compile(optimizer="adam",
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=[tf.keras.metrics.CategoricalAccuracy(),
tfa.metrics.F1Score(num_classes=2, average='macro')])
I get我明白了
144/144 [==] - 8s 54ms/step - loss: 0.0613 - categorical_accuracy: 0.9789 - f1_score: 0.9788 - val_loss: 0.0826 - val_categorical_accuracy: 0.9725 - val_f1_score: 0.9722
When I do:当我做:
model.evaluate(val_ds)
I get我明白了
16/16 [==] - 0s 15ms/step - loss: 0.0826 - categorical_accuracy: 0.9725 - f1_score: 0.9722
[0.08255868405103683, 0.9725490212440491, 0.9722140431404114]
I would like to use the metric.result
as in the official website.我想在官方网站上使用
metric.result
。 When I load the below code, I get 0.4875028
which is wrong.当我加载下面的代码时,我得到
0.4875028
这是错误的。 How can I get the correct predicted_categories
and true_categories
?如何获得正确的
true_categories
predicted_categories
metric = tfa.metrics.F1Score(num_classes=2, average='macro')
predicted_categories = model.predict(val_ds)
true_categories = tf.concat([y for x, y in val_ds], axis=0).numpy()
metric.update_state(true_categories, predicted_categories)
result = metric.result()
print(result.numpy())
#0.4875028
Here is how I loaded my data这是我加载数据的方式
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
main_folder,
validation_split=0.1,
subset="training",
label_mode='categorical',
seed=123,
image_size=(dim, dim))
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
main_folder,
validation_split=0.1,
subset="validation",
label_mode='categorical',
seed=123,
image_size=(dim, dim))
From: https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory来自: https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory
tf.keras.preprocessing.image_dataset_from_directory(
directory, labels='inferred', label_mode='int',
class_names=None, color_mode='rgb', batch_size=32, image_size=(256,
256), shuffle=True, seed=None, validation_split=None, subset=None,
interpolation='bilinear', follow_links=False
)
The shuffle
by default is True
, and that is a problem for your val_ds
, which we do not want to shuffle.默认情况下,
shuffle
是True
,这对您的val_ds
来说是个问题,我们不想随机播放。
The correct metrics are the ones reported during the training;正确的指标是训练期间报告的指标; Also I recommend that you can also manually retrieve your validation dataset and check the metrics once you make predictions on it (not necessarily via
flow_from_directory()
).此外,我建议您也可以手动检索验证数据集并在对其进行预测后检查指标(不一定通过
flow_from_directory()
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.