[深度學習]全連接神經網絡

目錄

一、實驗目的

二、實驗環境

三、實驗內容

3.1 完成解壓數據集相關操作

3.2分析代碼結構并運行代碼查看結果

3.3修改超參數(批量大小、學習率、Epoch)并對比分析不同結果

3.4修改網絡結構(隱藏層數、神經元個數)并對比分析不同結果

四、實驗小結


一、實驗目的

  1. 了解python語法
  2. 了解全連接神經網絡結構
  3. 調整超參數、修改網絡結構并對比分析其結果

二、實驗環境

Baidu 飛槳AI Studio

三、實驗內容

3.1 完成解壓數據集相關操作

輸入以下兩行命令解壓數據集

(1)cd ./data/data230? ? ?

(2)unzip Minst.zip

運行后結果如圖1所示

圖 1?解壓數據集

3.2分析代碼結構并運行代碼查看結果

代碼結構:

import?torchfrom?torch?import?nn,?optimfrom?torch.autograd?import?Variablefrom?torch.utils.data?import?DataLoaderfrom?torchvision?import?datasets,?transformsbatch_size?=?64learning_rate?=?0.02class?Batch_Net(nn.Module):def?__init__(self,?in_dim,?n_hidden_1,?n_hidden_2,?out_dim):super(Batch_Net,?self).__init__()self.layer1?=?nn.Sequential(nn.Linear(in_dim,?n_hidden_1),?nn.BatchNorm1d(n_hidden_1),?nn.ReLU(True))self.layer2?=?nn.Sequential(nn.Linear(n_hidden_1,?n_hidden_2),?nn.BatchNorm1d(n_hidden_2),?nn.ReLU(True))self.layer3?=?nn.Sequential(nn.Linear(n_hidden_2,?out_dim))def?forward(self,?x):x?=?self.layer1(x)x?=?self.layer2(x)x?=?self.layer3(x)return?xdata_tf?=?transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5],?[0.5])])train_dataset?=?datasets.MNIST(root='./data/data230',?train=True,?transform=data_tf,?download=True)test_dataset?=?datasets.MNIST(root='./data/data230',?train=False,?transform=data_tf)train_loader?=?DataLoader(train_dataset,?batch_size=batch_size,?shuffle=True)test_loader?=?DataLoader(test_dataset,?batch_size=batch_size,?shuffle=False)#model?=?net.simpleNet(28?*?28,?300,?100,?10)#?model?=?Activation_Net(28?*?28,?300,?100,?10)model?=?Batch_Net(28?*?28,?300,?100,?10)if?torch.cuda.is_available():model?=?model.cuda()criterion?=?nn.CrossEntropyLoss()optimizer?=?optim.SGD(model.parameters(),?lr=learning_rate)epoch?=?0for?data?in?train_loader:img,?label?=?dataimg?=?img.view(img.size(0),?-1)if?torch.cuda.is_available():img?=?img.cuda()label?=?label.cuda()else:img?=?Variable(img)label?=?Variable(label)out?=?model(img)loss?=?criterion(out,?label)print_loss?=?loss.data.item()optimizer.zero_grad()loss.backward()optimizer.step()epoch+=1if?epoch%100?==?0:print('epoch:?{},?loss:?{:.4}'.format(epoch,?loss.data.item()))model.eval()eval_loss?=?0eval_acc?=?0for?data?in?test_loader:img,?label?=?dataimg?=?img.view(img.size(0),?-1)if?torch.cuda.is_available():img?=?img.cuda()label?=?label.cuda()out?=?model(img)loss?=?criterion(out,?label)eval_loss?+=?loss.data.item()*label.size(0)_,?pred?=?torch.max(out,?1)num_correct?=?(pred?==?label).sum()eval_acc?+=?num_correct.item()print('Test?Loss:?{:.6f},?Acc:?{:.6f}'.format(eval_loss?/?(len(test_dataset)),eval_acc?/?(len(test_dataset))))

代碼分析

