精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

通過卷積神經網絡實現MNIST數據集分類

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

問題

對比單個全連接網絡,在卷積神經網絡層的加持下,初始時,整個神經網絡模型的性能是否會更好。

方法

模型設計

兩層卷積神經網絡(包含池化層),一層全連接網絡。

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

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

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

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

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

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

  4. 再次經過2 x 2的最大池化層:

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

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

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

代碼

準備數據集

準備數據集

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)

構造損失函數+優化器

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()

運行結果

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

圖片

圖片

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

圖片

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

圖片

結語

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 數據集
    +關注

    關注

    4

    文章

    1205

    瀏覽量

    24649
  • 卷積神經網絡

    關注

    4

    文章

    366

    瀏覽量

    11853
收藏 人收藏

    評論

    相關推薦

    基于賽靈思FPGA的卷積神經網絡實現設計

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

    卷積神經網絡如何使用

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

    卷積神經網絡一維卷積的處理過程

    以前的神經網絡幾乎都是部署在云端(服務器上),設備端采集到數據通過網絡發送給服務器做inference(推理),結果再通過網絡返回給設備端。
    發表于 12-23 06:16

    卷積神經網絡模型發展及應用

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

    卷積神經網絡簡介:什么是機器學習?

    的理想卷積神經網絡與其他類型的網絡之間的主要區別在于它們處理數據的方式。通過過濾,將連續檢查
    發表于 02-23 20:11

    卷積神經網絡的應用 卷積神經網絡通常用來處理什么

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

    卷積神經網絡的基本原理 卷積神經網絡發展 卷積神經網絡三大特點

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

    卷積神經網絡層級結構 卷積神經網絡卷積層講解

    分類、目標檢測、人臉識別等。卷積神經網絡的核心是卷積層和池化層,它們構成了網絡的主干,實現了對
    的頭像 發表于 08-21 16:49 ?7410次閱讀

    卷積神經網絡的介紹 什么是卷積神經網絡算法

    卷積神經網絡的介紹 什么是卷積神經網絡算法 卷積神經網絡涉及的關鍵技術
    的頭像 發表于 08-21 16:49 ?1825次閱讀

    卷積神經網絡和深度神經網絡的優缺點 卷積神經網絡和深度神經網絡的區別

    深度神經網絡是一種基于神經網絡的機器學習算法,其主要特點是由多層神經元構成,可以根據數據自動調整神經元之間的權重,從而
    發表于 08-21 17:07 ?3942次閱讀

    cnn卷積神經網絡算法 cnn卷積神經網絡模型

    cnn卷積神經網絡算法 cnn卷積神經網絡模型 卷積神經網絡(CNN)是一種特殊的
    的頭像 發表于 08-21 17:15 ?2032次閱讀

    卷積神經網絡的原理與實現

    核心思想是通過卷積操作提取輸入數據的特征。與傳統的神經網絡不同,卷積神經網絡具有參數共享和局部連
    的頭像 發表于 07-02 16:47 ?501次閱讀

    卷積神經網絡訓練的是什么

    、訓練過程以及應用場景。 1. 卷積神經網絡的基本概念 1.1 卷積神經網絡的定義 卷積神經網絡
    的頭像 發表于 07-03 09:15 ?353次閱讀

    cnn卷積神經網絡分類有哪些

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

    卷積神經網絡分類方法有哪些

    ,包括基本原理、常見架構、優化策略、應用場景等。 1. 卷積神經網絡的基本原理 卷積神經網絡是一種前饋神經網絡,其核心思想是
    的頭像 發表于 07-03 09:40 ?410次閱讀