在图像分类中如何计算正确的标签?
In image classification how to count correct label?
我有一个基本的分类问题; 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_lb
和 test_lb
对 training/testing 数据集有相应的标签,它是一个包含 0 或 1 的数组。例如, train_ds[0]
的标签将是train_lb[0]
如果你想一次获得所有这些信息,我认为更简单的方法是做一个混淆矩阵,它会告诉你所有的东西是如何分类的:
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'))
我有一个基本的分类问题; 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_lb
和 test_lb
对 training/testing 数据集有相应的标签,它是一个包含 0 或 1 的数组。例如, train_ds[0]
的标签将是train_lb[0]
如果你想一次获得所有这些信息,我认为更简单的方法是做一个混淆矩阵,它会告诉你所有的东西是如何分类的:
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'))