【PyTorch】PyTorch中torch.nn模塊的卷積層

PyTorch深度學習總結

第七章 PyTorch中torch.nn模塊的卷積層


文章目錄

  • PyTorch深度學習總結
  • 前言
  • 一、torch.nn模塊
    • 1. 模塊的基本組成部分
      • 1.1 層(Layers)
      • 1.2 損失函數(Loss Functions)
      • 1.3 激活函數(Activation Functions)
    • 2. 自定義神經網絡模型
    • 3. 模塊的優勢
  • 二、torch.nn模塊的卷積層
    • 1. 卷積的定義
    • 2. 常見的卷積層
    • 3. 卷積層的重要參數
    • 4. 卷積層總結


前言

上文介紹了PyTorch中張量(Tensor)微分(torch.autograd)操作,現在我們以及學習完了張量的主要基本操作,本文將進入神經網絡介紹。
首先,本文將介紹torch.nn模塊學習(卷積層)。


一、torch.nn模塊

torch.nn 是 PyTorch 中用于構建神經網絡的核心模塊,它提供了豐富的類和函數,方便用戶定義、訓練和評估神經網絡模型


1. 模塊的基本組成部分

1.1 層(Layers)

torch.nn 提供了多種類型的層,如卷積層、池化層、循環層、全連接層等,這些層是構建神經網絡的基本單元。
例如:卷積層nn.Conv2d等)、池化層nn.MaxPool2d等)、循環層nn.rnn等)、全連接層nn.Linear等)。

1.2 損失函數(Loss Functions)

損失函數能衡量模型預測結果與真實標簽之間的差異,用于指導模型的訓練。
例如:交叉熵損失nn.CrossEntropyLoss)、 均方誤差損失nn.MSELoss)等。

1.3 激活函數(Activation Functions)

激活函數是為神經網絡引入非線性因素,使網絡能夠學習更復雜的函數。
例如:ReLU 激活函數(nn.ReLU)、Sigmoid 激活函數(nn.Sigmoid)等。


2. 自定義神經網絡模型

通過繼承 nn.Module 類,可以自定義神經網絡模型。在自定義模型時,需要實現 __init__ 方法來初始化模型的層,以及 forward 方法來定義模型的前向傳播過程。


3. 模塊的優勢

高度模塊化torch.nn 模塊將神經網絡的各個組件進行了模塊化封裝,用戶可以方便地組合不同的層、損失函數和激活函數,構建出復雜的神經網絡模型。
自動求導:結合 PyTorch 的自動求導機制,torch.nn 模塊可以自動計算模型的梯度,大大簡化了模型訓練的過程。
跨平臺支持:基于 PyTorch 的跨平臺特性,torch.nn 模塊可以在 CPUGPU 等不同的計算設備上運行,提高了模型的訓練和推理效率。


二、torch.nn模塊的卷積層

1. 卷積的定義

卷積是一種數學運算,在信號處理、圖像處理和機器學習等領域都有廣泛應用。卷積公式通常用星號“*”表示卷積運算,下方展示了連續和離散兩種信號的卷積計算公式。
連續時間信號 x(t)h(t) ,其卷積公式定義為:
(y?h)(t)=∫?∞∞x(τ)h(t?τ)dτ(y * h)(t) = \int_{-\infty}^{\infty} x(\tau)h(t - \tau)d\tau (y?h)(t)=??x(τ)h(t?τ)dτ
離散時間信號 x[n]h[n],其卷積公式定義為:
(y?h)[n]=∑k=?∞∞x[k]h[n?k](y * h)[n] = \sum_{k = -\infty}^{\infty} x[k]h[n - k] (y?h)[n]=k=??x[k]h[n?k]
下圖展示了離散信號卷積計算過程:
卷積運算過程


2. 常見的卷積層

以下舉例了torch.nn模塊中常見的卷積層:

