Pytorch 卷積神經網絡參數說明一

系列文章目錄


文章目錄

  • 系列文章目錄
  • 前言
  • 一、卷積層的定義
    • 1.常見的卷積操作
    • 2. 感受野
    • 3. 如何理解參數量和計算量
    • 4.如何減少計算量和參數量
  • 二、神經網絡結構:有些層前面文章說過,不全講
    • 1. 池化層(下采樣)
    • 2. 上采樣
    • 3. 激活層、BN層、FC層
      • 1).BatchNorm 層
      • 2).FC 全連接層
      • 3). dropout 層
      • 4). 損失層
  • 鳴謝


前言

??在前兩個實戰中,我們只學會了如何搭建神經網絡,但是里面有些函數接口不明白怎么回事,在這篇文章中,我們會逐一解答。


一、卷積層的定義

nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding = 0,dilation = 1,groups = 1,bias = True)

  1. 輸入通道
  2. 輸出通道
  3. 卷積核大小
  4. 移動步長
  5. 卷積核膨脹

卷積核的大小一般是 3 x 3,卷積的時候,以該元素為中心形成一個 3 x 3的格子,然后與卷積核做內積。不懂的話去小破站學學,很簡單,這里不是重點。輸入通道和輸出通道不用過多解釋,卷積核的數量。padding = 1 我們有時候發現靠邊的元素卷積不夠,需要進行拓展,這句話就是添加一行和一列,完成邊緣元素的卷積。dilation = 1,這個是為了增加卷積核的視野感受范圍,3 x 3 的卷積核變成 7 x 7 的卷積核,在分割網絡中常用。卷積一個元素之后,stride = 1 移動的步長,如果等于 2 就有些元素沒有中心卷積。groups = 1 分組卷積,一個卷積核為一組,可以降低計算量,主要在深度可分離卷積中。bias=True 偏執量,輸出的結果經過 y = wx+b wx 可以理解卷積,b就是我們家的偏置量。

1.常見的卷積操作

  • 分組卷積
  • 空洞卷積
  • 深度可分離卷積( 分組卷積 + 1 x 1 卷積)
  • 反卷積
  • 可變型卷積,卷積核不是固定的。

2. 感受野

??指的是神經網絡中卷積核看到的區域,在神經網絡中,feature_map 某個元素的計算受到輸入圖像上某個區域的影響,這個區域就是該元素的感受野。

圖 1 感受野
從圖片中可以看到,卷積和的大小是 1 個與兩個 3 x 3 ,兩個卷積核的感受野為 5x5=25,j計算為 2 x 3 x 3 =18,如果換成大的 5 x 5 的卷積核,那么感受野的范圍沒有變,但是計算量變成25,顯然我們一般采取小的卷積核。這樣還有一個好處,網絡的非線性還會增強,計算量還降低了。

3. 如何理解參數量和計算量

  • 參數量:參與計算參數的個數,占用內存空間:對于一個卷積核而言參數量: ( C i n ? ( K ? K ) + 1 ) ? C o u t (Cin*(K*K)+1)*Cout (Cin?(K?K)+1)?Cout
  • FLOPS:每秒浮點運算次數,可以理解是速度,用來衡量硬件的性能。
  • FLOPs:s小寫,這個就是計算量,衡量算法模型的復雜度:
    ( C i n ? 2 ? K ? K ) ? H o u t ? W o u t ? C o u t (Cin * 2 * K* K ) * Hout * Wout * Cout (Cin?2?K?K)?Hout?Wout?Cout
  • MAC:乘加的次數
    C i n ? K ? K ? H o u t ? W o u t ? C o u t Cin * K* K * Hout * Wout * Cout Cin?K?K?Hout?Wout?Cout

??FLOPs 把乘加分開算,所以乘以2,MAC 算一次,所以是 1。

4.如何減少計算量和參數量

