我正在一堆我自己的图像数据上运行卷积神经网络(this one),其形状(通道数,高度,宽度)=(3,30,30)。我有76960个培训样本,19240个测试样本,并且有39个课程。最后几段代码是:
# Train the model using Stochastic grad descent + momentum
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
cnn.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
batch_size = 128
nb_epoch = 50
cnn.fit(x_train, y_train,
batch_size = batch_size,
nb_epoch = nb_epoch,
validation_data=(x_test, y_test),
shuffle=True)
训练损失和准确性会随着时间的变化而变化,但是验证准确性仅从第一个到第二个时间变化(从0.3387到0.3357),然后一直保持在0.3357。
我试过改变批处理大小(32、128或256),learning rate(从1e-6到0.1,一路乘以10),并尝试使用或不使用data normalization(基本均值移位和除法)由sd)。这些都不起作用。
最佳答案
碰巧的是,准确率(33.5%)与属于优势类的示例所占的百分比相同(您说的是“大约34%”,几乎可以肯定是33.5%),这并非巧合。
问题在于您没有规范化图像数据。如果像素值介于1到255之间,则每次预测同一类时,模型将永远陷于困境。为了确认这种情况的发生,请使用model.predict(x_train)
并查看模型的预测结果。我敢打赌,它是完全统一的,并且始终是构成您数据34%的类。
要解决此问题,只需规范化数据-在开始训练模型之前,将x_train
除以255。
x_train = x_train/255.0
关于python - Keras卷积神经网络验证精度不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39160772/