深度學習:PyTorch卷積神經網絡分享(1)

本文目錄:

  • 一、CNN概述
  • 二、CNN日常應用
  • 三、CNN的卷積層
    • (一 )基本介紹
    • (二)卷積層計算
      • 1.對輸入數據的要求
      • 2.卷積核核心參數
      • 3.計算過程
      • 4.特征圖尺寸計算
      • 5.1、多通道卷積計算
      • 5.2、多卷積核計算
      • 6.PyTorch卷積層API

前言:上篇文章講解了圖像,這篇文章正式進入卷積神經網絡講解。

一、CNN概述

卷積神經網絡(Convolutional Neural Network, CNN)是一種專門用于處理網格狀數據(如圖像、視頻、語音信號等)的深度學習模型。其核心思想是通過局部感受野、權值共享和空間下采樣來高效提取特征,廣泛應用于計算機視覺、自然語言處理(如文本分類)等領域。

CNN網絡主要由三部分構成:卷積層、池化層和全連接層構成:

(1)卷積層負責提取圖像中的局部特征;

(2)池化層用來大幅降低參數量級(降維);

(3)全連接層類似人工神經網絡的部分,用來輸出想要的結果。

CNN實踐案例:
在這里插入圖片描述
上圖中CNN要做的事情就是:給定一張圖片,是車還是馬未知,是什么車也未知,現在需要模型判斷這張圖片里具體是一個什么東西,總之輸出一個結果:如果是車,那是什么車?

二、CNN日常應用

圖像分類:最常見的應用,例如識別圖片中的物體類別;

目標檢測:檢測圖像中物體的位置和類別;

圖像分割:將圖像分成多個區域,用于語義分割;

人臉識別:識別圖像中的人臉;

醫學圖像分析:用于檢測醫學圖像中的異常(如癌癥檢測、骨折檢測等);

自動駕駛:用于識別交通標志、車輛、行人等。

三、CNN的卷積層

(一 )基本介紹

卷積層是CNN的核心組件,用于提取輸入數據(如圖像、語音、文本)的局部特征。它的核心思想是通過局部連接、權值共享和平移不變性高效處理網格狀數據(如像素矩陣)。

卷積層利用卷積核(濾波器)對輸入進行處理(卷積操作),從而生成特征圖(feature map),并且每個卷積層能夠提取不同層次的特征,從低級特征(如邊緣)到高級特征(如物體的形狀)。

卷積層的主要作用如下:

  • 特征提取:卷積層的主要作用是從輸入圖像中提取低級特征(如邊緣、角點、紋理等)。通過多個卷積層的堆疊,網絡能夠逐漸從低級特征到高級特征(如物體的形狀、區域等)進行學習;

  • 權重共享:在卷積層中,同一個卷積核在整個輸入圖像上共享權重,這使得卷積層的參數數量大大減少,減少了計算量并提高了訓練效率;

  • 局部連接:卷積層中的每個神經元僅與輸入圖像的一個小局部區域相連,這稱為局部感受野,這種局部連接方式更符合圖像的空間結構,有助于捕捉圖像中的局部特征;

  • 空間不變性:由于卷積操作是局部的并且采用權重共享,卷積層在處理圖像時具有平移不變性。也就是說,不論物體出現在圖像的哪個位置,卷積層都能有效地檢測到這些物體的特征。

(二)卷積層計算

1.對輸入數據的要求

在這里插入圖片描述

2.卷積核核心參數

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3.計算過程

在這里插入圖片描述
1. input 表示輸入的圖像;

2. filter 表示卷積核, 也叫做濾波器(濾波矩陣)

  • 一組固定的權重,因為每個神經元的多個權重固定,所以又可以看做一個恒定的濾波器filter;
  • 非嚴格意義上來講,下圖中紅框框起來的部分便可以理解為一個濾波器,即帶著一組固定權重的神經元,多個濾波器疊加便成了卷積層;
  • 一個卷積核就是一個神經元。
    在這里插入圖片描述
    卷積運算本質上就是在濾波器和輸入數據的局部區域間做點積。

如上圖左上角的點計算:
在這里插入圖片描述
按照上面的計算方法可以得到最終的特征圖為:
在這里插入圖片描述
實圖-特征圖對比:
在這里插入圖片描述
注意:如果想要提取更多特征(比如花朵的顏色深淺、輪廓、紋理),可以用多個卷積核(分別提取花朵的顏色深淺、輪廓、紋理,生成不同的特征圖)。

4.特征圖尺寸計算

在這里插入圖片描述
注意:

在這里插入圖片描述

5.1、多通道卷積計算

