小土堆pytorch--神經網路-卷積層池化層

神經網路-卷積層&池化層

  • 一級目錄
    • 二級目錄
      • 三級目錄
  • 1. 神經網路-卷積層
  • 2. 神經網路最大池化的應用

一級目錄

二級目錄

三級目錄

1. 神經網路-卷積層

在這里插入圖片描述
在PyTorch中,torch.nn.Conv2d函數定義了一個二維卷積層,其常用參數包括:
in_channels:輸入圖像的通道數,例如RGB圖像為3。
out_channels:經過卷積運算后,輸出特征映射的數量,即卷積核的數量。
kernel_size:卷積核的大小,可以是一個整數或一個元組指定高度和寬度,例如3或(3, 3)。
stride:卷積核在輸入特征圖上滑動的步長,控制輸出特征圖的大小。
padding:在輸入特征圖的邊緣添加的像素數,用于控制輸出特征圖的大小。
dilation:卷積核元素之間的間距,影響卷積核覆蓋的區域大小,也稱為空洞卷積。
groups:分組卷積中的組數,可以減少參數數量和計算量。
bias:布爾值,指定是否添加偏置項,默認為True。
padding_mode:指定填充類型,例如’zeros’、‘reflect’等,默認為’zeros’。
其中前五個參數比較常用,后四個一般使用默認值就可以了
這些在我上一個博客中也有所解釋
在這里插入圖片描述

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#準備測試集
dataset = torchvision.datasets.CIFAR10("./das", train=False, transform=torchvision.transforms.ToTensor(),download = True)dataloader = DataLoader(dataset, batch_size=64)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self, x):x = self.conv1(x)return xtest = Test()
print(test)
writer = SummaryWriter("logs")
step = 0
for data in dataloader:imgs, targets = dataoutput = test(imgs)# print(output.shape)writer.add_images("input",imgs, step)writer.add_images("output", output, step)step = step + 1

如果運行上述代碼的話會發現這樣的報錯
在這里插入圖片描述
就是通道數不符造成的,因此我們可以使用reshape操作

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter#準備測試集
dataset = torchvision.datasets.CIFAR10("./das", train=False, transform=torchvision.transforms.ToTensor(),download = True)dataloader = DataLoader(dataset, batch_size=64)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self, x):x = self.conv1(x)return xtest = Test()
print(test)
writer = SummaryWriter("logs")
step = 0
for data in dataloader:imgs, targets = dataoutput = test(imgs)# print(output.shape)writer.add_images("input",imgs, step)output = torch.reshape(output, (-1,3,30,30)) # 根據錯誤提示進行修改writer.add_images("output", output, step)step = step + 1

請添加圖片描述
我們來看一下size的變化
input[64,3,32,32]
output[64,6,30,30]–(經過reshape)–>[xxx, 3, 30,30]

我們在pytorch官網上面可以找到input/output的形狀的計算方法
在這里插入圖片描述
input[64,3,32,32]
output[64,6,30,30]
在這里插入圖片描述
利用上述公式確實得到了output的Hout,Wout為30

2. 神經網路最大池化的應用

在這里插入圖片描述

在PyTorch中,torch.nn.MaxPool2d是一個二維最大池化層,用于對輸入信號進行下采樣。以下是該操作的主要參數及其作用:

  1. kernel_size:池化窗口的大小,可以是單個整數或兩個整數的元組,分別指定高度和寬度。

  2. stride:池化窗口滑動的步長,控制輸出特征圖的大小。可以是單個整數或兩個整數的元組,分別對應高度和寬度。默認值為kernel_size

  3. padding:在輸入特征圖的邊緣添加的零填充的數量,用于控制輸出特征圖的大小。可以是單個整數或兩個整數的元組,分別對應高度和寬度。默認值為0。

  4. dilation:控制池化窗口中元素之間的間距,影響池化窗口覆蓋的區域大小。可以是單個整數或兩個整數的元組,分別對應高度和寬度。默認值為1。

  5. return_indices:如果設置為True,則會返回每個最大值的索引,這在后續使用torch.nn.MaxUnpool2d時非常有用。默認值為False。

  6. ceil_mode:當設置為True時,輸出形狀的計算會使用向上取整而不是向下取整。默認值為False。

這些參數共同決定了池化操作的行為和輸出特征圖的大小。例如,kernel_sizestride決定了池化窗口的大小和移動步長,而paddingdilation則影響輸出特征圖的大小和池化窗口的覆蓋范圍。通過合理設置這些參數,可以在保持重要特征的同時減小數據的空間維度,從而降低計算復雜度。

