国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實戰(zhàn):基于卷積的MNIST手寫體分類

這篇具有很好參考價值的文章主要介紹了實戰(zhàn):基于卷積的MNIST手寫體分類。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前面實現(xiàn)了基于多層感知機的MNIST手寫體識別,本章將實現(xiàn)以卷積神經(jīng)網(wǎng)絡(luò)完成的MNIST手寫體識別。

1.? 數(shù)據(jù)的準備

在本例中,依舊使用MNIST數(shù)據(jù)集,對這個數(shù)據(jù)集的數(shù)據(jù)和標簽介紹,前面的章節(jié)已詳細說明過了,相對于前面章節(jié)直接對數(shù)據(jù)進行“折疊”處理,這里需要顯式地標注出數(shù)據(jù)的通道,代碼如下:

import numpy as np

import einops.layers.torch as elt

#載入數(shù)據(jù)

x_train = np.load("../dataset/mnist/x_train.npy")

y_train_label = np.load("../dataset/mnist/y_train_label.npy")

x_train = np.expand_dims(x_train,axis=1)?? #在指定維度上進行擴充

print(x_train.shape)

這里是對數(shù)據(jù)的修正,np.expand_dims的作用是在指定維度上進行擴充,這里在第二維(也就是PyTorch的通道維度)進行擴充,結(jié)果如下:

(60000, 1, 28, 28)

2.? 模型的設(shè)計

下面使用PyTorch 2.0框架對模型進行設(shè)計,在本例中將使用卷積層對數(shù)據(jù)進行處理,完整的模型如下:

import torch
import torch.nn as nn
import numpy as np
import einops.layers.torch as elt
class MnistNetword(nn.Module):
    def __init__(self):
        super(MnistNetword, self).__init__()
        #前置的特征提取模塊
        self.convs_stack = nn.Sequential(
            nn.Conv2d(1,12,kernel_size=7),  	#第一個卷積層
            nn.ReLU(),
            nn.Conv2d(12,24,kernel_size=5), 	#第二個卷積層
            nn.ReLU(),
            nn.Conv2d(24,6,kernel_size=3)  	#第三個卷積層
        )
        #最終分類器層
        self.logits_layer = nn.Linear(in_features=1536,out_features=10)
    def forward(self,inputs):
        image = inputs
        x = self.convs_stack(image)        
        #elt.Rearrange的作用是對輸入數(shù)據(jù)的維度進行調(diào)整,讀者可以使用torch.nn.Flatten函數(shù)完成此工作
        x = elt.Rearrange("b c h w -> b (c h w)")(x)
        logits = self.logits_layer(x)
        return logits
model = MnistNetword()
torch.save(model,"model.pth")

這里首先設(shè)定了3個卷積層作為前置的特征提取層,最后一個全連接層作為分類器層,需要注意的是,對于分類器的全連接層,輸入維度需要手動計算,當然讀者可以一步一步嘗試打印特征提取層的結(jié)果,依次將結(jié)果作為下一層的輸入維度。最后對模型進行保存。

3.? 基于卷積的MNIST分類模型

下面進入本章的最后示例部分,也就是MNIST手寫體的分類。完整的訓練代碼如下:

import torch
import torch.nn as nn
import numpy as np
import einops.layers.torch as elt
#載入數(shù)據(jù)
x_train = np.load("../dataset/mnist/x_train.npy")
y_train_label = np.load("../dataset/mnist/y_train_label.npy")
x_train = np.expand_dims(x_train,axis=1)
print(x_train.shape)
class MnistNetword(nn.Module):
    def __init__(self):
        super(MnistNetword, self).__init__()
        self.convs_stack = nn.Sequential(
            nn.Conv2d(1,12,kernel_size=7),
            nn.ReLU(),
            nn.Conv2d(12,24,kernel_size=5),
            nn.ReLU(),
            nn.Conv2d(24,6,kernel_size=3)
        )
        self.logits_layer = nn.Linear(in_features=1536,out_features=10)
    def forward(self,inputs):
        image = inputs
        x = self.convs_stack(image)
        x = elt.Rearrange("b c h w -> b (c h w)")(x)
        logits = self.logits_layer(x)
        return logits