代碼實現了通過使用批標準化的神經網絡模型對MNIST數據集進行分類。

1.首先定義一些模型中會用到的超參數,在實驗中設置批量大小(batch_size)為64,學習率(learning_rate)為0.02

2.定義Batch_Net神經網絡類繼承自torch庫的nn.Module。

(1)定義的初始化函數_init_接收輸入維度(in_dim)、兩個隱藏層神經元數量(n_hidden_1和n_hidden_2)和輸出維度(out_dim)作為參數,定義第一層和第二層網絡結構,包括線性變換、批標準化和ReLU激活函數,第三層網絡結構只包括線性變換。

(2)定義的forward前向傳播函數接受輸入x,依次經過三層網絡結構處理后返回處理結果。

3.將數據進行預處理。包括使用transforms.ToTensor()將圖片轉換成PyTorch中處理的對象Tensor,并進行標準化操作,通過transforms.Normalize()做歸一化(減均值,再除以標準差)操作,通過transforms.Compose()函數組合各種預處理的操作。

4.下載并加載MNIST訓練數據(train_dataset)以及測試數據(test_dataset);創建數據加載器,用于批量加載訓練數據(train_loader)和測試數據(test_loader)。

5.選擇訓練的模型,實驗中選擇Batch_Net模型,判斷GPU是否可用,如果GPU可用,則將模型放到GPU上運行。在定義損失函數(criterion)和優化器(optimizer),損失函數使用交叉熵損失,優化器使用隨機梯度下降優化器。

6.開始訓練模型,遍歷訓練數據,通過img.view(img.size(0), -1)將圖像數據調整為一維張量,以便與模型的輸入匹配。計算損失值(loss)并進行反向傳播和參數更新,每100個epoch打印一次訓練損失,最后評估模型在測試集上的性能,計算并打印總損失(將損失值乘以當前批次的樣本數量,累加到eval_loss中)和準確率(eval_acc)。

運行代碼后的結果如圖所示:

圖 2?批量大小=64,學習率=0.02,Epoch次數=100

3.3修改超參數(批量大小、學習率、Epoch)并對比分析不同結果

1.當只修改批量大小batch_size時(學習率=0.02,Epoch次數=100)

(1)batch_size=16,結果如圖3所示

圖 3

(2)batch_size=64,結果如圖4所示

圖 4

(3)batch_size=128,結果如圖5所示

圖 5

對比總結:增大batch_size后,數據的處理速度加快,運行時間變短,跑完一次 epoch(全數據集)所迭代的次數減少。

2.當只修改學習率learning_rate時(批量大小=64,Epoch次數=100)

(1)learning_rate=0.005,結果如圖6所示。

圖 6

(2)learning_rate=0.02,結果如圖7所示。

圖 7

(3)learning_rate=0.1,結果如圖8所示。

圖 8

(4)learning_rate=0.4,結果如圖9所示。

圖 9

對比總結:當學習率適當增大時可能會有助于降低損失函數,提高模型的精確度,但是當學習率超出一定范圍則會降低模型的精確率。

3.當只修改Epoch次數時(批量大小=64,學習率=0.02)

(1)Epoch=50,結果如圖10所示。

圖 10

(2)Epoch=100,結果如圖11所示。

圖 11

(3)Epoch=200,結果如圖12所示。

圖 12

對比總結:不同Epoch次數導致損失函數不同、模型的準確率有所差別。

3.4修改網絡結構(隱藏層數、神經元個數)并對比分析不同結果

1.修改神經網絡的隱藏層數

(1)隱藏層數為兩層時的結果(n_hidden_1、n_hidden_2),結果如圖13所示。

圖 13

(2)隱藏層數為三層時的結果(n_hidden_1、n_hidden_2、n_hidden_3),結果如圖14所示。

圖 14

對比結果:可以看到,增加隱藏層個數后,運行時間增加,損失函數有所降低,三層隱藏層網絡結構的模型準確率較高于兩層隱藏層模型的準確率。

2.修改神經元個數(這里基于三層隱藏層數進行實驗)

