初識卷積神經網絡CNN

卷積神經網絡CNN

全連接神經網絡存在的問題:

  • 輸入的形式應該是列向量,但是卷積神經網絡中的輸入是圖像(2D矩陣),那么就需要對圖片進行展平處理,原本圖像中蘊含的空間等信息就被打亂了
  • 輸入的特征多了,那么神經元的參數就會很多,層的結構就很復雜,容易過擬合

通道數

通道數 是指圖像或特征圖在深度方向上的維度數量(可以類比全連接神經網絡中的特征矩陣的x_i的特征數)

例如:

  • 灰度圖只有一個通道(特征):亮度
  • RGB圖像:3個通道(紅,綠,藍)
  • RGBA圖像:4個通道(紅,綠,藍,透明度)

圖像在計算機中的本質

一個大的數值矩陣,每個元素代表像素的亮度或顏色

對于灰度圖(只有黑白兩色):255表示亮白,0表示黑,只有一個通道

image-20250720152235550

對于彩色圖像

三通道圖

image-20250720153053484

整體結構

image-20250720154104648

卷積層

還是與手寫數字為例;在密集層中,每個神經元都可以獲取到整個的像素矩陣;而在卷積層中,我們讓神經元只能獲取到一部分像素而不是全部,這個特性被稱為局部感知

局部感知的優點
  • 計算更快(輸入的矩陣更小,那么對于神經元來說,參數的數量大大減小)
  • 需要更少的訓練數據,更不容易過擬合(參數減少,模型復雜度降低,就不容易過擬合)

卷積層會改變通道的數目,在前一層的輸入提取出不同的特征,同時會改變圖片的長和寬

卷積核/濾波器

定義:一個在圖像上滑動的小窗口,它與圖像的局部區域進行點積運算,從而提取出該區域的特征。其實可以類比全連接神經網絡的參數w,只不過它是共享的

卷積核是一個4D張量,形狀為(C_out,C_in,K,K)

  • C_out:輸出通道數/卷積核數量
  • C_in:輸入通道數
  • K:卷積核大小(K×K)

案例:心電圖信號分類

image-20250720120256155

池化層

池化層可以改變圖像的大小,但不改變通道數

卷積運算

image-20250720162847525

對應位置相乘再相加

帶偏置的計算過程

image-20250720163246832

權重共享

對于全連接神經網絡,輸入中的每個特征都對應著一個神經元中的一個參數

而對于卷積神經網絡并非這樣

卷積神經網絡中,是同一個卷積核在整個輸入圖像上滑動,對所有局部區域使用相同權重參數

  • 卷積核的參數在整個圖像上是共享的
  • 不同位置的局部區域都使用這個相同的卷積核做卷積操作
  • 每個位置的輸出是該卷積核與對應局部區域的點積結果

填充

為了控制卷積后輸出的特征圖尺寸;在輸入特征圖周圍填充0

image-20250721110521320

步幅

指卷積核一次移動幾格;能夠控制輸出特征圖的大小

eg:步幅為1

image-20250721111455305

步幅為2

image-20250721111709373

卷積運算后特征圖大小

輸出特征圖的高OH=H+2P?FHS+1 輸出特征圖的高OH=\frac{H+2P-FH}{S}+1 輸出特征圖的高OH=SH+2P?FH?+1

  • H:輸入特征圖的高
  • P:填充的寬度(多了幾圈)
  • FH:卷積核的高
  • S:步幅

OW=W+2P?FWS+1 OW = \frac{W+2P-FW}{S}+1 OW=SW+2P?FW?+1

  • W:輸入特征圖的寬
  • P:填充的寬度(多了幾圈)
  • FW:卷積核的寬
  • S:步幅

多通道卷積運算

特征圖有n通道,卷積核就有n通道

image-20250721152357448

將每個通道的卷積結構相加;有n個卷積核,輸出特征圖通道數就為n

image-20250721152823648

對于多通道卷積運算,我們可以用立體圖表示

  • C:輸入通道數
  • W:輸入特征圖的寬度
  • H:輸入特征圖的高度
  • FW:卷積核寬度
  • FH:卷積核高度
  • FN:輸出通道數/輸出的特征圖數/卷積核數量

