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



这是我用来对图片类别进行分类的算法——跑鞋、铅笔和书。然而,在3000张混洗的图像上运行算法后(这就是我所拥有的(,我注意到:

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

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

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

  3. 由于它总是1,所以它总是为我的每一张图像预测同一类,在我的情况下,是书。

  4. 我做了一个测试,就像另一篇帖子建议的那样,用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'])

相关内容

  • 没有找到相关文章

最新更新