device = "cuda" if torch.cuda.is_available() else "cpu"
#注意記得將model發(fā)送到GPU計算
model = MnistNetword().to(device)
model = torch.compile(model)
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
batch_size = 128
for epoch in range(42):
    train_num = len(x_train)//128
    train_loss = 0.
    for i in range(train_num):
        start = i * batch_size
        end = (i + 1) * batch_size
        x_batch = torch.tensor(x_train[start:end]).to(device)
        y_batch = torch.tensor(y_train_label[start:end]).to(device)
        pred = model(x_batch)
        loss = loss_fn(pred, y_batch)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        train_loss += loss.item()  # 記錄每個批次的損失值
    # 計算并打印損失值
    train_loss /= train_num
    accuracy = (pred.argmax(1) == y_batch).type(torch.float32).sum().item() / batch_size
    print("epoch:",epoch,"train_loss:", round(train_loss,2),"accuracy:",round(accuracy,2))

在這里,我們使用了本章新定義的卷積神經(jīng)網(wǎng)絡(luò)模塊作為局部特征抽取,而對于其他的損失函數(shù)以及優(yōu)化函數(shù),只使用了與前期一樣的模式進行模型訓練。最終結(jié)果如下所示,請讀者自行驗證。

(60000, 1, 28, 28)
epoch: 0 train_loss: 2.3 accuracy: 0.11
epoch: 1 train_loss: 2.3 accuracy: 0.13
epoch: 2 train_loss: 2.3 accuracy: 0.2
epoch: 3 train_loss: 2.3 accuracy: 0.18
…
epoch: 58 train_loss: 0.5 accuracy: 0.98
epoch: 59 train_loss: 0.49 accuracy: 0.98
epoch: 60 train_loss: 0.49 accuracy: 0.98
epoch: 61 train_loss: 0.48 accuracy: 0.98
epoch: 62 train_loss: 0.48 accuracy: 0.98

Process finished with exit code 0

本文節(jié)選自《PyTorch 2.0深度學習從零開始學》,本書實戰(zhàn)案例豐富,可帶領(lǐng)讀者快速掌握深度學習算法及其常見案例。

???實戰(zhàn):基于卷積的MNIST手寫體分類,分類,數(shù)據(jù)挖掘,人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-683502.html