池化運算

池化運算是按通道獨立運算的,即池化層運算不會對輸入特征圖的通道進行改變

池化核

類比卷積運算,我們也可以引入池化核這一概念

與卷積核相同和區別:

  • 相同點:都是在特征圖上滑動的窗口,并提取信息
  • 不同:池化核僅僅是告訴算法要在特征圖什么區域提取一塊多大的特征,對這塊特征取最大值或者平均,而不是和自身進行點積

最大池化運算

image-20250721155433414

每次在區域中找到最大值

平均池化運算

image-20250721155621383

區域內的值相加求平均

優點

  • 對微小的位置變化具有魯棒性,使模型更加健壯

    image-20250721160001357

輸出尺寸

OH=H+2P?FHS+1OW=W+2P?FWS+1 OH=\frac{H+2P-FH}{S}+1 \\ OW = \frac{W+2P-FW}{S}+1 OH=SH+2P?FH?+1OW=SW+2P?FW?+1

  • H,W:輸入特征圖的高、寬
  • P:填充的寬度(多了幾圈)
  • FH,FW:池化核的高、寬
  • S:步幅

代碼實現

模擬mnist手寫數字識別

全部代碼

import numpy as np
import tensorflow as tf
from keras.optimizers import Adam
from tensorflow.keras import models, layers, activations# 獲取mnist手寫數字數據集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()# 維度改成4維,適配卷積層的輸入格式     (60000, 28, 28)->(60000, 28, 28, 1)
x_train = x_train[:, :, :, np.newaxis].astype(float)
x_test = x_test[:, :, :, np.newaxis].astype(float)model = models.Sequential([layers.Conv2D(32,  # 卷積核數量(4, 4),  # 卷積核尺寸activation=activations.relu,  # 經過該層后使用的激活函數,為了引入非線性特征input_shape=(28, 28, 1)  # 與mnist特征的shape相同),layers.MaxPool2D((3, 3)  # 池化核大小),layers.Conv2D(64,  # 卷積核數量(4, 4),  # 卷積核尺寸activation=activations.relu,  # 經過該層后使用的激活函數,為了引入非線性特征),layers.MaxPool2D((3, 3)  # 池化核大小),# 將2D展平為1D才能傳入全連接層layers.Flatten(),# 全連接層layers.Dense(units=64,activation=activations.relu),# 輸出層layers.Dense(units=10,activation=activations.linear)
])model.compile(loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),  # 稀疏交叉熵損失函數optimizer=Adam()  # adam優化
)model.fit(x_train,y_train,epochs=5,validation_split=0.1  # 每次從訓練集中劃分10%作為驗證集
)# 前向傳播值
logits = model(x_train)
y_train_pred = tf.nn.softmax(logits)
print(y_train_pred)# 評估模型
loss = model.evaluate(x_test, y_test)
print(loss)

詳解:

用到的庫

import numpy as np
import tensorflow as tf
from keras.optimizers import Adam
from tensorflow.keras import models, layers, activations

獲取數據集并進行初步處理

# 獲取mnist手寫數字數據集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()# 維度改成4維,適配卷積層的輸入格式     (60000, 28, 28)->(60000, 28, 28, 1)
x_train = x_train[:, :, :, np.newaxis].astype(float)
x_test = x_test[:, :, :, np.newaxis].astype(float)

