CNN代碼詳細注釋

import torch 
from torch import nn#定義張量x,它的尺寸是5x1x28x28
#表示了5個單通道28x28大小的數據
x=torch.zeros([5,1,28,28])#定義一個輸入通道是1,輸出通道是6,卷積核大小是5x5的卷積層
conv=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)#將x,輸入至conv,計算出結果
c=conv(x)
#經過conv計算,得到5x6x24x24大小的輸出張量,經過卷積層的處理后得到6x24x24大小的特征圖print(c.shape)#程序輸出:torch.Size([5,6,24,24])#繼續輸入至池化層,計算后會得到6x12x12大小的特征圖
pool=nn.MaxPool2d(2)#定義最大池化層
s=pool(c) 將卷積層計算得到的整整圖c,輸入至pool#接下來繼續到第2個卷積層,計算出16個8x8的輸出特征圖
#再輸入到第2個池化層,計算得到16個4x4大小的特征圖
#池化層輸出后,將特征圖進行展平:16個4x4 -> 1x256的向量  
#展平flatten:將每個圖片中的每個像素放成一排,就是256維度的一維向量
#后面是全連接層 最后3個全連接層的大小為,256×120、120×84、84×10。
#經過這三個全連接層后:會計算出1×120、1×84、1×10的向量。1×10的向量,就對應了最終的10個分類結果。

LeNet5網絡實現:

import torch
from torch.nn import Module
from torch import nnclass LeNet5(Module):def _init_(self):#說明了這個網絡中有什么,定義網絡結構super(LeNet5, self)._init_()#第1個卷積塊self.convl = nn.Sequential(nn.Conv2d(1,6,5),nn.ReLU(),nn.MaxPool2d(2))#第2個卷積塊self.conv2= nn.Sequential(nn.Conv2d(6, 16, 5),nn.ReLU(),nn.MaxPool2d(2))#全連接層1self.fcl = nn.Sequential(nn.Linear(256,120),#線性層nn.ReLU())#全連接層2self.fc2 = nn.Sequential(nn.Linear(120,84),nn.ReLU())#全連接層3self.fc3= nn.Linear(84,10) def forward(self,x):#輸入張量x 進入到神經網絡后,它尺寸會如何變化。#說明了,這個網絡“如何算”!#最初輸入的x是nx1x28x28大小的,其中n是數據數量x = self.convl(x)# [n, 6, 12,12]x = self.conv2(x)# [n, 16, 4, 4]#在x輸入至全連接層前#需要使用view函數,將張量的維度從n×16x4x4展平為nx256x= x.view(-1,256)# [n,256]x = self.fcl(x)# [n,120]X = self.fc2(x)# [n,84]x = self.fc3(x)# [n,10]return x"""在函數中,輸入張量x會按照順序,進入conv1、conv2、fc1、fc2、fc3,進行計算。在旁邊注釋中,標記了張量x,經過每一層計算后,變化的尺寸。例如,最初輸入的x是n×1×28×28大小的。這里n表示了數據的數量。因此,x經過conv1,就會計算得到n×6×12×12大小的張量。接著,x經過conv2,會計算出n×16×4×4的張量。備注:這里的conv1和conv2中,包含了池化層,所以特征圖尺寸會減半。然后,在x輸入至全連接層前,需要使用view函數:將張量的維度從n×16×4×4展平為n×256。接著再按照順序,將x輸入至全連接層fc1、fc2、fc3計算。最終函數返回一個n×10大小的結果。"""

訓練:

for epoch in range(10):#外層循環,代表了整個訓練數據集的遍歷次數#內層循環使用train_loader,進行小批量的數據讀取for batch_idx, (data, label) in enumerate(train_loader):#每次內層循環,都會進行一次梯度下降算法#梯度下降算法,包括了5個步驟:output=model(data)#1.計算神經網絡的前向傳播結果loss=criterion(output,label)#2.計算output和標簽label之間的損失lossloss.backward() #3.使用backward計算梯度#每次內層循環,都會進行一次梯度下降算法。optimizer.step()#4.使用optimizer.step更新參數optimizer.zero_grad() # 5.將梯度清零#每迭代100個小批量,就打印一次模型的損失,觀察訓練的過程if batch_idx100 =0:print(f"Epoch (epoch + 1)/10 "f"| Batch (batch_idx)/(len(train_loader)}"f"i Loss: (loss.item():.4f)")
torch.save(model.state_dict(),'mnist_lenet5.pth')

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

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

相關文章

機器指標監控技術方案

文章目錄 機器指標監控技術方案架構圖組件簡介Prometheus 簡介核心特性適用場景 Grafana 簡介核心特性適用場景 Alertmanager 簡介核心特性適用場景 數據采集機器Node ExporterMySQL ExporterRedis ExporterES ExporterRocketMQ ExporterSpringcloud ExporterNacos 數據存儲短期…

【Office-Excel】單元格輸入數據后自動填充單位

1.自定義設置單元格格式 例如我想輸入數字10,回車確認后自動顯示10kg。 右擊單元格或者快捷鍵(Ctrl1),選擇設置單元格格式,自定義格式輸入: 0"kg"格式仍是數字,但是顯示是10kg&…

JavaScript的3D庫有哪些?

JavaScript的3D庫有哪些? 在3D開發領域,JavaScript提供了多種庫和框架,使開發者能夠在瀏覽器中創建豐富的3D體驗。以下是一些流行的3D方面的JavaScript庫: Three.js:這是最著名的用于創建3D圖形的JavaScript庫之一。它…

中央網信辦部署開展“清朗·整治AI技術濫用”專項行動

為規范AI服務和應用,促進行業健康有序發展,保障公民合法權益,近日,中央網信辦印發通知,在全國范圍內部署開展為期3個月的“清朗整治AI技術濫用”專項行動。 中央網信辦有關負責人表示,本次專項行動分兩個階…

