我正在按照本指南学习神经网络的图像分类:
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和错误的班级。
我不知道我在哪里做错了。如果您有任何建议/想法,我将不胜感激。预先谢谢你。
答案 0 :(得分:0)
40%的精度不好。它需要训练更多。您应该将图像重新缩放为128 or 256
,以节省时间。在测试之前,也请尝试将时期计数增加到100左右,或将损失最小化到至少大约1。另一件事是阶级失衡。
因此,https://arxiv.org/abs/1708.07747链接Fashion MNIST
包含每个类别的7000
个图像,总共包含70000
个图像。如果您的数据集可能存在类不平衡的情况,那么您应该研究其他指标和方法。