卷積層,使用tensorflow.keras.layers.Conv2D()

        layers.Conv2D(32,  # 卷積核數量(4, 4),  # 卷積核尺寸activation=activations.relu,  # 經過該層后使用的激活函數,為了引入非線性特征input_shape=(28, 28, 1)  # 與mnist特征的shape相同),

池化層,使用tensorflow.keras.layers.MaxPool2D() (最大池化運算)

        layers.MaxPool2D((3, 3)  # 池化核大小),

整體結構

model = models.Sequential([layers.Conv2D(32,  # 卷積核數量(4, 4),  # 卷積核尺寸activation=activations.relu,  # 經過該層后使用的激活函數,為了引入非線性特征input_shape=(28, 28, 1)  # 與mnist特征的shape相同),layers.MaxPool2D((3, 3)  # 池化核大小),layers.Conv2D(64,  # 卷積核數量(4, 4),  # 卷積核尺寸activation=activations.relu,  # 經過該層后使用的激活函數,為了引入非線性特征),layers.MaxPool2D((3, 3)  # 池化核大小),# 將2D展平為1D才能傳入全連接層layers.Flatten(),# 全連接層layers.Dense(units=64,activation=activations.relu),# 輸出層layers.Dense(units=10,activation=activations.linear)
])

編譯模型

model.compile(loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),  # 稀疏交叉熵損失函數optimizer=Adam()  # adam優化
)

訓練模型

model.fit(x_train,y_train,epochs=5,validation_split=0.1  # 每次從訓練集中劃分10%作為驗證集
)

獲取最終損失函數值

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

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

相關文章

高層功能架構詳解 - openExo

高層功能架構詳解1. 系統整體結構與模塊化設計2. 兩大核心類:ExoData 與 ExoA. ExoDataB. ExoC. 數據結構的層級關系3. 多微控制器協作與BLE通信4. 主控軟件運行流程(主循環偽代碼)5. 架構優點小結6. 與 Code Structure 的關系實用建議1. 系統…

【西北工業大學公開課】導引系統原理(全61講)周軍 -個人筆記版 5000字

【嚴正聲明】此文檔為個人筆記:僅供個人與同學參考學習,記錄學習過程,嚴謹商業轉載,或商業售賣!感謝西北工業大學公開課知識分享,公開資料開源!視頻鏈接:【【西北工業大學】導引系統…

《命令行參數與環境變量:從使用到原理的全方位解析》

前言 當我們在終端輸入 ls -l /home 查看目錄詳情,或用 gcc -o hello hello.c 編譯代碼時,或許很少思考:這些空格分隔的 “指令 選項 路徑” 是如何被程序識別的?為什么 PATH 變量能讓系統找到可執行文件,而 HOME 變…

C++設計模式:單例模式 (現代C++主流實現方式Meyer‘s Singleton + 使用CRTP模板化)

文章目錄單例模式創建單例類餓漢式or懶漢式現代C單例模式的主流實現方式——Meyers Singleton使用 CRTP 模板化單例類單例模式 單例模式是指程序中只需要一個實例化對象,在全局作用域或整個代碼架構中,此對象只被實例化一次,就可以達到在整個…

Eureka 和 Nacos

一、基本介紹EurekaEureka 是 Netflix 公司開發的一款基于 REST 風格的服務注冊與發現組件,專為分布式系統設計。它遵循 AP 原則(可用性、分區容錯性優先),強調在網絡分區等異常情況下的服務可用性,是 Spring Cloud Ne…

文件IO筆試題

目錄前言一、核心概念:二、關鍵操作步驟:三、為什么需要文件IO?四、常見類型:五、標準IO源碼六、筆試真題和練習1.代碼實現1代碼實現22.代碼實現3.代碼實現4.代碼實現5.代碼實現七、總結前言 文件IO(文件輸入/輸出&am…

前端學習 5:DFT

DFT技術 DFT (design for testability):指在設計系統和電路的同時,考慮測試的需求,通過增加一定的硬件開銷,獲得最大可測性的設計過程。(因為增加了硬件,所以也帶來了不足&#xff…

最長遞增子序列(LIS)問題詳解

最長遞增子序列LIS問題詳解一、問題定義與核心特征1.1 問題描述1.2 核心特征二、基礎解法:動態規劃(DP)2.1 解法思路2.2 Java代碼實現2.3 復雜度分析三、優化解法:二分查找貪心3.1 核心思路3.2 二分查找的作用3.3 Java代碼實現代碼…

什么是HTTP長連接、短連接?誰更能抗DoS攻擊?

想象你在快餐店點餐: 你:“一個漢堡”收銀員:“好的,15元”交易結束,你離開隊伍你想加杯可樂,重新排隊你:“一杯可樂”收銀員:“好的,8元”再次離開… 這種每次溝通后立即…

微軟徽標認證是什么?如何快速獲取驅動簽名?

在Windows系統中安裝硬件驅動時,是否遇到過“無法驗證發布者”的警告?這正是驅動數字簽名在背后發揮作用。對于軟件開發者而言,驅動數字簽名不僅是系統兼容性的保障,更是企業品牌信任度的核心。一、驅動數字簽名的核心作用驅動數字…

Apache Ignite緩存基本操作

這段內容主要講解了 Apache Ignite 中緩存(IgniteCache)的基本操作,包括獲取緩存、創建緩存、銷毀緩存、執行原子操作以及異步操作等。下面我將用中文對這些內容進行詳細解釋,幫助你更好地理解。一、獲取緩存實例(Gett…

最新基于R語言結構方程模型分析與實踐技術應用

現代統計學理論和方法的不斷完善,使科研工作對統計方法的要求也越來越高,面對紛繁復雜的數據,如何選擇最為合適的數據分析方法已成為科研工作者,尤其是廣大剛處于科研生涯起步階段的研究生們最為棘手問題。隨著科學的發展&#xf…

物聯網_TDengine_EMQX_性能測試

一、Tdengine接口開發文檔 1、數據庫 1.創建數據庫 URL /dp/createdb/ method post 請求示例 {"db_name":"demo01" // 必填 }響應示例 // 成功 {"code": 1,"data": {"成功創建數據庫": "demo04"},"error…

從分析到優化:Amazon Q CLI 助力 EKS 網絡調用鏈剖析與運維實踐

1. 引言 在 Amazon EKS(Elastic Kubernetes Service)環境中,理解從 ALB(Application Load Balancer)到 Pod 的完整網絡調用鏈對運維人員至關重要。本文將展示如何利用 Amazon Q CLI 這一 AI 助手工具,通過…

Class10簡潔實現

Class10簡潔實現 import torch from torch import nn from d2l import torch as d2l# 輸入為28*28,輸出為10類,第1、2隱藏層256神經元 num_inputs, num_outputs, num_hiddens1, num_hiddens2 784, 10, 256, 256 # 第1個隱藏層丟棄率為0.2,第…

【多線程篇22】:ConcurrentHashMap的并發安全原理剖析

文章目錄一、HashMap 的“不安全”:問題的根源1. 數據結構回顧 (JDK 1.8)2. 并發下的致命缺陷:put 操作二、ConcurrentHashMap 的安全之道 (JDK 1.8)1. 核心數據結構2. 安全的 put 操作:分場景精細化加鎖3. 安全的 size() 計算:并…

【Java + Vue 實現圖片上傳后 導出圖片及Excel 并壓縮為zip壓縮包】

系統環境: Java JDK:1.8.0_202 Node.js:v12.2.0 Npm:6.9.0 Java后端實現 Controller /*** xxxx-導出* param response 返回信息體* param files 上傳的圖片文件* param param1 參數1* param param2 參數2*/PostMapping("/ex…

安科瑞:能源微電網助力工業園區“綠色”發展

朱以真近日,廈門市工業和信息化局印發工業園區綠色智慧微電網建設,擬開展全市工業園區綠色智慧微電網試點通知,那么對于如何實現綠色園區的建設是今天的話題。對工業園區綠色智慧微電網建設需求,其核心價值體現在“源-網-荷-儲-充…

VUE2 學習筆記3 v-on、事件修飾符、鍵盤事件

事件處理v-on用于事件交互。語法:v-on:要綁定的事件“事件觸發時執行的函數” (函數這里可以寫括號,也可以不寫,沒有影響)簡寫::事件觸發時要執行的函數,在Vue配置參數中,通過method…

變換域通訊系統CCSK的matlab仿真

CCSK(Cyclic Code Shift Keying)通信系統的MATLAB仿真。實現完整的CCSK調制、AWGN信道傳輸和解調過程,并計算了誤碼率(BER)。 % CCSK通信系統仿真 clear; clc; close all;% 參數設置 L 31; % m序列…