論文閱讀:2024 arxiv Jailbreaking Black Box Large Language Models in Twenty Queries

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Jailbreaking Black Box Large Language Models in Twenty Queries https://www.doubao.com/chat/4008882391220226 https://arxiv.org/pdf/2310.08419 速覽 這篇論文是來…

零基礎學指針2

零基礎學指針---大端和小端 零基礎學指針---什么是指針 零基礎學指針---取值運算符*和地址運算符& 零基礎學指針---結構體大小 零基礎學指針5---數據類型轉換 零基礎學指針6---指針數組和數組指針 零基礎學指針7---指針函數和函數指針 零基礎學指針8---函數指針數組…

《Python實戰進階》 No46:CPython的GIL與多線程優化

Python實戰進階 No46:CPython的GIL與多線程優化 摘要 全局解釋器鎖(GIL)是CPython的核心機制,它保證了線程安全卻限制了多核性能。本節通過concurrent.futures、C擴展優化和多進程架構,實戰演示如何突破GIL限制&#…

Golang實現函數默認參數

golang原生不支持默認參數 在日常開發中,我們有時候需要使用默認設置,但有時候需要提供自定義設置 結構體/類,在Java我們可以使用無參、有參構造函數來實現,在PHP中我們也可以實現(如 public function xxx($isCName false, $sec…

Chrome 136 H265 WebRTC 支持 正式版本已包含

時間過的真快,去年8月份寫過一篇文章介紹如何加參數方式啟動Chrome H265 硬件解碼器, 現在的136版本已經包含在內,至此WebRTC已經完整包含了H264和H265解碼器,這個事情應該從2015年開始,Google強推VP9 AV1&#xff0c…

12.SpringDoc OpenAPI 功能介紹(用于生成API接口文檔)

12.SpringDoc OpenAPI 功能介紹(用于生成API接口文檔) SpringDoc OpenAPI 是一個基于 OpenAPI 3.0/3.1 規范的工具,用于為 Spring Boot 應用生成 API 文檔。它是 springfox(Swagger 2.x)的現代替代方案,完全支持 Spring Boot 3.x…

CentOS Linux 環境二進制方式安裝 MySQL 5.7.32

文章目錄 安裝依賴包新建用戶解壓初始化配置文件啟動服務登錄MySQL修改密碼停止數據庫 安裝依賴包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用戶 useradd mysql解壓 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…

Webug4.0通關筆記06- 第8關CSV注入

目錄 CSV注入漏洞 1.CSV漏洞簡介 2.漏洞原理 (1)公式執行 (2)DDE機制 (3)OS命令執行 3.漏洞防御 第08關 CSV注入 1.打開靶場 2.修改源碼 3.注入命令 4.導出excel表 5.打開excel表 CSV注入漏洞…

Windows和 macOS 上安裝 `nvm` 和 Node.js 16.16.0 的詳細教程。

Windows和 macOS 上安裝 nvm 和 Node.js 16.16.0 的詳細教程。 --- ### 1. 安裝 nvm(Node Version Manager) nvm 是一個 Node.js 版本管理工具,可以輕松安裝和切換不同版本的 Node.js。 #### Windows 安裝 nvm 1. **下載 nvm 安裝包**&#x…

[特殊字符] 藍橋杯省賽全解析:含金量、獲獎難度、參賽意義與發展價值全面剖析

藍橋杯省賽剛剛落幕,不論你是剛參加完比賽的同學,還是還在觀望是否值得投入時間去準備藍橋杯的學生,相信你都關心: 藍橋杯到底值不值得參加? 獲獎難不難?含金量如何? 和其它算法競賽相比有什么…

ASP.NET MVC后端控制器用模型 接收前端ajax數據為空

1、前端js代碼 如下: const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必須要JSON.stringifysuccess:…

擁抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 協程生態中處理異步數據流的核心工具,它提供了一種聲明式、輕量級且與協程深度集成的響應式編程模型。與傳統的 RxJava 相比,Flow 更簡潔、更易于維護,尤其在 Android 開發中已成為主流選擇。本文將從基礎概念…

精益數據分析(34/126):深挖電商運營關鍵要點與指標

精益數據分析(34/126):深挖電商運營關鍵要點與指標 在創業和數據分析的學習之旅中,我們都在不斷探尋如何讓業務更上一層樓。今天,我依舊帶著和大家共同進步的想法,深入解讀《精益數據分析》中電商運營的關…

Learning vtkjs之ImageCropFilter

過濾器 圖片數據體積裁剪 介紹 vtkImageCropFilter可以裁剪vtkImageData。這只適用于IJK對齊的平面。 請注意,由于CPU限制的裁剪,這在大型數據集上會很慢。 效果 核心代碼 需要實現這個代碼主要邏輯 1、設定的crop的包圍盒 其實主要是IMax IMin JM…

深入理解 C++11 delete 關鍵字:禁用函數的藝術

一、什么是 delete 關鍵字 C11 引入的 delete 關鍵字是一種??顯式禁用函數??的語法機制。它允許開發者主動阻止特定函數的使用,比傳統的私有化聲明更直觀、更安全,且能在編譯期捕獲更多潛在錯誤。 二、為什么需要 delete? 1. 傳統方式…

深度剖析!GPT-image-1 API 開放對 AI 繪畫技術生態的沖擊!

4月24日凌晨,OpenAI正式發布了全新的圖像生成模型“gpt-image-1”,并通過API向全球開發者開放使用,這意味著其GPT-4o的圖像生成能力正式向開發者開放! 在這之前,GPT-4o的圖像生成功能于今年3月25日由 OpenAI 創始人兼 …