0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)MNIST數(shù)據(jù)集分類

jf_78858299 ? 來源:算法與編程之美 ? 作者:編程之美 ? 2023-03-02 09:38 ? 次閱讀

問題

對比單個全連接網(wǎng)絡(luò),在卷積神經(jīng)網(wǎng)絡(luò)層的加持下,初始時,整個神經(jīng)網(wǎng)絡(luò)模型的性能是否會更好。

方法

模型設(shè)計

兩層卷積神經(jīng)網(wǎng)絡(luò)(包含池化層),一層全連接網(wǎng)絡(luò)。

  1. 選擇 5 x 5 的卷積核,輸入通道為 1,輸出通道為 10:

    此時圖像矩陣經(jīng)過 5 x 5 的卷積核后會小兩圈,也就是4個數(shù)位,變成 24 x 24,輸出通道為10;

  2. 選擇 2 x 2 的最大池化層:

    此時圖像大小縮短一半,變成 12 x 12,通道數(shù)不變;

  3. 再次經(jīng)過5 x 5的卷積核,輸入通道為 10,輸出通道為 20:

    此時圖像再小兩圈,變成 8*8,輸出通道為20;

  4. 再次經(jīng)過2 x 2的最大池化層:

    此時圖像大小縮短一半,變成 4 x 4,通道數(shù)不變;

  5. 最后將圖像整型變換成向量,輸入到全連接層中:

    輸入一共有 4 x 4 x 20 = 320個元素,輸出為 10.

代碼

準備數(shù)據(jù)集

準備數(shù)據(jù)集

batch_size = 64

transform = transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.1307,), (0.3081,))

])

train_dataset = datasets.MNIST(root='data’,

train=True,

                          download=True,

                          transform=transform)

train_loader = DataLoader(train_dataset,

shuffle=True,

                     batch_size=batch_size)

test_dataset = datasets.MNIST(root='data',

train=False,

                         download=True,

                         transform=transform)

test_loader = DataLoader(test_dataset,

shuffle=False,

                    batch_size=batch_size)

建立模型

class Net(torch.nn.Module):

def init (self):

super(Net, self).__init__()

   self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5)

   self.conv2 = torch.nn.Conv2d(10, 20, kernel_size=5)

   self.pooling = torch.nn.MaxPool2d(2)

   self.fc = torch.nn.Linear(320, 10)

def forward(self, x):

batch_size = x.size(0)

   x = F.relu(self.pooling(self.conv1(x)))

   x = F.relu(self.pooling(self.conv2(x)))

   x = x.view(batch_size, -1)

   x = self.fc(x)

   return x

model = Net()

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

model.to(device)

構(gòu)造損失函數(shù)+優(yōu)化器

criterion = torch.nn.CrossEntropyLoss()

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

訓練+測試

def train(epoch):

running_loss = 0.0

for batch_idx, data in enumerate(train_loader, 0):

inputs, target = data

   inputs,target=inputs.to(device),target.to(device)

   optimizer.zero_grad()

   outputs = model(inputs)

   loss = criterion(outputs, target)

   loss.backward()

   optimizer.step()

   running_loss += loss.item()

   if batch_idx % 300 == 299:

       print('[%d,%.5d] loss:%.3f' % (epoch + 1, batch_idx + 1, running_loss / 2000))

       running_loss = 0.0

def test():

correct=0

total=0

with torch.no_grad():

for data in test_loader:

       inputs,target=data

       inputs,target=inputs.to(device),target.to(device)

       outputs=model(inputs)

       _,predicted=torch.max(outputs.data,dim=1)

       total+=target.size(0)

       correct+=(predicted==target).sum().item()

print('Accuracy on test set:%d %% [%d%d]' %(100*correct/total,correct,total))

if name ==' main ':

for epoch in range(10):

train(epoch)

   test()

運行結(jié)果

(1)batch_size:64,訓練次數(shù):10

圖片

圖片

(2)batch_size:128,訓練次數(shù):10

圖片

(3)batch_size:128,訓練次數(shù):10

圖片

結(jié)語

