mnist手写数字数据集是经常被用来初学者使用的图片数据集,其图片大小为28*28,一般的图片都是(H,W,3),由于mnist数据集图片都是数字,所以可以不需要RGB,其数据集图片如下:
对于该数据集标签为数字所代表的值,如上图片为5,其对应的数字也是5,所以这是一个十分类的任务。
整个mnist有60000张训练集,10000张测试集,相较于类别数来说样本量相当充足。
2.模型构建与训练第一步,在头部引入必要所需的环境包,代码如下:
import paddle from paddle.vision.transforms import Normalize
第二步,获取mnist数据集,paddle直接就提供了,不过由于我们需要模型适配对应的格式,所以对mnist的数据集进行format的处理,代码如下:
transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW') train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform) test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
第三步,生成需要的网络,在这里我们使用paddle自带的lenet。
lenet = paddle.vision.models.LeNet(10) model = paddle.Model(lenet)
第四步,配置模型使用的优化器,损失函数等等。
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
第五步,配置模型训练的epoch,batch_size等等。
model.fit(train_dataset, epochs=5, batch_size=64, verbose=1)
第六步,配置评估集,输出评估集结果。
model.evaluate(test_dataset, batch_size=64, verbose=1)
接下来,开始训练。
Epoch 1/5 step 938/938 [==============================] - loss: 0.0299 - acc: 0.9390 - 13ms/step Epoch 2/5 step 938/938 [==============================] - loss: 0.0344 - acc: 0.9770 - 14ms/step Epoch 3/5 step 938/938 [==============================] - loss: 0.1302 - acc: 0.9819 - 14ms/step Epoch 4/5 step 938/938 [==============================] - loss: 0.0023 - acc: 0.9833 - 14ms/step Epoch 5/5 step 938/938 [==============================] - loss: 0.0321 - acc: 0.9861 - 14ms/step Eval begin... step 157/157 [==============================] - loss: 0.0013 - acc: 0.9855 - 5ms/step Eval samples: 10000
如上图,可以看到准确率随着epoch和step的增多在增加,loss逐渐减小,模型收敛,并在最终的评测集达到了98.55%的准确率。
整体来说,paddle可以用很小的成本训练模型任务,做到简单可依赖。



