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

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和错误的班级。



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

最佳答案

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

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

08-24 23:23