在這里插入圖片描述
如上圖,計算方法如下:

  1. 當輸入有多個通道(Channel), 例如 RGB 三個通道, 此時要求卷積核需要擁有相同的通道數(圖像有多少通道,每個卷積核就有多少通道);
  2. 每個卷積核通道與對應的輸入圖像的各個通道進行卷積;
  3. 將每個通道的卷積結果按位相加得到最終的特征圖。

如下圖所示:

在這里插入圖片描述

5.2、多卷積核計算

在卷積神經網絡(CNN)中,多個卷積核(Filters/Kernels) 的計算是核心操作之一,它使網絡能夠同時提取多種特征(如邊緣、紋理、顏色等)。

特點:

(1)每個卷積核學習不同的特征:

例如:第一個核可能檢測水平邊緣,第二個核檢測垂直邊緣,第三個核檢測紅色通道的特定模式等。

(2)輸出多通道特征圖:

若有 C_out 個卷積核,輸出特征圖會有 C_out 個通道。

在這里插入圖片描述
如上圖,可以看到:

  • 兩個神經元,意味著有兩個濾波器;
  • 數據窗口每次移動2個步長取3*3的局部數據,即stride=2;
  • zero-padding=1。輸入數據由5*5*3變為7*7*3
  • 左邊是輸入(7*7*3中,7*7代表圖像的像素/長寬,3代表R、G、B 三個顏色通道);
  • 中間部分是兩個不同的濾波器Filter w0、Filter w1;
  • 最右邊則是兩個不同的輸出。

6.PyTorch卷積層API

# 導包
import numpy as np
import matplotlib.pyplot as plt
import torch# 加載數據
n1_img = plt.imread('data/img.jpg')
print(n1_img.shape)
# 把numpy轉換為tensor
t1_img = torch.from_numpy(n1_img)
print(t1_img.shape)
# 交換維度 (H,W,C)->(C,H,W)
t2_img = t1_img.permute(2, 0, 1)
print(t2_img.shape)
# 升維
t3_img = t2_img.unsqueeze(0)
print(t3_img.shape)
# TODO 創建卷積層對象  設置輸出通道數4,意味著輸出的特征圖4
conv = torch.nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3, stride=1, padding=0)
# TODO 調用卷積層對象,提取特征,注意類型轉換
output = conv(t3_img.to(torch.float32))
print(output.shape)
# 降維
output = output.squeeze(0)
print(output.shape)
# 交換維度
output = output.permute(1, 2, 0)
print(output.shape)
# 轉換為numpy TODO 索引0,1,2,3分別可以獲取第0,1,2,3個特征圖
output = output[:, :, 2].detach().numpy()  #2:第三個圖
print(output.shape)
# 畫圖
plt.imshow(output)
plt.show()

運行結果:
在這里插入圖片描述
可依次修改output = output[:, :, 2].detach().numpy() 將其它三個圖顯示出來(將2依次換成0、1、3)。

今日分享到此結束。

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

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

相關文章

Cesium添加3dtiles并平移到指定經緯度