卷積層類名(torch.nn 中)用途
一維卷積nn.Conv1d主要用于處理一維序列數據,如音頻信號、時間序列等。在音頻處理中,可以將音頻的波形信號作為輸入,通過一維卷積提取不同時間步的特征。
二維卷積nn.Conv2d廣泛應用于處理二維圖像數據,如圖像分類、目標檢測、語義分割等任務。通過二維卷積可以提取圖像中的邊緣、紋理等特征。
三維卷積nn.Conv3d適用于處理三維數據,如視頻數據(包含時間維度)、醫學影像(如 CT 掃描數據)等。在視頻分析中,可提取視頻在時間和空間上的特征。
轉置卷積(反卷積)nn.ConvTranspose2d常用于將低分辨率的特征圖上采樣為高分辨率的特征圖,在圖像生成、語義分割等任務中經常使用。例如在圖像生成網絡中,將隨機噪聲通過轉置卷積逐步生成高分辨率的圖像。
分組卷積nn.Conv2d(使用 groups 參數)將輸入通道和輸出通道分別分成若干組,每組獨立進行卷積操作,最后將結果拼接起來。可以減少模型的參數數量,提高計算效率。在一些輕量級的神經網絡中經常使用。

3. 卷積層的重要參數

在 PyTorch 的 torch.nn 模塊中,卷積層是構建卷積神經網絡(CNN)的核心組件之一。以下為你詳細介紹卷積層的幾個重要參數:


in_channels

  • 參數含義:該參數表示輸入特征圖的通道數。在處理圖像數據時,通道數對應著圖像的顏色通道,例如灰度圖像的通道數為 1,RGB 彩色圖像的通道數為 3。
  • 示例解釋:假設你要處理 RGB 彩色圖像,那么輸入特征圖的通道數 in_channels 就應該設置為 3。若使用預訓練模型的中間層輸出作為輸入,這個輸出的特征圖通道數就決定了 in_channels 的取值。
  • 代碼示例
import torch
import torch.nn as nn# 輸入為 RGB 圖像,通道數為 3
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, >kernel_size=3)

out_channels

  • 參數含義:此參數指定了卷積層輸出特征圖的通道數。它相當于卷積核的數量,每個卷積核會生成一個對應的輸出通道。
  • 示例解釋:若將 out_channels 設置為 16,意味著卷積層會使用 16 個不同的卷積核來對輸入特征圖進行卷積操作,最終會輸出 16 個通道的特征圖。在網絡的不同層中,out_channels 的值通常會根據網絡的設計和任務需求進行調整,例如在更深的層中可能會增加 out_channels 以提取更復雜的特征。
  • 代碼示例
import torch
import torch.nn as nn# 輸出特征圖的通道數為 16
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)

kernel_size

  • 參數含義:該參數定義了卷積核的大小。卷積核是一個二維或三維的矩陣,用于在輸入特征圖上進行滑動并執行卷積操作。kernel_size 可以是一個整數,此時表示卷積核的高度和寬度相等;也可以是一個元組,分別指定卷積核的高度和寬度。
  • 示例解釋:當 kernel_size = 3 時,意味著使用的是一個 3x3 的卷積核;若 kernel_size = (3, 5),則表示卷積核的高度為 3,寬度為 5。不同大小的卷積核可以捕捉不同尺度的特征,較小的卷積核(如 3x3)可以捕捉局部特征,而較大的卷積核(如 7x7)可以捕捉更全局的特征。
  • 代碼示例
import torch
import torch.nn as nn# 使用 3x3 的卷積核
conv_layer_3x3 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)
# 使用 3x5 的卷積核
conv_layer_3x5 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=(3, 5))

stride

  • 參數含義stride 表示卷積核在輸入特征圖上滑動的步長。它控制著卷積操作的抽樣間隔,即卷積核每次移動的像素數。stride 可以是一個整數,也可以是一個元組,分別指定在高度和寬度方向上的步長。
  • 示例解釋:若 stride = 1,卷積核每次在輸入特征圖上移動一個像素;若 stride = 2,則每次移動兩個像素。較大的步長會減少輸出特征圖的尺寸,從而降低計算量,但可能會丟失一些細節信息。例如在圖像分類任務中,適當增大步長可以加快模型的訓練和推理速度。
  • 代碼示例
import torch
import torch.nn as nn# 步長為 2
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=2)

