神经网络训练的准确性太低,无法在Keras图像分类中进行预测

时间:2020-01-27 19:19:10

标签: python tensorflow machine-learning keras neural-network

我正在按照本指南学习神经网络的图像分类:

https://www.tensorflow.org/tutorials/keras/classification

然后为我的自定义数据集实现此代码。我有2300个灰度1024x1024图片来训练模型。我将所有图像都保存在3D numpy数组中,分别是train_images和test_images。我有4个类别,分别是0、1、2、3,并将它们作为列表保存,命名为“标签”。

train_images.shape # returns (2300,1024,1024)
test_images.shape # returns (384,1024,1024)

# normalize values
train_images = train_images / 255.0
test_images = test_images / 255.0

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(1024, 1024)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(4, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_images, labels, epochs=10)

所有与指南几乎相同的内容。但是我的时代精度大约是0.4

Epoch 10/10
...
2176/2300 [===========================>..] - ETA: 0s - loss: 9.5701 - acc: 0.4062
2208/2300 [===========================>..] - ETA: 0s - loss: 9.5628 - acc: 0.4067
2240/2300 [============================>.] - ETA: 0s - loss: 9.5485 - acc: 0.4076
2272/2300 [============================>.] - ETA: 0s - loss: 9.5417 - acc: 0.4080
2300/2300 [==============================] - 12s 5ms/step - loss: 9.5307 - acc: 0.4087

在指导中,有些预测也是零散的,但是当我尝试进行预测时,我的模型预测仅为0或1。它表示这是%100(x),但它是错误的。

predictions = model.predict(test_images)
print(predictions)
# 0 | 0 | 1 | 0
# 0 | 0 | 1 | 0
# 1 | 0 | 0 | 0

已更新

以下是256 * 256 2个分类的时代图像,每个分类100张图像:

32/200 [===>..........................] - ETA: 0s - loss: 8.5627 - acc: 0.4688
200/200 [==============================] - 0s 317us/step - loss: 8.0590 - acc: 0.5000
Epoch 10/10

我也将班级降低到2个,但我的预测仍然返回%100和错误的班级。


我不知道我在哪里做错了。如果您有任何建议/想法,我将不胜感激。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

40%的精度不好。它需要训练更多。您应该将图像重新缩放为128 or 256,以节省时间。在测试之前,也请尝试将时期计数增加到100左右,或将损失最小化到至少大约1。另一件事是阶级失衡。

因此,https://arxiv.org/abs/1708.07747链接Fashion MNIST包含每个类别的7000个图像,总共包含70000个图像。如果您的数据集可能存在类不平衡的情况,那么您应该研究其他指标和方法。