AI Studio : 利用Paddle框架中的极简框架识别MNIST
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AI Studio : 利用Paddle框架中的极简框架识别MNIST相关的知识,希望对你有一定的参考价值。
简 介: ※通过测试网络上的这个极简的Paddle识别MNIST程序,也就是使用了一个非常简单的线性回归网络,初步熟悉了Paddle下的网络架构方式。对于如果从numpy到Paddle的tensor转换程序中也给出了示例。
关键词
: AI Studio,Paddle,MNIST
§01 建立工程
在AI Studio中建立基于NoteBook工程环境,选择其中的MNIST数据库。
在 在哪里能找到最后的版本的示例程序? AI Studio-MNIST 对于基于AI Studio中Paddle框架对于MNIST数据库进行实验。首先试验了其中的极简测试方法。但在其中过程中还是遇到了一些问题。
后来经过询问,可以知道现在书上的代码由于书籍出版比较慢,因此跟班上AI Studio代码的升级。建议还是通过观察 AI Studio 手写数字识别案例 ,根据其中的的代码进行测试。
▲ 图1.1 百度AI Studio 手写数字识别案例(上):讲师:淘淘
一、调入数据库
import matplotlib.pyplot as plt
from numpy import *
import math,time
import paddle
from paddle.nn import Linear
import paddle.nn.functional as F
import os
train_dataset = paddle.vision.datasets.MNIST(mode='train')
import paddle
from paddle.nn import Linear
import paddle.nn.functional as F
import os
train_dataset = paddle.vision.datasets.MNIST(mode='train')
train_data0 = array(train_dataset[0][0])
train_label0 = array(train_dataset[0][1])
plt.figure('Image')
plt.figure(figsize=(5,5))
plt.imshow(train_data0, cmap=plt.cm.binary)
plt.axis('on')
plt.title('MNIST image')
plt.show()
print('Image shape: '.format(train_data0.shape))
print('Image label shape: and data: '.format(train_label0.shape, train_label0))
▲ 图1.1.1 显示数据库图片
▲ 图1.1.2 显示MNIST中的数字
2、常见学术数据集合
在paddle.vision.datasets存在一些常见到的学术数据集合。
(1)paddle.vision 中的数据集合
dir(paddle.vision.datasets)
['Cifar10',
'Cifar100',
'DatasetFolder',
'FashionMNIST',
'Flowers',
'ImageFolder',
'MNIST',
'VOC2012',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'cifar',
'flowers',
'folder',
'mnist',
'voc2012']
(2)paddle.text 数据集合
dir(paddle.text.datasets)
['Conll05st',
'Imdb',
'Imikolov',
'Movielens',
'UCIHousing',
'WMT14',
'WMT16',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'conll05',
'imdb',
'imikolov',
'movielens',
'uci_housing',
'wmt14',
'wmt16']
二、极简工程
1、建立模型
class MNIST(paddle.nn.Layer):
def __init__(self, ):
super(MNIST, self).__init__()
self.fc = paddle.nn.Linear(in_features=784, out_features=1)
def forward(self, inputs):
outputs = self.fc(inputs)
return outputs
def norm_img(img):
assert len(img.shape) == 3
batch_size, img_h, img_w = img.shape[0], img.shape[1], img.shape[2]
img = img/255
img = paddle.reshape(img, [batch_size, img_h*img_w])
return img
import paddle
paddle.vision.set_image_backend('cv2')
def train(model):
model.train()
train_loader = paddle.io.DataLoader(paddle.vision.datasets.MNIST(mode='train'),
batch_size=16,
shuffle=True)
opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())
EPOCH_NUM = 10
for epoch in range(EPOCH_NUM):
for batch_id, data in enumerate(train_loader()):
images = norm_img(data[0]).astype('float32')
labels = data[1].astype('float32')
predicts = model(images)
loss = F.square_error_cost(predicts, labels)
avg_loss = paddle.mean(loss)
if batch_id%1000 == 0:
print('epoch_id: , batch_id: , loss is: '.format(epoch, batch_id, avg_loss.numpy()))
avg_loss.backward()
opt.step()
opt.clear_grad()
2、训练模型
model = MNIST()
train(model)
paddle.save(model.state_dict(), './mnist.pdparms')
3、训练结果
epoch_id: 0, batch_id: 0, loss is: [19.446383]
epoch_id: 0, batch_id: 1000, loss is: [4.280066]
epoch_id: 0, batch_id: 2000, loss is: [4.089441]
epoch_id: 0, batch_id: 3000, loss is: [2.5934415]
epoch_id: 1, batch_id: 0, loss is: [5.005641]
epoch_id: 1, batch_id: 1000, loss is: [2.2887247]
epoch_id: 1, batch_id: 2000, loss is: [2.5260096]
epoch_id: 1, batch_id: 3000, loss is: [4.377707]
epoch_id: 2, batch_id: 0, loss is: [3.2349763]
epoch_id: 2, batch_id: 1000, loss is: [2.8085265]
epoch_id: 2, batch_id: 2000, loss is: [2.2175798]
epoch_id: 2, batch_id: 3000, loss is: [5.4343185]
epoch_id: 3, batch_id: 0, loss is: [3.1255033]
epoch_id: 3, batch_id: 1000, loss is: [2.1449356]
epoch_id: 3, batch_id: 2000, loss is: [7.3950243]
epoch_id: 3, batch_id: 3000, loss is: [5.631453]
epoch_id: 4, batch_id: 0, loss is: [2.1221619]
epoch_id: 4, batch_id: 1000, loss is: [3.1189494]
epoch_id: 4, batch_id: 2000, loss is: [3.672319]
epoch_id: 4, batch_id: 3000, loss is: [<以上是关于AI Studio : 利用Paddle框架中的极简框架识别MNIST的主要内容,如果未能解决你的问题,请参考以下文章
国产AI框架亮剑!百度Paddle Lite正式发布,首个支持华为NPU在线编译!