我最近开始研究神经网络,了解了很多基础知识。最近,我用 Keras 编写了一个 CNN,将猫和狗的图像分为 37 个不同的品种。制作 m...
我最近开始研究神经网络,了解了很多基础知识。最近,我用 Keras 编写了一个 CNN,将猫和狗的图像分为 37 个不同的品种。制作模型和获取数据很容易,现在我已经成功训练模型,根据 Keras 指标获得约 60% 的准确率。但是,我不知道如何在进行预测时打印结果。
这是我的模型代码:
model = k.models.Sequential([k.layers.Conv2D(150, (3, 3), activation='relu', input_shape=(224, 224, 3)),
k.layers.Conv2D(80, (3, 3), activation='relu', input_shape=(224, 224, 3)),
k.layers.Conv2D(50, (3, 3), activation='relu', input_shape=(224, 224, 3)),
k.layers.Conv2D(40, (3, 3), activation='relu', input_shape=(224, 224, 3)),
k.layers.Flatten(), k.layers.Dense(37, activation='softmax')])
model.compile(k.optimizers.RMSprop(learning_rate=.00001), loss='categorical_crossentropy', metrics=['accuracy'])
这是我的预测代码:
i = 1
k.models.load_model(checkpoint_filepath)
while i < 15:
try:
img = cv2.imread(files[random.randint(1, 150)])
unfiltered_image = img
img = np.invert(np.array([img]))
prediction = model.predict(img)
print(f"This image is probably a: {np.argmax(prediction)}")
plt.imshow(unfiltered_image, cmap=plt.cm.binary)
plt.show()
finally:
i = (i + 1)
我见过一些在线教程使用 argmax 函数,这就是我在那里使用它的原因。
我尝试使用 if 语句将某些 argmax 输出值映射到某些品种,但由于多种原因,这种方法没有奏效。我尝试将其映射到混淆矩阵上,但也没有奏效。我查看了神经网络,并通过观察值在每一步中如何变化以及当我输入某些输入时某些数字如何变化来确保神经网络正常工作。我真的不确定如何将神经网络产生的这些值转换为可理解的输出。我怎样才能使这些输出合理?