padding

  • 參數含義padding 用于在輸入特征圖的邊界周圍填充值,通常填充 0。它可以控制輸出特征圖的尺寸,避免在卷積過程中由于邊界信息丟失而導致特征圖尺寸過度縮小。padding 可以是一個整數,表示在高度和寬度方向上填充的像素數相同;也可以是一個元組,分別指定在高度和寬度方向上的填充像素數。
  • 示例解釋:當 padding = 1 時,會在輸入特征圖的上下左右各填充一行或一列 0;若 padding = (1, 2),則在高度方向上填充 1 個像素,在寬度方向上填充 2 個像素。通過合理設置 padding,可以使輸出特征圖的尺寸與輸入特征圖的尺寸保持一致或滿足特定的要求。
  • 代碼示例
import torch
import torch.nn as nn# 填充 1 個像素
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)

dilation

  • 參數含義dilation 表示卷積核的膨脹率。它控制著卷積核中元素之間的間距,默認值為 1。dilation 可以是一個整數,也可以是一個元組,分別指定在高度和寬度方向上的膨脹率。
  • 示例解釋:當 dilation = 1 時,卷積核是正常的緊密排列;當 dilation = 2 時,卷積核中的元素之間會有一個像素的間距。膨脹卷積可以在不增加卷積核參數數量的情況下,增大卷積核的感受野,從而捕捉更廣泛的特征信息。在語義分割任務中,膨脹卷積常用于擴大模型對上下文信息的感知能力。
  • 代碼示例
import torch
import torch.nn as nn# 膨脹率為 2
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, dilation=2)

4. 卷積層總結

卷積層類名(torch.nn 中)用途參數解釋
一維卷積nn.Conv1d主要用于處理一維序列數據,如音頻信號、時間序列等。在音頻處理中,可以將音頻的波形信號作為輸入,通過一維卷積提取不同時間步的特征。
  • in_channels:輸入數據的通道數。例如音頻單聲道時為 1,立體聲為 2。
  • out_channels:輸出的通道數,即卷積核的數量。
  • kernel_size:卷積核的大小,是一個整數。
  • stride:卷積核在輸入數據上滑動的步長,默認值為 1。
  • padding:在輸入數據邊界填充的數量,默認值為 0。
二維卷積nn.Conv2d廣泛應用于處理二維圖像數據,如圖像分類、目標檢測、語義分割等任務。通過二維卷積可以提取圖像中的邊緣、紋理等特征。
  • in_channels:輸入圖像的通道數,如 RGB 圖像為 3。
  • out_channels:輸出特征圖的數量,即卷積核的數量。
  • kernel_size:卷積核的大小,可以是整數或元組,如 3(3, 3)
  • stride:卷積核在輸入圖像上滑動的步長。
  • padding:在圖像邊界填充的像素數。
三維卷積nn.Conv3d適用于處理三維數據,如視頻數據(包含時間維度)、醫學影像(如 CT 掃描數據)等。在視頻分析中,可提取視頻在時間和空間上的特征。
  • in_channels:輸入數據的通道數。
  • out_channels:輸出的通道數。
  • kernel_size:卷積核的大小,可以是整數或三維元組,如 3(3, 3, 3)
  • stride:卷積核在三個維度上的滑動步長。
  • padding:在三個維度邊界填充的數量。
轉置卷積(反卷積)nn.ConvTranspose2d常用于將低分辨率的特征圖上采樣為高分辨率的特征圖,在圖像生成、語義分割等任務中經常使用。例如在圖像生成網絡中,將隨機噪聲通過轉置卷積逐步生成高分辨率的圖像。
  • in_channels:輸入特征圖的通道數。
  • out_channels:輸出特征圖的通道數。
  • kernel_size:卷積核的大小。
  • stride:卷積核在輸入特征圖上的步長。
  • padding:輸入特征圖邊界填充的數量。
  • output_padding:輸出特征圖額外增加的尺寸。
