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

kyvafyod  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(280)

这是一个算法,我用来分类一个图片类-跑步鞋,铅笔和书。然而,在3000张乱序图像上运行算法后(这就是我的全部),我注意到:
每一个时代的val_精度相同,等于0.3400
当我打印我自己拍摄的6幅图像的预测结果时,当它应该返回一个数值时,结果数组如下所示: [[1.][1.][1.][1.][1.][1.]] 因为它总是1,所以它总是会对我的每一张图片,比如我的书,预测相同的类。
我像另一篇帖子建议的那样进行了一次测试,用1000个跑鞋和铅笔样本和一本书样本进行训练。结果仍然是书,永远。
算法:

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.]] 非常感谢。

xsuvu9jc

xsuvu9jc1#

由于您试图将数据分为3类,因此模型的顶层应该是

model.add(Dense(3))
model.add(Activation('softmax'))

您不显示如何生成x-train和y_-train的代码。若y_序列是一个热编码序列,那个么model.compile的代码应该是

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

如果y_序列是整数,则model.compile应为

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

相关问题