【问题标题】:Keras convolutional neural network validation accuracy not changingKeras 卷积神经网络验证精度不变
【发布时间】:2017-01-02 19:12:25
【问题描述】:

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

训练损失和准确率随着 epoch 的变化而变化,但验证准确率只从第 1 个 epoch 变化到第 2 个 epoch(从 0.3387 到 0.3357),然后一直保持在 0.3357。

我尝试了不同的批量大小(32、128 或 256)learning rate(从 1e-6 到 0.1,沿途乘以 10)并尝试使用或不使用 data normalization(基本均值偏移) , 和除以 sd)。这些都没有奏效。

【问题讨论】:

  • 你测试其他分类器吗?如果是,根据不同的分类器,你得到的最佳准确率是多少?
  • 你的班级平衡如何?任何类的样本比其他类多?
  • 1.是的,我尝试过其他分类器。 2. 没有,有2个班级人数严重超标,分别占总人口的34%和35%左右。但是,请注意,我的问题并不是“如何让方法 X 准确分类我的数据”。我不确定给我的标签是否正确,因此分类失败仍然可能是反映现实的准确结果。我只是担心技术错误。
  • 您还在处理这个问题吗?你会在每一层上添加正则化器吗?

标签: python neural-network classification


【解决方案1】:

您遇到的准确率百分比 (33.5%) 与属于主导类别的示例百分比相同(您说“大约 34%” - 几乎可以肯定是 33.5%),这并非巧合.

问题在于您没有对图像数据进行规范化。如果您的像素值介于 1 到 255 之间,那么您的模型将永远卡在每次都预测相同的类别。要确认这种情况正在发生,请使用 model.predict(x_train) 并查看您的模型预测的内容。我敢打赌,它是完全一致的,而且它始终是构成你数据 34% 的类。

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

x_train = x_train/255.0

【讨论】:

  • 我遇到了同样的问题,但我已验证我的数据已标准化。知道还有什么可能是造成这种情况的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2017-11-17
  • 2017-01-01
  • 1970-01-01
相关资源
最近更新 更多