Keras CNN示例在Google Colab中准确率远低于标注值的问题
问题:Keras MNIST CNN示例运行准确率远低于基线值?
我尝试运行Keras官方的MNIST CNN示例学习Keras,但文档标注的基线准确率为99.25%,远高于我在T4 GPU的Google Colab中直接复制代码运行得到的85%(0.8503000140190125)。运行输出如下:
x_train shape: (60000, 28, 28, 1) 60000 train samples 10000 test samples Epoch 1/12 469/469 [==============================] - 8s 10ms/step - loss: 2.2807 - accuracy: 0.1435 - val_loss: 2.2415 - val_accuracy: 0.3414 Epoch 2/12 469/469 [==============================] - 4s 10ms/step - loss: 2.2157 - accuracy: 0.2814 - val_loss: 2.1615 - val_accuracy: 0.5900 Epoch 3/12 469/469 [==============================] - 4s 9ms/step - loss: 2.1305 - accuracy: 0.4081 - val_loss: 2.0526 - val_accuracy: 0.6552 Epoch 4/12 469/469 [==============================] - 4s 9ms/step - loss: 2.0150 - accuracy: 0.4893 - val_loss: 1.9049 - val_accuracy: 0.6928 Epoch 5/12 469/469 [==============================] - 5s 10ms/step - loss: 1.8653 - accuracy: 0.5421 - val_loss: 1.7169 - val_accuracy: 0.7290 Epoch 6/12 469/469 [==============================] - 4s 9ms/step - loss: 1.6864 - accuracy: 0.5822 - val_loss: 1.4985 - val_accuracy: 0.7573 Epoch 7/12 469/469 [==============================] - 5s 10ms/step - loss: 1.4975 - accuracy: 0.6175 - val_loss: 1.2778 - val_accuracy: 0.7841 Epoch 8/12 469/469 [==============================] - 4s 9ms/step - loss: 1.3218 - accuracy: 0.6478 - val_loss: 1.0859 - val_accuracy: 0.8070 Epoch 9/12 469/469 [==============================] - 5s 10ms/step - loss: 1.1783 - accuracy: 0.6739 - val_lloss: 0.9350 - val_accuracy: 0.8256 Epoch 10/12 469/469 [==============================] - 4s 10ms/step - loss: 1.0702 - accuracy: 0.6944 - val_loss: 0.8224 - val_accuracy: 0.8354 Epoch 11/12 469/469 [==============================] - 4s 9ms/step - loss: 0.9836 - accuracy: 0.7120 - val_loss: 0.7383 - val_accuracy: 0.8433 Epoch 12/12 469/469 [==============================] - 4s 9ms/step - loss: 0.9166 - accuracy: 0.7276 - val_loss: 0.6741 - val_accuracy: 0.8503 Test loss: 0.6741476655006409 Test accuracy: 0.8503000140190125oss: 0.9350 - val_accuracy: 0.8256
可见Colab中每个epoch耗时远低于文档说明,我想知道是否遗漏了关键设置,文档中提及的“仍有大量参数调优空间”是否意味着需自行调参才能达到99.25%的准确率?
回答
你的训练结果明显异常,核心问题大概率是数据未做归一化处理。MNIST数据集的像素值范围是0-255,直接输入模型会导致梯度不稳定、收敛缓慢,这和你看到的loss居高不下、accuracy提升缓慢完全吻合。
官方示例代码里必然包含了这一步关键预处理:
x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255
如果复制代码时遗漏了这部分,就会出现你遇到的低准确率问题。
关于基线准确率:文档标注的99.25%是该模型结构能达到的基准水平,默认代码无需额外调参就能接近这个数值(通常能到98%以上)。文档里说的“仍有大量参数调优空间”,是指在默认基础上,你还可以通过调整学习率、增加训练轮数、加入数据增强等手段进一步提升准确率,而非要求你必须调参才能达到基线。
另外,你提到的epoch耗时低于文档说明,这是因为T4 GPU的性能远优于文档编写时的硬件,属于正常情况,和准确率问题无关。
内容的提问来源于stack exchange,提问作者Joeytje50
相关产品推荐
相关产品推荐