分組卷積nn.Conv2d(使用 groups 參數)將輸入通道和輸出通道分別分成若干組,每組獨立進行卷積操作,最后將結果拼接起來。可以減少模型的參數數量,提高計算效率。在一些輕量級的神經網絡中經常使用。
  • 除了常規的 in_channelsout_channelskernel_size 等參數外,groups 參數指定分組的數量,要求 in_channelsout_channels 都能被 groups 整除。

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

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

相關文章

Rust簡潔控制流:if let與let else高效編程指南

文章目錄Rust簡潔控制流:if let與let else高效編程指南🎯 if let:專注單一匹配場景💡 if let核心優勢:🔄 if let與else搭配使用🚀 let else:錯誤處理與提前返回💎 let el…

upload-labs靶場通關詳解:第19關 條件競爭(二)

一、分析源代碼//index.php // 初始化變量:標記上傳狀態和錯誤消息 $is_upload false; $msg null;// 檢查是否通過POST方式提交了表單 if (isset($_POST[submit])) {// 引入自定義上傳類require_once("./myupload.php");// 生成基于時間戳的文件名&…

一天兩道力扣(3)

解法一:class Solution(object):def invertTree(self, root):if not root:return Noneroot.left, root.right root.right, root.leftself.invertTree(root.right)self.invertTree(root.left)return root解析:遞歸解法二:class Solution(obje…

jenkins2025安裝、插件、郵箱發送使用

Tips:卸載從新安裝(需要在C盤線先刪除.jenkins文件),然后換個默認瀏覽器從新安裝推薦的插件(不然安裝插件這一步會報錯,連接不到jenkins) 一、jenkins安裝 訪問jenkins官網:https://www.jenkins.io/download/ 雙擊war包開始下載…

vue中通過tabs 切換 時 顯示不同的echarts 特殊處理

需要進行特殊處理 比如強制 進行resize 的方法 不然 大小顯示會出現問題我先把全部的代碼弄上<script setup lang"ts"> import { ref, onMounted, onBeforeUnmount, nextTick } from vue import { useRoute } from vue-router import { message } from ant-des…

淺度解讀-(未完成版)淺層神經網絡-深層神經網絡

文章目錄淺層神經網絡的前向傳播計算流程矩陣在運算時形狀的變化激活函數的作用為什么要有激活函數反向傳播深層神經網絡參數超參數參數初始化初始化權重的值選擇淺層神經網絡的前向傳播 計算流程 #mermaid-svg-tMPs4IUCtqxvhJ24 {font-family:"trebuchet ms",verda…

【vben3源碼解讀】【useEcharts】【VueUse】詳解useEcharts這個hooks的作用與相關庫的使用(VueUse)

源代碼 import type { EChartsOption } from echarts;import type { Ref } from vue;import type { Nullable } from vben/types;import type EchartsUI from ./echarts-ui.vue;import { computed, nextTick, watch } from vue;import { usePreferences } from vben/preference…

報錯 400 和405解決方案

今天出了好多這個錯誤&#xff0c;Uncaught (in promise) AxiosError {message: Request failed with status code 400 , name: AxiosError , code: ERR_BAD_REQUEST , config: {…}, request: XMLHttpRequest, …}反正就是前后端的參數不匹配&#xff0c;要不就是請求方式不…

Java源碼的前端編譯

Java源碼的前端編譯 歡迎來到我的博客&#xff1a;TWind的博客 我的CSDN:&#xff1a;Thanwind-CSDN博客 我的掘金&#xff1a;Thanwinde 的個人主頁 0.前言 當一份Java代碼寫好時&#xff0c;將其進行編譯&#xff0c;運行&#xff0c;并不是簡單把這個Java源碼從頭到尾執行…

JWT6報錯誤 kid empty unable to lookup correct key

JWT5和jwt6在加密和解密和時候還明些區別的 &#xff0c;在5中&#xff0c;是不需要這個kid的&#xff0c;加解都不需要。但6中是需要這個keyId。 所以在使用的時候要做個區別&#xff0c;參考下面鏈接&#xff1a; ThinkPhp5.0.24 JWT報錯 ‘“kid“ empty, unable to lookup…

高效學習之一篇搞定分布式管理系統Git !

一、Git是什么1&#xff0e;Git是目前世界上最先進的分布式版本管理系統 2&#xff0e;工作原理/流程workspace&#xff1a;工作區 Index/Stage&#xff1a;暫存區 Repository&#xff1a;倉庫區&#xff08;本地倉庫&#xff09; Remote&#xff1a;遠程倉庫二、SVN和Git的最主…

AdsPower API 新增查詢環境 Cookies 接口,自動化更進一步!

你是不是有過這樣的經歷&#xff1f;賬號在 AdsPower 環境中已經成功登錄&#xff0c;但你還要花時間手動導出 Cookies、再整理處理&#xff0c;過程繁瑣、效率低下。 現在&#xff0c;我們上線了 API 查詢環境 Cookies 的接口&#xff0c;支持通過 API 直接獲取已登錄環境的 …

Craftium游戲引擎中的客戶端同步機制解析

Craftium游戲引擎中的客戶端同步機制解析 craftium A framework for creating rich, 3D, Minecraft-like single and multi-agent environments for AI research based on Minetest 項目地址: https://gitcode.com/gh_mirrors/cr/craftium 游戲狀態同步的核心問題 在分…

spring cloud負載均衡之FeignBlockingLoadBalancerClient、BlockingLoadBalancerClient

本文主要分析被 FeignClient 注解的接口類請求過程中負載均衡邏輯&#xff0c;流程分析使用的源碼版本信息如下&#xff1a;<spring-boot.version>3.2.1</spring-boot.version><spring-cloud.version>2023.0.0</spring-cloud.version>背景 平常我們代碼…

提示工程(Prompt Engineering)研究進展

提示工程(Prompt Engineering)研究進展 以及它如何幫助大語言模型(LLMs)和視覺語言模型(VLMs)更好地工作。用簡單的話說,就是通過設計巧妙的“提示”(比如指令、例子),讓模型在不修改內部參數的情況下,更精準地完成各種任務,比如回答問題、推理、生成內容等。 文檔…

【ARM】AI開發板A7處理器JTAG實現指南

一、文檔背景盡管開發板原廠提供了相關文檔&#xff0c;但可能缺乏對 A7 處理器 JTAG 功能的詳細說明。這可能會導致以下問題&#xff1a;開發人員難以理解和利用 A7 處理器的基本功能&#xff0c;阻礙調試和開發進度。在進行Uboot移植過程中&#xff0c;無法應用圖形界面的調試…

FPGA(一)Quartus II 13.1及modelsim與modelsim-altera安裝教程及可能遇到的相關問題

零.前言 在學習FPGA課程時&#xff0c;感覺學校機房電腦用起來不是很方便&#xff0c;想著在自己電腦上下載一個Quartus II 來進行 基于 vhdl 語言的FPGA開發。原以為是一件很簡單的事情&#xff0c;沒想到搜了全網文章發現幾乎沒有一個完整且詳細的流程教學安裝&#xff08;也…

軟考(軟件設計師)存儲管理—存儲空間管理,文件共享保護

一、文件存取方法 1. 順序存取&#xff08;Sequential Access&#xff09; 原理&#xff1a;按記錄寫入順序依次訪問特點&#xff1a; 讀操作&#xff1a;讀取當前位置&#xff0c;指針自動前移寫操作&#xff1a;追加到文件末尾 適用場景&#xff1a;磁帶設備、日志文件 #merm…

Thinkphp6中如何將macro方法集成到Request類中

在學習crmeb的時候發現他使用了一個macro的方法用在中間件中&#xff0c;于對macro進行了簡單的研究&#xff0c;發現這個方法可以在中間件中進行定義一些方法&#xff0c;然后讓后面的控制器進行使用。 如&#xff1a; 在授權的中間件中&#xff0c;定義了$request->macro…

Java List 使用詳解:從入門到精通

一、List 基礎概念1.1 什么是 List&#xff1f;List 就像是一個智能書架&#xff1a;可以按順序存放書籍&#xff08;元素&#xff09;每本書都有固定位置&#xff08;索引&#xff09;可以隨時添加、取出或重新排列書籍// 創建一個書架&#xff08;List&#xff09; List<S…