【问题标题】: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 问题非常不清楚。您帖子中的模型预测代码在哪里?您是否在查看预测标签或首先获得预测本身时遇到问题?在这两种情况下,显示模型结构都是无关紧要的(第三次......)。

标签: python tensorflow machine-learning computer-vision classification


【解决方案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}\n{v2}\n{v3}" 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/…
猜你喜欢
  • 2021-03-12
  • 2015-04-12
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多