對比單個全連接網(wǎng)絡(luò),在卷積神經(jīng)網(wǎng)絡(luò)層的加持下,初始時,整個神經(jīng)網(wǎng)絡(luò)模型的性能顯著提升,準確率最低為96%。在batch_size:64,訓練次數(shù):100情況下,準確率達到99%。下一階在平均池化,3*3卷積核,以及不同通道數(shù)的情況下,探索對模型性能的影響。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關(guān)推薦

    基于賽靈思FPGA的卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)設(shè)計

    FPGA 上實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò) (CNN)。CNN 是一類深度神經(jīng)網(wǎng)絡(luò),在處理大規(guī)模圖像識別任務(wù)以及與機器學習類似的其他問題方面已大獲成功。在當前案例中,針對在 FPGA 上
    發(fā)表于 06-19 07:24

    卷積神經(jīng)網(wǎng)絡(luò)如何使用

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)究竟是什么,鑒于神經(jīng)網(wǎng)絡(luò)在工程上經(jīng)歷了曲折的歷史,您為什么還會在意它呢? 對于這些非常中肯的問題,我們似乎可以給出相對簡明的答案。
    發(fā)表于 07-17 07:21

    卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過程

    以前的神經(jīng)網(wǎng)絡(luò)幾乎都是部署在云端(服務(wù)器上),設(shè)備端采集到數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送給服務(wù)器做inference(推理),結(jié)果再通過網(wǎng)絡(luò)返回給設(shè)備端。
    發(fā)表于 12-23 06:16

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    的過程中存在梯度消失的問題[23],神經(jīng)網(wǎng)絡(luò)再 次慢慢淡出人們的視線。1998 年 LeCun 發(fā)明了 LeNet-5,并在 Mnist 數(shù)據(jù) 達到 98%以上的識別準確率,形成影響
    發(fā)表于 08-02 10:39

    卷積神經(jīng)網(wǎng)絡(luò)簡介:什么是機器學習?

    的理想卷積神經(jīng)網(wǎng)絡(luò)與其他類型的網(wǎng)絡(luò)之間的主要區(qū)別在于它們處理數(shù)據(jù)的方式。通過過濾,將連續(xù)檢查
    發(fā)表于 02-23 20:11

    卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用 卷積神經(jīng)網(wǎng)絡(luò)通常用來處理什么

    神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)廣泛用于圖像識別、自然語言處理、視頻處理等方面。本文將對卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用進行詳盡、詳實、細致的介紹,以及
    的頭像 發(fā)表于 08-21 16:41 ?4823次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本原理 卷積神經(jīng)網(wǎng)絡(luò)發(fā)展 卷積神經(jīng)網(wǎng)絡(luò)三大特點

    中最重要的神經(jīng)網(wǎng)絡(luò)之一。它是一種由多個卷積層和池化層(也可稱為下采樣層)組成的神經(jīng)網(wǎng)絡(luò)。CNN 的基本思想是以圖像為輸入,通過網(wǎng)絡(luò)
    的頭像 發(fā)表于 08-21 16:49 ?2273次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)層級結(jié)構(gòu) 卷積神經(jīng)網(wǎng)絡(luò)卷積層講解

    分類、目標檢測、人臉識別等。卷積神經(jīng)網(wǎng)絡(luò)的核心是卷積層和池化層,它們構(gòu)成了網(wǎng)絡(luò)的主干,實現(xiàn)了對
    的頭像 發(fā)表于 08-21 16:49 ?7280次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)的介紹 什么是卷積神經(jīng)網(wǎng)絡(luò)算法 卷積神經(jīng)網(wǎng)絡(luò)涉及的關(guān)鍵技術(shù)
    的頭像 發(fā)表于 08-21 16:49 ?1803次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點 卷積神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一種基于神經(jīng)網(wǎng)絡(luò)的機器學習算法,其主要特點是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動調(diào)整神經(jīng)元之間的權(quán)重,從而
    發(fā)表于 08-21 17:07 ?3852次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)算法 cnn卷積神經(jīng)網(wǎng)絡(luò)模型

    cnn卷積神經(jīng)網(wǎng)絡(luò)算法 cnn卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種特殊的
    的頭像 發(fā)表于 08-21 17:15 ?1989次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實現(xiàn)

    核心思想是通過卷積操作提取輸入數(shù)據(jù)的特征。與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)不同,卷積神經(jīng)網(wǎng)絡(luò)具有參數(shù)共享和局部連
    的頭像 發(fā)表于 07-02 16:47 ?472次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)訓練的是什么

    、訓練過程以及應(yīng)用場景。 1. 卷積神經(jīng)網(wǎng)絡(luò)的基本概念 1.1 卷積神經(jīng)網(wǎng)絡(luò)的定義 卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 09:15 ?319次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學習模型,由多層卷積層和池
    的頭像 發(fā)表于 07-03 09:28 ?441次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)分類方法有哪些

    ,包括基本原理、常見架構(gòu)、優(yōu)化策略、應(yīng)用場景等。 1. 卷積神經(jīng)網(wǎng)絡(luò)的基本原理 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò),其核心思想是
    的頭像 發(fā)表于 07-03 09:40 ?368次閱讀