Keras 顺序预测总是返回相同的结果

Keras Sequential prediction always returning the same result

这是我用来 class 化图片 class 的算法 - 运行宁鞋子、铅笔和书。然而,在 运行 对 3000 shuffled 图像(这就是我所拥有的)进行算法处理后,我注意到:

  1. val_accuracy 每个时期都是相同的,等于 0.3400

  2. 当我打印自己拍摄的6张图像的预测结果时,结果数组应该是return一个数值:

    [[1.][1.][1.][1.][1.][1.]]

  3. 因为它总是 1,所以它总是会预测相同的 class 我的每一张图片,在我的例子中,书。

  4. 我按照另一个 post 的建议进行了测试,用 运行ning 鞋和铅笔各 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 的编码应该是

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

如果 y_train 是整数,则 model.compile 应该是

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