(1)神經元個數參數設定為model = Batch_Net(28 * 28, 300, 200,100, 10),結果如圖15所示。

圖 15

(2)神經元個數參數設定為model = Batch_Net(28 * 28, 400, 300,200, 10),結果如圖16所示。

圖 16

(3)神經元個數參數設定為model = Batch_Net(28 * 28, 200, 100,50, 10),結果如圖17所示。

圖 17

實驗小

超參數是在訓練神經網絡之前設置的,而不是通過訓練過程中學習得出的。常見的超參數包括學習率、批量大小、隱藏層的數量、神經元的個數等等。在使用深度神經網絡時,正確地調整超參數是提高模型性能的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84152.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openEuler安裝BenchmarkSQL

BenchmarkSQL是一個用于評估數據庫性能的開源工具。它模擬TPC-C(Transaction Processing Performance Council)基準測試場景,該場景主要用于衡量數據庫在處理大量并發事務時的能力。TPC-C測試場景模擬了一個典型的批發分銷商的業務環境&#…

分庫分表之優缺點分析

大家好,我是工藤學編程 🦉一個正在努力學習的小博主,期待你的關注實戰代碼系列最新文章😉C實現圖書管理系統(Qt C GUI界面版)SpringBoot實戰系列🐷【SpringBoot實戰系列】Sharding-Jdbc實現分庫…

【2025年超詳細】Git 系列筆記-4 git版本號及git相關指令運用。

系列筆記 【2025年超詳細】Git 系列筆記-1 Git簡述、Windows下git安裝、Linux下git安裝_displaying 2e144 commits. adjust this setting in -CSDN博客 【2025年超詳細】Git 系列筆記-2 github連接超時問題解決_2025訪問github-CSDN博客 【2025年超詳細】Git 系列筆記-3 Git…

圖像特征檢測算法SuperPoint和SuperGlue

SuperPoint 背景與概述 :SuperPoint 是一個自監督的全卷積神經網絡,用于提取圖像中的興趣點及其描述子。它在 2018 年由 Magic Leap 提出,通過在合成數據集上預訓練一個基礎檢測器 MagicPoint,然后利用同胚適應技術對真實圖像數據…

nginx 和 springcloud gateway cors 跨域如何設置

在跨域資源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是兩種常見的解決方案,它們的配置邏輯和適用場景有所不同。以下是詳細對比和配置示例: 一、核心區別 維度NginxAPI Gateway定位反向代理/Web服務器微服務流量入口配置位置基礎設施層應…

電路筆記(信號):一階低通RC濾波器 一階線性微分方程推導 拉普拉斯域表達(傳遞函數、頻率響應)分析

