AI Studio : 利用Paddle框架中的极简框架识别MNIST

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AI Studio : 利用Paddle框架中的极简框架识别MNIST相关的知识,希望对你有一定的参考价值。

简 介: ※通过测试网络上的这个极简的Paddle识别MNIST程序,也就是使用了一个非常简单的线性回归网络,初步熟悉了Paddle下的网络架构方式。对于如果从numpy到Paddle的tensor转换程序中也给出了示例。

关键词 AI StudioPaddleMNIST

建立工程
文章目录
调入数据库
常见学术数据集合
极简工程
建立模型
训练模型
训练结果
测试模型
网络上参考程序
识别总结
数据转换
从numpy到tensor
从tensor到numpy

 

§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 Studio中的视觉数据集合

Paddle中的数据集合定义与加载

国产AI框架亮剑!百度Paddle Lite正式发布,首个支持华为NPU在线编译!

AI studio NoteBook

基于Paddle Serving&百度智能边缘BIE的边缘AI解决方案

寒武纪与百度飞桨Paddle Lite完成适配 加速AI多场景落地