在這里插入圖片描述
圖片展示了一個5x5的輸入圖像經過最大池化操作后的結果。使用的池化核大小為3x3,并且kernel_size參數被設置為3。最大池化操作在圖像處理中用于降低特征的空間維度,同時保留最重要的特征信息。

圖片中還展示了兩種不同情況下池化操作的結果,分別是ceil_mode=Trueceil_mode=False(默認值)。當ceil_mode=True時,池化窗口被允許越界,即如果窗口起始于左側填充或輸入區域,則窗口可以超出邊界,而起始于右側填充區域的窗口將被忽略。這會導致輸出特征圖的尺寸可能與默認情況下不同。

ceil_mode=False時,輸出特征圖的大小是向下取整計算得到的。而當ceil_mode=True時,輸出特征圖的大小是向上取整計算得到的。這種設置對于輸出特征圖的尺寸有影響,尤其是在輸入特征圖的尺寸不能被池化窗口整除的情況下。

然后我們可以編寫代碼驗證一下

import torch
from torch import nn
from torch.nn import MaxPool2dinput = torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]], dtype = torch.float32)
input = torch.reshape(input, (-1,1,5,5))
print(input.shape)class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.maxpool1 = MaxPool2d(3, ceil_mode=True)def forward(self, input):output = self.maxpool1(input)return outputtest = Test()
output = test(input)
print(output)

運行結果是:
在這里插入圖片描述

然后我們可以更改ceil_mode

class Test(nn.Module):def __init__(self):super(Test, self).__init__()self.maxpool1 = MaxPool2d(3, ceil_mode=False) # 更改ceil_modedef forward(self, input):output = self.maxpool1(input)return output

運行結果是:
在這里插入圖片描述
在tensorboard中打開
請添加圖片描述
在這里插入圖片描述
池化操作不會減少圖片數量,但會通過下采樣減小圖片尺寸,從而降低后續層的計算量和參數數量。

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

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

相關文章

C++顯式聲明explicit

C顯示聲明explicit 在 C 中,explicit 關鍵字用于修飾單參數構造函數或多參數構造函數(C11 起),其核心作用是禁止編譯器的隱式類型轉換。 一、必須加 explicit 的典型場景 1. 單參數構造函數 當構造函數只有一個參數時&#xff…

【springboot】HttpClient快速入門

介紹 HttpClient 是Apache Jakarta Common 下的子項目,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,并且它支持 HTTP 協議最新的版本和建議 就是我們可以在java程序中使用HttpClient構造http請求,還可以發送h…

安全版4.5.8開啟審計后,hac+讀寫分離主備切換異常

文章目錄 環境BUG/漏洞編碼癥狀觸發條件解決方案 環境 系統平臺:UOS (飛騰) 版本:4.5.8 BUG/漏洞編碼 3043 癥狀 BUG安裝包: hgdb-see-4.5.8-db43858.aarch64.rpm 異常:hac集群一主兩備環境&#xff…

企業級 Go 多版本環境部署指南-Ubuntu CentOS Rocky全兼容實踐20250520

🛠? 企業級 Go 多版本環境部署指南-Ubuntu / CentOS / Rocky 全兼容實踐 兼顧 多版本管理、安全合規、最小權限原則與 CI/CD 可復現性,本指南以 Go 官方 toolchain 為主,結合 asdf 實現跨語言統一管理,并剔除已過時的 GVM。支持 …

Linux 的 TCP 網絡編程 -- 回顯服務器,翻譯服務器

目錄 1. 相關函數介紹 1.1 listen() 1.2 accept() 1.3 connect() 2. TCP 回顯服務器 2.1 Common.hpp 2.2 InetAddr.hpp 2.3 TcpClient.cc 2.4 TcpServer.hpp 2.5 TcpServer.cc 2.6 demo 測試 3. TCP 翻譯服務器 3.1 demo 測試 1. 相關函數介紹 其中一些函數在之前…

Unity3D仿星露谷物語開發46之種植/砍伐橡樹

1、目標 種植一棵橡樹,從種子變成大樹。 然后可以使用斧頭砍伐橡樹。 2、刪除totalGrowthDays字段 修改growthDays的含義,定義每個值為到達當前階段的累加天數。此時最后一個階段就是totalGrowthDays的含義。所以就可以刪除totalGrowthDays字段。 &…

容器化-K8s-鏡像倉庫使用和應用

一、K8s 鏡像倉庫使用 1、啟動鏡像倉庫 cd/usr/local/harbor ./install.sh2、配置鏡像倉庫地址 在 master 節點和 slaver 節點上,需要配置 Docker 的鏡像倉庫地址,以便能夠訪問本地的鏡像倉庫。編輯 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在則創建),添…