?? 減少計算量很參數量還是要在卷積層動腦子,在不改變感受野和減少參數量的角度壓縮矩陣:

  • 采用多個 3 x 3 的卷積核代替大的卷積核。
  • 采用深度可分離卷積核,即分組卷積
  • 通道 Shuffle
  • Pooling 層:快速下采樣,可能有信息的損失。一般在前兩個卷積核使用。
  • Stride = 2:卷積的步長加大
    等等

二、神經網絡結構:有些層前面文章說過,不全講

??神經網絡基本可以分成這三種金典的結構,如圖 2 所示。串聯結構、跳連結構、并連結構。跳連結構是把部分輸出直接作為輸出,這樣可以大幅度減少計算量。

圖 2 神經網絡結構

1. 池化層(下采樣)

??池化層對輸入特征的壓縮:

  • 一方面使特征圖變小,簡化網絡計算復雜度。
  • 一方面進行特征壓縮,提取主要特征。

池化層常用兩種方法:最大池化(Max Pooling)和平均池化(Average Poling),
nn.MaxPool2d(kernel_size = ,Stride = ,pading =0 ,dilation = 1,return_indeces = False,ceil_mode = False)
前四個參數就不說了,上面有。這個 return_indeces,返回的是最大值的索引,這樣當我們恢復原圖的時候有很大作用,相似度更近。下面是一張最大池化的圖:

圖 3 池化層
在 2x2 的卷積核中,取出一個最大值,4 x 4 的特征變成了一個有最大值組成 2 x 2 的特征圖,這樣實現了降維的目的。

2. 上采樣

??上采樣有兩種方式:

  • Resize,如雙線性插值直接放縮,類似于圖像放縮。
  • 反卷積:Deconvolution,即 Transposed Convolution

代碼摘要:

nn.functional.interpolate(input,size = None,scalar_factor = None,model = 'nearest',align_corners = None)nn.ConvTranspose2d(in_channels,out_channels,kernel_size, stride = 1,padding = 0,bias = True)

通常我們采用Resize進行重構,計算量小,反卷積的計算量很大。

3. 激活層、BN層、FC層

??在卷積層,其實就是一個線性操作y = wx +b w 和 b 就是卷積核的參數,線性函數并不能很好去擬合數據樣本,所以我們提出激活函數來解決這一問題,旨在提高網絡的非線性表達。

  • 激活函數:為了增加網絡的非線性,進而增加網絡的表達能力。
  • 常用函數:ReLU函數、Leakly ReLU函數、ELU 函數等
  • 語句:torch.nn.ReLU(inplace = True)

1).BatchNorm 層

  • 通過一定的規范化手段,把每層神經網絡任意神經元的輸入值分布強行拉倒j標準正態分布上面,均值 0 ,方差 1.
  • BatchNorm 是一種歸一化的手段,他會減少圖像之間的絕對差異,突出相對差異,加快模型的訓練速度。
  • 不適合 image to image 和對噪聲敏感的任務中
  • 語句:nn.BatchNorm2d(num_features,eps = 1e-05,momentum =0.1,affine = True,track_runing_stats = True )

BatchNorm 層可以理解為工具層,我們在卷積層也可以加入,后面在更一個ReLU層,往往就是這么干的。

2).FC 全連接層

??連接所有的特征,把輸出值送給分類器(softmax層)。

  • 對前層的特征進行一個加權和,(卷積層是將輸入數據映射到隱層特征空間) ,將特征空間通過線性變化映射到樣本標記空間。
  • 也可以通過 1 x 1 卷積 + gloable average pooling 代替。
  • 全連接層的參數冗余,一般情況需要 Dropout 限制參數。
  • FC 層對圖片的大小尺寸非常敏感。
  • 語句:nn.Linear(in_features,out_features,bias)

3). dropout 層

  • 在不同的訓練中隨機扔掉一些神經元。
  • 在測試中不實用隨機失活,那么所有的神經元都激活。
  • 作用:為了防止和減輕過擬合才使用的函數,一般用在全鏈接層。
  • 語句:nn.dropout

4). 損失層

