Keras卷积神经网络验证准确性不变

时间:2016-08-26 07:32:07

标签: python neural-network classification

我在一堆我自己的图像数据上运行卷积神经网络(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)

训练损失和准确度在时期内发生变化,但验证准确度仅从第1纪元到第2纪元(从0.3387到0.3357)发生变化,然后一直保持在0.3357。

我尝试过改变批量大小(32,128或256),learning rate(从1e-6到0.1,沿途乘以10)并尝试使用或不使用data normalization(基本的均值转移,并由sd划分)。这些都没有奏效。

1 个答案:

答案 0 :(得分:2)

你所坚持的准确率(33.5%)与落入统治阶级的例子百分比相同并非巧合(你说过#34;约34%&#34 ; - 它几乎肯定是33.5%)。

问题是您没有规范化您的图像数据。如果您的像素值在1到255之间,那么您的模型将永远陷入困境,每次都会预测同一个类。要确认这种情况正在发生,请使用model.predict(x_train)并查看您的模型预测的内容。我打赌它完全统一,而且它总是占据34%数据的类。

要解决此问题,只需规范化您的数据 - 在开始训练模型之前将x_train除以255。

x_train = x_train/255.0