在图像分类中如何计算正确的标签? [关闭]

Posted

技术标签:

【中文标题】在图像分类中如何计算正确的标签? [关闭]【英文标题】:In image classification how to count correct label? [closed] 【发布时间】:2021-11-20 05:22:10 【问题描述】:

我有一个基本的分类问题; 2 个分类 0 或 1 的类。我已经使用 Keras VGG16 训练了我的模型,但是如何计算正确标签的数量?还是标签 0 下所有图像的数量? 假设我的模型应该区分猫和狗,如何计算模型预测的验证集中有多少正确标记的猫?我确实有准确性,但我需要访问计数。

这是我的模型:

#base_mode= VGG16()

model = tf.keras.models.Sequential()
#model.add(base_model)
model.add(tf.keras.layers.Convolution2D(16,4,3, input_shape= (32,32,3),activation = 'relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size = (2,2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(32, activation = 'relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(optimizer="Adam", loss="binary_crossentropy" , metrics=['accuracy'])

epochs = 50
history = model.fit(x=train_ds, y=train_lb , epochs=epochs, validation_data= (test_ds, test_lb) )

train_lbtest_lb 具有训练/测试数据集的对应标签,它是一个包含 0 或 1 的数组。例如,train_ds[0] 的标签将是 train_lb[0]

【问题讨论】:

如果不知道您的train_lbtest_lb 的详细信息,就无法回答这个问题;您在此处发布的模型结构在很大程度上与您的要求无关。 train_lbtest_lb 具有训练/测试数据集的对应标签,它是一个包含 0 或 1 的数组。例如,train_ds[0] 的标签将是 train_lb[0]跨度> 我明白了,这不是我评论的内容;我所说的是 - 如果您对如何从数据中准确获取标签有疑问,请将您的帖子重点放在 数据 上,而不是(不相关的)模型架构上。 我的标签没有任何问题,模型运行良好,准确率达到 93%。我的问题是关于训练这个模型本身和准确性报告之后的问题。我想计算模型的实际输出。我已经知道输入,但我不知道丢失了什么。在我的测试数据集中,我有 100 个标签 0 的数据,如何知道我的模型预测了多少标签 0? 正如我所暗示的,您的 exact 问题非常不清楚。您帖子中的模型预测代码在哪里?您是否在查看预测标签或首先获得预测本身时遇到问题?在这两种情况下,显示模型结构都是无关紧要的(第三次......)。 【参考方案1】:

如果你想一次获得所有这些信息,我认为更简单的方法是做一个混淆矩阵,它会告诉你所有东西是如何分类的:

plt.figure(figsize=(8,6))
plt.title("Confusion matrix")
cf_matrix = metrics.confusion_matrix(y_test, y_pred)
group_names = ["True Neg", "False Pos", "False Neg", "True Pos"]
group_counts = ["0:0.0f".format(value) for value in
                cf_matrix.flatten()]
group_percentages = ["0:.2%".format(value) for value in
                     cf_matrix.flatten()/np.sum(cf_matrix)]
labels = [f"v1\nv2\nv3" for v1, v2, v3 in zip(group_names,group_counts,group_percentages)]
labels = np.asarray(labels).reshape(2,2)
print(sns.heatmap(cf_matrix, annot=labels, fmt="", cmap='Blues'))

【讨论】:

y_test 和 y_pred 有什么区别?如何访问 y_pred? y_pred 是您在训练模型后所做的预测。 y_test 是 y 的一部分,你应该在最后测试你的模型时保持“原样”。您可以使用诸如 train_test_split 之类的工具创建 y_test,例如:scikit-learn.org/stable/modules/generated/…

以上是关于在图像分类中如何计算正确的标签? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

图像分割和分类哪个吃资源

使用迁移学习对单类数据集进行图像分类[关闭]

关于图像分类问题读后感

在 TensorFlow 图像分类中获取标签

计算机视觉+人工智能面试笔试总结——使用CNN进行图像分类

对象检测/分类任务的性能指标(用于图像)