??在網絡優化,反向傳播時非常重要的一個層,損失函數選擇取決于我們要訓練的任務。

  • 損失層:設置一個損失函數用來比較輸出值和目標值,通過最小損失來驅動網絡的訓練。
  • 網絡的損失通過前向操作計算,網絡的參數相較于損失函數,通過后向操作計算。
  • 分類問題損失:
    • nn.BCELoss
    • nn.CrossEntrophyLoss 等等
  • 回歸問題損失:
    • nn.L1Loss
    • nn.MSELoss
    • nn.SmoothL1Loss 等等

鳴謝

??年齡越大,越不想欠誰。一生活得灑脫,一個人,幾個人也快樂。如果本文對大家有幫助,還請大家瀏覽一下我弟新開的小店,要黃了,哈哈哈。點擊這里。

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

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

相關文章

C++ 中的 iostream 庫:cin/cout 基本用法

iostream 是 C 標準庫中用于輸入輸出操作的核心庫,它基于面向對象的設計,提供了比 C 語言的 stdio.h 更強大、更安全的 I/O 功能。下面詳細介紹 iostream 庫中最常用的輸入輸出工具:cin 和 cout。 一、 基本概念 iostream 庫:包…

SAP復制一個自定義移動類型

SAP復制移動類型 在SAP系統中,復制移動類型201可以通過事務碼OMJJ或SPRO路徑完成,用于創建自定義的移動類型以滿足特定業務需求。 示例操作步驟 進入OMJJ事務碼: 打開事務碼OMJJ,選擇“移動類型”選項。 復制移動類型&#xff…

Bambu Studio 中的“回抽“與“裝填回抽“的區別

回抽 裝填回抽: Bambu Studio 中的“回抽” (Retraction) 和“裝填回抽”(Prime/Retract) 是兩個不同的概念,它們都與材料擠出機的操作過程相關,但作用和觸發條件有所不同。 回抽(Retraction): 回抽的作用, 在打印機移動到另一個位置之前,將…

危化品安全監測數據分析挖掘范式:從被動響應到戰略引擎的升維之路

在危化品生產的復雜生態系統中,安全不僅僅是合規性要求,更是企業生存和發展的生命線。傳統危化品安全生產風險監測預警系統雖然提供了基礎保障,但其“事后響應”和“單點預警”的局限性日益凸顯。我們正處在一個由大數據、人工智能、數字孿生和物聯網技術驅動的范式變革前沿…

C++ RPC 遠程過程調用詳細解析

一、RPC 基本原理 RPC (Remote Procedure Call) 是一種允許程序調用另一臺計算機上子程序的協議,而不需要程序員顯式編碼這個遠程交互細節。其核心思想是使遠程調用看起來像本地調用一樣。 RPC 工作流程 客戶端調用:客戶端調用本地存根(stub)方法參數序列化:客戶端存根將參…

Python:操作 Excel 預設色

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Python 操作 Excel 系列 讀取單元格數據按行寫入設置行高和列寬自動調整行高和列寬水平…

中科院1區|IF10+:加大醫學系團隊利用GPT-4+電子病歷分析,革新肝硬化并發癥隊列識別

中科院1區|IF10:加大醫學系團隊利用GPT-4電子病歷分析,革新肝硬化并發癥隊列識別 在當下的科研領域,人工智能尤其是大語言模型的迅猛發展,正為各個學科帶來前所未有的機遇與變革。在醫學范疇,從疾病的早期精準篩查&am…

Python學習小結

bg:記錄一下,怕忘了;先寫一點,后面再補充。 1、沒有方法重載 2、字段都是公共字段 3、都是類似C#中頂級語句的寫法 4、對類的定義直接: class Student: 創建對象不需要new關鍵字,直接stu Student() 5、方…

QCustomPlot 中實現拖動區域放大?與恢復

