这是我用来对图片类别进行分类的算法——跑鞋、铅笔和书。然而,在3000张混洗的图像上运行算法后(这就是我所拥有的(,我注意到:
-
每个时期的val_accurcy都是相同的,等于0.3400
-
当我打印我自己拍摄的6张图像的预测结果时,当它应该返回一个数值时,结果数组如下:
[[1.][1.][1.][1.][1.][1.]]
-
由于它总是1,所以它总是为我的每一张图像预测同一类,在我的情况下,是书。
-
我做了一个测试,就像另一篇帖子建议的那样,用1000个跑鞋和铅笔样本以及1本书样本进行训练。结果仍然是书本,永远。
算法:
model = Sequential()
model.add(Conv2D(64,(3,3), input_shape = X_train.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,3,3))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation('softmax'))
model.compile(loss="binary_crossentropy",
optimizer="adam",
metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=24, epochs=3, validation_split=0.1)
predictions = model.predict(X_test)
输出(2692个样本,因为有些是错误(
Train on 2692 samples, validate on 300 samples
Epoch 1/3
2692/2692 [==============================] - 17s 6ms/sample - loss: -0.0171 - accuracy: 0.3354 - val_loss: -0.5111 - val_accuracy: 0.3400
Epoch 2/3
2692/2692 [==============================] - 20s 8ms/sample - loss: -0.0171 - accuracy: 0.3354 - val_loss: -0.5111 - val_accuracy: 0.3400
Epoch 3/3
2692/2692 [==============================] - 21s 8ms/sample - loss: -0.0171 - accuracy: 0.3354 - val_loss: -0.5111 - val_accuracy: 0.3400
当我运行打印(预测(时,结果是:[[1.][1.][1.][1.][1.][1.]]
谢谢!
由于您试图将数据分类为3类,因此模型的顶层应该是
model.add(Dense(3))
model.add(Activation('softmax'))
您不会显示如何生成X-train和y_train的代码。如果y_train是一个热编码的,那么你为模型编码。堆应该是
model.compile(loss="categorical_crossentropy", optimizer="adam",
metrics=['accuracy'])
如果y_train是整数,那么模型.compile应该是
model.compile(loss="sparse_categorial_crossentropy", optimizer="adam",
metrics=['accuracy'])