塔式服務器都有哪些重要功能?

塔式服務器作為一種擁有著獨特立式設計的服務器,能夠幫助企業節省一定的放置空間,提供一系列的功能和優勢,可以運用在多種應用場景當中,下面將探討一下塔式服務器的主要功能都有哪些? 塔式服務器可以支持基本的應用程序…

2025年- H36-Lc144 --739. 每日溫度(單調棧)--Java版

1.題目描述 2.思路 (1)單調棧維護單調遞增或者單調遞減的數列 (2)因為要求找到當前元素 右邊區域,第一個比當前元素大的元素,所以取單調增數量。 (3)單調棧存儲元素的索引。如果遇到…

架構選擇/區別

目錄 一、分層架構(Layered Architecture) 二、微服務架構(Microservices Architecture) 三、分布式架構(Distributed Architecture) 四、單體架構(Monolithic Architecture) 五…

Python----循環神經網絡(WordEmbedding詞嵌入)

一、編碼 當我們用數字來讓電腦“認識”字符或單詞時,最簡單的方法是為每個字符或單詞分配一個唯一的編號,然后用一個長長的向量來表示它。比如,假設“我”這個字在字典中的編號是第10個,那么它的表示就是一個很多0組成的向量&…

深入解析Spring Boot與微服務架構:從入門到實踐

深入解析Spring Boot與微服務架構:從入門到實踐 引言 隨著云計算和分布式系統的快速發展,微服務架構已成為現代軟件開發的主流模式。Spring Boot作為Java生態中最受歡迎的框架之一,為開發者提供了快速構建微服務的強大工具。本文將深入探討…

DeepSeek 賦能數字孿生:重構虛實共生的智能未來圖景

目錄 一、數字孿生技術概述1.1 數字孿生的概念1.2 技術原理剖析1.3 應用領域與價值 二、DeepSeek 技術解讀2.1 DeepSeek 的技術亮點2.2 與其他模型的對比優勢 三、DeepSeek 賦能數字孿生3.1 高精度建模助力3.2 實時數據處理與分析3.3 智能分析與預測 四、實際案例解析4.1 垃圾焚…

Amazon Q 從入門到精通 – 測試與重構

Amazon Q Developer 是亞馬遜推出的一個專為專業開發人員設計的人工智能助手,旨在提升代碼開發和管理效率。其主要功能包括代碼生成、調試、故障排除和安全漏洞掃描,提供一站式代碼服務。 眾所周知,在軟件開發領域,測試代碼是軟件…

專題五:floodfill算法(圖像渲染深度優先遍歷解析與實現)

以leetcode733題為例 題目解析: 給一個初始坐標(sr,sc)比如示例中的粉色的1,如果周圍上下左右都是1,就是連通塊(性質相同的地方),把它涂上顏色(2&#xff09…

在金融發展領域,嵌入式主板有什么優點?

在金融發展領域,嵌入式主板能夠有力推動金融行業的智能化與高效化進程。主板的強大計算能力可以保障業務高效運行。例如在銀行的高頻交易場景下,其強大計算能力可確保系統在高負荷下依然保持流暢穩定,快速響應用戶需求,大大提升金…

《Python星球日記》 第94天:走近自動化訓練平臺

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、自動化訓練平臺簡介1. Kubeflow Pipelines2. TensorFlow Extended (TFX)二、自動化訓練流程1. 數據預處理2. 模型訓練3. 評估與部署三、構建…

PHP、JAVA、Shiro反序列化

目錄 一、PHP反序列化 二、JAVA反序列化 三、Shiro反序列化 Shiro-550 反序列化漏洞原理 Shiro-721 反序列化漏洞原理 Padding Oracle 漏洞補充: 防御措施: 一、PHP反序列化 主要是分為有類和無類: 1、有類:就有相關的魔術…

AM32電調學習解讀六:main.c文件的函數介紹

最近在學習AM32電調的2.18版本的源碼,我用的硬件是AT32F421,整理了部分流程處理,內容的顆粒度是按自己的需要整理的,發出來給有需要的人參考。按自己的理解整理的,技術能力有限,可能理解有誤,歡…

WebSocket實時雙向通信:從基礎到實戰

一、WebSocket 基礎概念 1. 什么是 WebSocket? 雙向通信協議:與 HTTP 的單向請求不同,WebSocket 支持服務端和客戶端實時雙向通信。 低延遲:適用于聊天室、實時數據推送、在線游戲等場景。 協議標識:ws://&#xff…