1、拖動區域放大? 在 QCustomPlot 中實現 ?拖動區域放大?(即通過鼠標左鍵拖動繪制矩形框選區域進行放大)的核心方法是設置 SelectionRectMode。具體操作步驟: 1?)禁用拖動模式? 確保先關閉默認的圖表拖動功能(否…

如何將文件從 iPhone 傳輸到閃存驅動器

您想將文件從 iPhone 或 iPad 傳輸到閃存盤進行備份嗎?這是一個很好的決定,但您需要先了解一些實用的方法。雖然 Apple 生態系統在很大程度上是封閉的,但您可以使用一些實用工具將文件從 iPhone 或 iPad 傳輸到閃存盤。下文提供了這些行之有效…

互聯網大廠Java求職面試:云原生架構與微服務設計中的復雜挑戰

互聯網大廠Java求職面試:云原生架構與微服務設計中的復雜挑戰 面試官開場白 面試官(嚴肅模式開啟):鄭薪苦,歡迎來到我們的技術面試環節。我是本次面試的技術總監,接下來我們將圍繞云原生架構、微服務設計、…

leetcode-hot-100 (鏈表)

1. 相交鏈表 題目鏈接:相交鏈表 題目描述:給你兩個單鏈表的頭節點 headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表不存在相交節點,返回 null 。 解答: 其實這道題目我一開始沒太看懂題目給…

Web前端基礎之HTML

一、瀏覽器 火狐瀏覽器、谷歌瀏覽器(推薦)、IE瀏覽器 推薦谷歌瀏覽器原因: 1、簡潔大方,打開速度快 2、開發者調試工具(右鍵空白處->檢查,打開調試模式) 二、開發工具 核心IDE工具 Visual Studio Code (VS Code)? 微軟開發…

11.TCP三次握手

TCP連接建立與傳輸 1.主機 A 與主機 B 使用 TCP 傳輸數據,A 是 TCP 客戶,B 是 TCP 服務器。假設有512B 的數據要傳輸給 B,B 僅給 A 發送確認;A 的發送窗口 swnd 的尺寸為 100B,而 TCP 數據報文段每次也攜帶…

Python 爬蟲入門 Day 3 - 實現爬蟲多頁抓取與翻頁邏輯

Python 第二階段 - 爬蟲入門 🎯 今日目標 掌握網頁分頁的原理和定位“下一頁”的鏈接能編寫循環邏輯自動翻頁抓取內容將多頁抓取整合到爬蟲系統中 📘 學習內容詳解 🔁 網頁分頁邏輯介紹 以 quotes.toscrape.com 為例: 首頁鏈…

分布式定時任務系列12:XXL-job的任務觸發為什么是死循環?

傳送門 分布式定時任務系列1:XXL-job安裝 分布式定時任務系列2:XXL-job使用 分布式定時任務系列3:任務執行引擎設計 分布式定時任務系列4:任務執行引擎設計續 分布式定時任務系列5:XXL-job中blockingQueue的應用 …

位運算詳解之異或運算的奇妙操作

位運算詳解之異或運算的奇妙操作 一、異或運算的本質與核心性質1.1 異或運算的定義與邏輯規則1.2 異或運算的核心代數性質(1)自反性:a ^ a 0(2)恒等性:a ^ 0 a(3)交換律&#xff1…

Element Plus 去除下拉菜單周黑邊

問題: 如上圖所示,當鼠標移入(hover)和點擊時就會圍繞一圈黑色邊框,但通過本文的方案 100% 完美解決。 解決方案: :deep(:focus-visible) {outline: none; } 備用方案 :deep(.el-tooltip__trigger:focus-visible) …

React Native 項目實戰 —— 記賬本應用開發指南

React Native 項目實戰 —— 記賬本應用開發指南 項目概述:本文將指導您使用 React Native 開發一個簡單的記賬本應用,幫助用戶記錄收入和支出。核心內容:我們將分析功能模塊、設計接口、劃分組件結構、管理數據流、實現頁面跳轉&#xff0c…

從 PPO、DPO 到 GRPO:大語言模型策略優化算法解析

從 PPO、DPO 到 GRPO:大語言模型策略優化算法解析 背景與簡介 大語言模型(LLM)的訓練通常分為預訓練和后訓練兩個階段。預訓練階段,模型在海量文本上學習下一詞預測的能力;后訓練階段,我們希望進一步對齊…