日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

使用paddlepaddle進(jìn)行手寫數(shù)字識(shí)別

作者:修煉之路 更新時(shí)間: 2022-02-13 編程語言

導(dǎo)讀

MNIST手寫數(shù)字?jǐn)?shù)據(jù)集作為深度學(xué)習(xí)入門的數(shù)據(jù)集是我們經(jīng)常都會(huì)使用到的,包含了0~9共10個(gè)數(shù)字類別的圖片,每張圖片的大小為28X28,一共包含了60000張訓(xùn)練集圖片和10000張測試集圖片。

使用PaddlePadlle進(jìn)行手寫數(shù)字識(shí)別

  • 導(dǎo)包
import paddle
from paddle.vision.transforms import Normalize
  • 加載MNIST數(shù)據(jù)集
#數(shù)據(jù)的歸一化處理
transform = Normalize(mean=[127.5],std=[127.5],data_format="CHW")

#加載MNIST的訓(xùn)練數(shù)據(jù)集
train_mnist_dataset = paddle.vision.datasets.MNIST(mode="train",transform=transform)
#加載MNIST的測試數(shù)據(jù)集
test_mnist_dataset = paddle.vision.datasets.MNIST(mode="test",transform=transform)
  • 展示手寫數(shù)字的圖片
import numpy as np
import matplotlib.pyplot as plt

#獲取MNIST數(shù)據(jù)的圖片和對應(yīng)的標(biāo)簽
mnist_image,mnist_label = train_mnist_dataset[0][0],train_mnist_dataset[0][1]
#調(diào)整MNIST圖片的大小
mnist_image = mnist_image.reshape((28,28))
plt.figure(figsize=(2,2))
plt.imshow(mnist_image,cmap=plt.cm.binary)

在這里插入圖片描述

  • 使用paddlepaddle定義神經(jīng)網(wǎng)絡(luò)模型

這里我們先使用一個(gè)比較簡單的3層感知機(jī)來構(gòu)建一個(gè)模型,第一層全連接層的輸出是256,第二層全連接層的輸出是128,第三層全連接層的輸出是10,正好對應(yīng)10個(gè)不同的數(shù)字類別

class PerceptronMNIST(paddle.nn.Layer):
    def __init__(self,in_features,classes_num):
        super(PerceptronMNIST,self).__init__()
        #將輸出數(shù)據(jù)的shape由(-1,1,28,28)變?yōu)?-1,784)
        self.flatten = paddle.nn.Flatten()
        #感知機(jī)的第一層全連接層
        self.fc1 = paddle.nn.Linear(in_features=in_features,out_features=256)
        #激活函數(shù)
        self.relu1 = paddle.nn.ReLU()
        #感知機(jī)的第二層全連接層
        self.fc2 = paddle.nn.Linear(in_features=256,out_features=128)
        #激活函數(shù)
        self.relu2 = paddle.nn.ReLU()
        #感知機(jī)的第三層全連接層
        self.fc3 = paddle.nn.Linear(in_features=128,out_features=classes_num)
    
    def forward(self,x):

        x = self.flatten(x)
        x = self.fc1(x)
        x = self.relu1(x)
        x = self.fc2(x)
        x = self.relu2(x)
        x = self.fc3(x)

        return x
  • 打印網(wǎng)絡(luò)模型的結(jié)構(gòu)
    #使用PaddlePaddle封裝模型
    model = paddle.Model(PerceptronMNIST(in_features=28*28,classes_num=10))
    #輸出網(wǎng)絡(luò)的結(jié)構(gòu)
    model.summary((-1,1,28,28))

在這里插入圖片描述

  • 定義優(yōu)化算法和Loss
#配置模型
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),#使用Adam優(yōu)化算法
              paddle.nn.CrossEntropyLoss(),#使用CrossEntropyLoss作為損失函數(shù)
              paddle.metric.Accuracy())#使用Accuracy計(jì)算精度
  • 訓(xùn)練模型
model.fit(train_mnist_dataset,#設(shè)置訓(xùn)練數(shù)據(jù)
          epochs=10,          #定義訓(xùn)練的epochs
          batch_size=128,     #設(shè)置batch_size
          verbose=1)          #設(shè)置日志的輸出格式

在這里插入圖片描述

  • 評(píng)估模型
model.evaluate(test_mnist_dataset,verbose=1)

在這里插入圖片描述

  • 模型預(yù)測
results = model.predict(test_mnist_dataset)
#獲取概率最大的label
pred_label = np.argsort(results)
print("圖片的預(yù)測標(biāo)簽為:{}".format(pred_label[0][0][-1][0]))

原文鏈接:https://blog.csdn.net/sinat_29957455/article/details/122849841

欄目分類
最近更新