到了這里,關(guān)于實戰(zhàn):基于卷積的MNIST手寫體分類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 6.6 實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)LeNet訓練并預測手寫體數(shù)字

    6.6 實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)LeNet訓練并預測手寫體數(shù)字

    isinstance(net,nn.Module)是Python的內(nèi)置函數(shù),用于判斷一個對象是否屬于制定類或其子類的實例。如果net是nn.Module類或子類的實例,那么表達式返回True,否則返回False. nn.Module是pytorch中用于構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的基類,其他神經(jīng)網(wǎng)絡(luò)都會繼承它,因此使用 isinstance(net,nn.Module),可以確

    2024年02月14日
    瀏覽(25)
  • 【深度學習】基于華為MindSpore的手寫體圖像識別實驗

    【深度學習】基于華為MindSpore的手寫體圖像識別實驗

    1 實驗介紹 1.1 簡介 Mnist手寫體圖像識別實驗是深度學習入門經(jīng)典實驗。Mnist數(shù)據(jù)集包含60,000個用于訓練的示例和10,000個用于測試的示例。這些數(shù)字已經(jīng)過尺寸標準化并位于圖像中心,圖像是固定大小(28x28像素),其值為0到255。為簡單起見,每個圖像都被平展并轉(zhuǎn)換為784(28*28)個

    2023年04月08日
    瀏覽(29)
  • 深度學習(六):paddleOCR理解及識別手寫體,手寫公式,表格

    深度學習(六):paddleOCR理解及識別手寫體,手寫公式,表格

    光學字符識別(Optical Character Recognition, OCR),ORC是指對包含文本資料的圖像文件進行分析識別處理,獲取文字及版面信息的技術(shù),檢測圖像中的文本資料,并且識別出文本的內(nèi)容。 那么有哪些應用場景呢? 其實我們?nèi)粘I钪刑幪幎加衞cr的影子,比如在疫情期間身份證識別

    2024年02月05日
    瀏覽(39)
  • TenorFlow多層感知機識別手寫體

    GITHUB地址https://github.com/fz861062923/TensorFlow 注意下載數(shù)據(jù)連接的是外網(wǎng),有一股神秘力量讓你403 建立輸入層 x 建立隱藏層h1 建立隱藏層h2 建立輸出層 建立訓練數(shù)據(jù)label真實值 placeholder 定義loss function 選擇optimizer 計算每一項數(shù)據(jù)是否正確預測 將計算預測正確結(jié)果,加總平均 畫出

    2024年02月20日
    瀏覽(20)
  • 第五章 神經(jīng)網(wǎng)絡(luò)與手寫體識別

    第五章 神經(jīng)網(wǎng)絡(luò)與手寫體識別

    神經(jīng)網(wǎng)絡(luò)中最基本的成分是神經(jīng)元。每個神經(jīng)元與其他神經(jīng)元相連,當它“興奮”時,就會向相連的神經(jīng)元發(fā)送化學物質(zhì),從而改變這些神經(jīng)元內(nèi)的電位;如果某神經(jīng)元的電位超過了一個“閾值”(threshold),那么它就會被激活,即“興奮”起來,向其他神經(jīng)元發(fā)送化學物質(zhì). MP神經(jīng)元

    2024年02月13日
    瀏覽(25)
  • 【MATLAB圖像處理實用案例詳解(16)】——利用概念神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫體數(shù)字識別

    【MATLAB圖像處理實用案例詳解(16)】——利用概念神經(jīng)網(wǎng)絡(luò)實現(xiàn)手寫體數(shù)字識別

    手寫體數(shù)字屬于光學字符識別(Optical Character Recognition,OCR)的范疇,但分類的分別比光學字符識別少得多,主要只需識別共10個字符。 使用概率神經(jīng)網(wǎng)絡(luò)作為分類器,對64*64二值圖像表示的手寫數(shù)字進行分類,所得的分類器對訓練樣本能夠取得100%的正確率,訓練時間短,比

    2024年02月06日
    瀏覽(21)
  • 卷積神經(jīng)網(wǎng)絡(luò)CNN原理+代碼(pytorch實現(xiàn)MNIST集手寫數(shù)字分類任務(wù))

    卷積神經(jīng)網(wǎng)絡(luò)CNN原理+代碼(pytorch實現(xiàn)MNIST集手寫數(shù)字分類任務(wù))

    前言 若將圖像數(shù)據(jù)輸入全連接層,可能會導致喪失一些位置信息 卷積神經(jīng)網(wǎng)絡(luò)將圖像按照原有的空間結(jié)構(gòu)保存,不會喪失位置信息。 卷積運算: 1.以單通道為例: 將將input中選中的部分與kernel進行數(shù)乘 : 以上圖為例對應元素相乘結(jié)果為211,并將結(jié)果填入output矩陣的左上角

    2024年02月04日
    瀏覽(24)
  • 三、MNIST手寫數(shù)字分類任務(wù)項目實戰(zhàn)

    三、MNIST手寫數(shù)字分類任務(wù)項目實戰(zhàn)

    分類任務(wù)和回歸任務(wù)本質(zhì)上并沒有太大的區(qū)別,只是最終得到的結(jié)果和損失函數(shù)不同而已。 MNIST手寫數(shù)字分類任務(wù),最終得到的是10個值,也類似一個one-hot編碼格式,表示該圖片是0-9數(shù)字的概率,概率值最大的就是預測的最終結(jié)果 當然標簽也得是one-hot編碼格式,例如標簽圖

    2024年02月09日
    瀏覽(26)
  • 機器學習實戰(zhàn) | MNIST手寫數(shù)字分類項目(深度學習初級)

    機器學習實戰(zhàn) | MNIST手寫數(shù)字分類項目(深度學習初級)

    準備寫個系列博客介紹機器學習實戰(zhàn)中的部分公開項目。首先從初級項目開始。 本文為初級項目第二篇:利用MNIST數(shù)據(jù)集訓練手寫數(shù)字分類。 項目原網(wǎng)址為:Deep Learning Project – Handwritten Digit Recognition using Python。 第一篇為:機器學習實戰(zhàn) | emojify 使用Python創(chuàng)建自己的表情符號

    2024年02月15日
    瀏覽(28)
  • 在樹莓派上實現(xiàn)numpy的conv2d卷積神經(jīng)網(wǎng)絡(luò)做圖像分類,加載pytorch的模型參數(shù),推理mnist手寫數(shù)字識別,并使用多進程加速

    在樹莓派上實現(xiàn)numpy的conv2d卷積神經(jīng)網(wǎng)絡(luò)做圖像分類,加載pytorch的模型參數(shù),推理mnist手寫數(shù)字識別,并使用多進程加速

    這幾天又在玩樹莓派,先是搞了個物聯(lián)網(wǎng),又在嘗試在樹莓派上搞一些簡單的神經(jīng)網(wǎng)絡(luò),這次搞得是卷積識別mnist手寫數(shù)字識別 訓練代碼在電腦上,cpu就能訓練,很快的: 然后需要自己在dataset里導出一些圖片:我保存在了mnist_pi文件夾下,“_”后面的是標簽,主要是在pc端導

    2024年02月07日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包