【发布时间】:2022-01-23 04:24:00
【问题描述】:
我接到了一项任务,要学习如何创建一个可以对图像进行分类的模型。 在制作了一个之后,我得到了 100% 的准确率,所以我决定减少我的模型层,直到我做得更糟。我删除了输入数据、Conv2D 层、MaxPooling2D 层和 Dense Hidden 层的规范化。
我现在已经达到了我认为的基本原理,但我仍然得到 100% 的准确度,我严重怀疑这是否准确。对测试数据进行手动抽查似乎通过了,但我不知道为什么。
运行时我得到的唯一警告是2021-12-21 14:05:19.952543: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
我的模特
model = keras.Sequential()
model.add(keras.Input(shape=(IMG_WIDTH, IMG_HEIGHT, 3,)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(NUM_CATEGORIES, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
flatten (Flatten) (None, 2700) 0
dense (Dense) (None, 43) 116143
=================================================================
Total params: 116,143
Trainable params: 116,143
Non-trainable params: 0
_________________________________________________________________
None
model.fit(x_train, y_train, epochs=EPOCHS)
Epoch 1/10
500/500 [==============================] - 1s 2ms/step - loss: 32.7355 - accuracy: 0.8956
Epoch 2/10
500/500 [==============================] - 1s 2ms/step - loss: 3.2202e-07 - accuracy: 1.0000
Epoch 3/10
...
Epoch 9/10
500/500 [==============================] - 1s 2ms/step - loss: 2.1457e-08 - accuracy: 1.0000
Epoch 10/10
500/500 [==============================] - 1s 2ms/step - loss: 1.6482e-08 - accuracy: 1.0000
model.evaluate(x_test, y_test, verbose=2)
333/333 - 1s - loss: 1.3704e-08 - accuracy: 1.0000 - 510ms/epoch - 2ms/step
我手动查看了模型输入数据的随机样本、其输出和关联的标签,但我看不到我的标签编码到输入中,并且输出与我的标签匹配。
i = x_test[10:11]
r = model.predict(x_test[10:11])
l = y_test[10:11]
print(i)
print(np.argmax(r), np.argmax(l))
结果
[[[[101 111 157]
[101 111 157]
[116 122 157]
...
[ 82 104 88]
[ 56 85 81]
[ 55 79 86]]
[[101 111 157]
[101 111 157]
[116 122 157]
...
[101 131 160]
[ 99 128 156]
[ 89 122 149]]]]
12 12
【问题讨论】:
-
可能只是你的数据是线性可分的
-
@Galletti_Lance 该数据集是 43 种不同类型交通标志的图像(即:停车标志、限速...)这是否可以认为是线性可分的?
-
您的模型只是多类逻辑回归,因此它收敛的事实意味着它找到了一条完美分离数据的线。这可能是因为数据的性质,但也可能(很可能)是数据量
-
在这个极简主义级别上,您应该能够查看每个类的最强权重,此时它只是一个矩阵,并弄清楚发生了什么。如果您的数据得到充分体现,则可以保证存在错误,但我们很难在没有问题的情况下调试您的问题。
-
这是一个错误。构建数据集的方法是复制一个类别的第一张图像,而不是使用整个图像文件夹。 amshrbo 提供的答案让我检查了他的每一个点,当我到达他的第三点时,我注意到一个类别中的所有图像都是相同的。
标签: tensorflow keras