Keras 顺序预测总是返回相同的结果
Keras Sequential prediction always returning the same result
这是我用来 class 化图片 class 的算法 - 运行宁鞋子、铅笔和书。然而,在 运行 对 3000 shuffled 图像(这就是我所拥有的)进行算法处理后,我注意到:
val_accuracy 每个时期都是相同的,等于 0.3400
当我打印自己拍摄的6张图像的预测结果时,结果数组应该是return一个数值:
[[1.][1.][1.][1.][1.][1.]]
因为它总是 1,所以它总是会预测相同的 class 我的每一张图片,在我的例子中,书。
我按照另一个 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'])
这是我用来 class 化图片 class 的算法 - 运行宁鞋子、铅笔和书。然而,在 运行 对 3000 shuffled 图像(这就是我所拥有的)进行算法处理后,我注意到:
val_accuracy 每个时期都是相同的,等于 0.3400
当我打印自己拍摄的6张图像的预测结果时,结果数组应该是return一个数值:
[[1.][1.][1.][1.][1.][1.]]
因为它总是 1,所以它总是会预测相同的 class 我的每一张图片,在我的例子中,书。
我按照另一个 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'])