訪問tileset.json,查看root.transform,12,13,14分別代表模型參考原點的地心坐標Cartesian3(x,y,z) let tileset await Cesium.Cesium3DTileset.fromUrl()構造origin_cartesian3new Cesium.Cartesian3(x,y,z) 設置待平移到的位置經緯高為longitude,latitude,height,例如(116,…

STM32G070x 單片機項目代碼解析:基于 HAL 庫的嵌入式系統開發

項目總體架構 該項目采用標準的 STM32 工程結構,主要包含以下幾個部分: 頭文件包含:系統頭文件和用戶自定義頭文件外設句柄定義:SPI、TIM、UART 等外設的句柄聲明用戶自定義變量:LED 控制、按鍵狀態等標志位初始化函數…

winform mvvm

if (!mvvmContext1.IsDesignMode) InitializeBindings(); 這段代碼的意思是:如果當前應用程序不是處于設計模式(即程序正在運行),就調用InitializeBindings方法來初始化視圖與視圖模型之間的綁定。 void Initiali…

防火墻快速管理軟件,66K超小巧

軟件介紹 今天為大家推薦一款輕量級的Windows防火墻管理工具,這款工具能幫助用戶快速開啟或關閉系統防火墻功能,操作比系統原生設置更加便捷高效。 軟件優勢 相比通過系統設置層層點擊的操作方式,這款僅66KB大小的微型工具只需單擊按鈕…

python中的高級變量III

python中的高級變量III 刪除列表元素(list)擴展知識點 name_list ["Mike","John","Alice"] del name_list[1] # 通過del name_list[1]刪除“John” print(name_list) # 輸出 [Mike, Alice]注意:del …

深入理解Redis

深入理解Redis:高性能內存數據庫的核心原理與應用實踐 1. 引言 在現代互聯網應用中,高性能、低延遲的數據訪問是至關重要的。傳統的關系型數據庫(如MySQL)雖然功能強大,但在高并發場景下往往成為性能瓶頸。Redis&…

界面控件DevExpress Blazor中文教程:AI聊天 - 如何實現函數調用?

DevExpress Blazor UI組件使用了C#為Blazor Server和Blazor WebAssembly創建高影響力的用戶體驗,這個UI自建庫提供了一套全面的原生Blazor UI組件(包括Pivot Grid、調度程序、圖表、數據編輯器和報表等)。 現代AI驅動的應用程序需要與外部系…

github 上的php項目

github 上的php項目 項目的網址 (Loong1996/LikeGirlSite: 情侶網站、情侶網頁、戀愛記錄網站) # 修改 # admin/Config_DB.php//localhost 為數據庫地址 一般使用默認的即可 或(127.0.0.1) $db_address "mysql_php";/…

區間求最值問題高效解決方法

對于區間求最值場景,如果區間不定長度的,可以使用稀疏表進行求解,如果區間是固定長度的,則可以使用分塊的思想(與稀疏表原理類似),都是通過壓縮狀態個數, 1 關于稀疏表的原理詳見&a…

Linux程序設計:什么時候選擇開發內核模塊?

最近看一個CPU使用率高的問題,從perf里看,是下面的一個占用的比較多是下面一個 Overhead Source:Line Symbol Shared Object - 8.48% [vdso][1129] 0x1129 B [.] 0x0000000000001129

OpenCV CUDA模塊設備層-----歐幾里得距離函數hypot()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于計算兩個無符號字符向量(uchar1)的歐幾里得距離(即直角三角形的斜邊長度),…

惠普HP LaserJet Pro P1106 打印機信息

基本信息 產品類型:黑白激光打印機。上市時間:2011 年。最大打印幅面:A4。網絡打印:不支持網絡打印。雙面打印:手動雙面打印。 性能參數 打印速度:黑白打印速度(ISO,A4)正…

通義靈碼智能體模式在企業級開發中的應用:以云效DevOps自動化流程為例

一、智能體模式的核心能力 通義靈碼的智能體模式區別于傳統代碼補全工具,具備: 語義級理解:解析業務需求、代碼上下文及錯誤日志。自主任務閉環:從問題診斷→ 代碼生成→ 測試覆蓋→ 文檔生成全流程自動化。環境感知&#xff1a…

SQL學習筆記2

DDL、DML、DQL、DCL基礎語法 1、DDL 查詢 查詢所有數據庫:show databases; show databases; 查詢當前數據庫:select database(); select database(); 數據庫創建 創建數據庫:create database [if not exist(若存在重名數據庫,則不創建…

VScode常用快捷鍵【個人總結】

注:快捷鍵以 Windows/Linux 為主,Mac 用戶將 Ctrl 替換為 Cmd,Alt 替換為 Option。 1. 編輯相關 快速復制與剪切 Alt Shift ↓:復制當前行到下方Alt Shift ↑:復制當前行到上方Ctrl X:剪切整行&…

數據結構與算法:線性表-順序表(順序存儲)

一、線性表的定義(邏輯結構) 線性表是由 n (n > 0) 個相同數據類型的數據元素組成的有限序列,其中 n 為線性表的表長,當 n 0 時,線性表為空表。如果用 L 命名線性表,那么一般表示為:L (a1…

從源碼到實踐:Java集合框架面試核心知識點全解析

在Java開發中,集合框架(Java Collections Framework)是最基礎也最常用的工具集。無論是處理業務邏輯時的數據暫存,還是高性能場景下的算法優化,集合的使用都貫穿始終。因此,Java集合相關的面試題幾乎是所有…

【深度學習新浪潮】空間計算的醫療應用技術分析(簡要版)

空間計算是一種通過融合計算機視覺、傳感器技術與三維渲染,將虛擬內容精準錨定到物理空間,實現數字世界與現實世界無縫交互的技術體系。其核心在于讓計算機理解真實環境的結構、位置和動態,從而支持自然交互(如手勢、語音、眼動)和沉浸式體驗。例如,蘋果Vision Pro通過實…

win電腦沒有xcode怎么上傳ipa

在上架IOS項目的時候,遇到一個問題,如下圖,在app store connect上架的時候,需要選擇一個構建版本,然后它在下方提示,點擊查看上傳工具后,會發現需要下載xcode或mac命令行等工具來上傳編譯后的文…

相機標定與3D重建技術通俗講解

一、什么是相機標定?能解決什么問題? 相機標定是計算機視覺中的基礎技術,簡單來說,就是確定相機從3D世界拍攝到2D圖像時的"轉換規則"。具體解決兩個核心問題: 相機內部屬性:如焦距(…