目錄 RC 低通濾波器電路一階線性微分方程推導拉普拉斯域表達(傳遞函數)傳遞函數 H ( s ) H(s) H(s)頻率響應(令 s j ω s j\omega sjω)幅頻特性:相位特性:Bode 圖(線性系統頻率響應&#x…

【Git】刪除遠程分支時,本地分支還能看到

當遠程倉庫的分支被刪除后,本地通過 git branch -a 或 git remote show origin 仍能看到這些分支的引用,是因為本地存儲的遠程跟蹤分支(位于 refs/remotes/origin/)未被同步更新。以下是解決方法: 解決方案&#xff1…

Cubase 通過 MIDIPLUS MIDI 鍵盤進行走帶控制的設置方法

第一步,在官網下載xml配置文件。 https://midiplus.com/upload/202101/29/Xpro & Xpro_mini控制腳本(Cubase).zip 第二步,Cubase中按如圖步驟添加映射。 將MIDI鍵盤連接到電腦后打開Cubase軟件,點選菜單“工作室”->“工作室設置”&…

第十八章 Linux之Python定制篇——Python開發平臺Ununtu

1. Ubuntu介紹 Ubuntu(友幫拓、優般圖、烏班圖)是一個以桌面應用為主的開源GUN/Linux操作系統,Ubuntu基于GUN/Linux,支持x86、amd64(即x64)和ppc架構,有全球專業開發團隊(Canonical…

推薦輕量級文生視頻模型(Text-to-Video)

1. ModelScope T2V by 阿里達摩院(推薦) 模型名:damo/text-to-video-synthesis 輸入:一句文字描述(如:"a panda is dancing") 輸出:2秒視頻(16幀&#xff0c…

流編輯器sed

sed簡介 sed是一種流編輯器,處理時,把當前處理的行存儲在臨時緩沖區中,稱為模式空間,接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下行,這樣不斷重復&#xf…

商用密碼基礎知識介紹(上)

一、密碼的基礎知識 1、密碼分類 根據《中華人民共和國密碼法》,國家對密碼實行分類管理,分為密碼分為核心密碼、普通密碼和商用密碼。 (1)核心密碼、普通密碼 核心密碼、普通密碼用于保護國家秘密信息,核心密碼保護…

PROFINET主站S7-1500通過協議網關集成歐姆龍NJ系列TCP/IP主站

一、項目背景 某大型新能源電池生產企業,致力于提升電池生產的自動化水平和智能化程度。其生產線上,部分關鍵設備采用了不同的通信協議。在電池生產的前段工序,如原材料攪拌、涂布等環節,使用了西門子S7-1500系列PLC作為ROFINET協…

Vue3 + TypeScript + Element Plus + el-input 輸入框列表按回車聚焦到下一行

應用效果:從第一行輸入1,按回車,聚焦到第二行輸入2,按回車,聚焦到第三行…… 一、通過元素 id,聚焦到下一行的輸入框 關鍵技術點: 1、動態設置元素 id 屬性為::id"input-appl…

FramePack 全面測評:革新視頻生成體驗

在 AI 視頻生成領域,FramePack 自問世便備受矚目,它憑借獨特的技術架構,號稱能打破傳統視頻生成對高端硬件的依賴,讓普通電腦也能產出高質量視頻。此次測評,我們將全方位剖析 FramePack,探究它在實際應用中…

html中的table標簽以及相關標簽

表格標簽可以通過指定的標簽完成數據展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格標簽</title> </head> <body><table border"2"><!-- tr是表行 r…

springboot+vue3+vue-simple-uploader輕松實現大文件分片上傳Minio

最近在寫視頻課程的上傳&#xff0c;需要上傳的視頻幾百MB到幾個G不等&#xff0c;普通的上傳都限制了文件的大小&#xff0c;況且上傳的文件太大的話會超時、異常等。所以這時候需要考慮分片上傳了&#xff0c;把需要上傳的視頻分成多個小塊上傳到&#xff0c;最后再合并成一個…

AI 重構代碼實戰:如何用飛算 JavaAI 快速升級遺留系統?

在企業數字化進程中&#xff0c;遺留系統如同陳舊的基礎設施&#xff0c;雖承載著重要業務邏輯&#xff0c;但因技術落后、架構復雜&#xff0c;升級維護困難重重。飛算 JavaAI 的出現&#xff0c;為遺留系統的二次開發帶來了新的轉機&#xff0c;其基于智能分析與關聯項目的技…

鴻蒙運動開發實戰:打造專屬運動視頻播放器

##鴻蒙核心技術##運動開發##Media Kit&#xff08;媒體服務&#xff09;# 在當今數字化時代&#xff0c;運動健身已經成為許多人生活的一部分。今天我將在應用中添加視頻播放器&#xff0c;幫助用戶在運動前、運動后更好地進行熱身和拉伸。這篇文章將從代碼核心點入手&#xf…

一個包含15個界面高質量的電商APP客戶端UI解決方案

一個包含15個界面高質量的電商APP客戶端UI解決方案 您可以將其用于電商APP應用項目。包含一系列完整的界面設計元素&#xff0c;包括歡迎頁、登錄、注冊、首頁、產品分類、產品詳情、尺碼選擇、購物車、訂單、支付&#xff0c;覆蓋電商APP的大部分界面。每個部分都精心設計&…