And*_*Ito 1 python classification neural-network
我在一堆我自己的图像数据上运行卷积神经网络(这个),形状(通道数,高度,宽度)=(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 个到第 2 个 epoch(从 0.3387 到 0.3357)发生变化,然后一直保持在 0.3357。
我尝试过不同的批量大小(32、128 或 256)、学习率(从 1e-6 到 0.1,一路乘以 10)并尝试使用或不使用数据标准化(基本均值偏移和除以 sd )。这些都没有奏效。
您陷入困境的百分比准确率(33.5%)与属于优势类别的示例百分比相同(您说“大约 34%” - 几乎可以肯定是 33.5%),这并非巧合。
问题是你没有规范化你的图像数据。如果您的像素值介于 1 到 255 之间,您的模型将永远无法预测每次都相同的类别。要确认这种情况正在发生,请使用model.predict(x_train)并查看您的模型预测的内容。我敢打赌,它是完全一致的,而且它始终是占数据 34% 的类。
要解决此问题,只需将数据标准化 -x_train在开始训练模型之前除以255。
x_train = x_train/255.0