卷積神經網絡實戰(2)

接上一篇文章,說到模型定義:

class CNN(nn.Module):def __init__(self, activation="relu"):super(CNN, self).__init__()self.activation = F.relu if activation == "relu" else F.selu#輸入通道數,圖片是灰度圖,所以是1,圖片是彩色圖,就是3,輸出通道數,就是卷積核的個數(32,1,28,28)#輸入x(32,1,28,28) 輸出x(32,32,28,28)self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)#輸入x(32,32,28,28) 輸出x(32,32,28,28)self.conv2 = nn.Conv2d(in_channels=32, out_channels=32, kernel_size=3, padding=1)self.pool = nn.MaxPool2d(2, 2) #池化不能夠改變通道數,池化核大小為2(2*2),步長為2  (28-2)//2+1=14self.conv3 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1)self.conv4 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, padding=1)self.conv5 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1)self.conv6 = nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, padding=1)self.flatten = nn.Flatten()# input shape is (28, 28, 1) so the fc1 layer in_features is 128 * 3 * 3self.fc1 = nn.Linear(128 * 3 * 3, 128)self.fc2 = nn.Linear(128, 10) #輸出尺寸(32,10)self.init_weights()def init_weights(self):"""使用 xavier 均勻分布來初始化全連接層、卷積層的權重 W"""for m in self.modules():if isinstance(m, (nn.Linear, nn.Conv2d)):nn.init.xavier_uniform_(m.weight)nn.init.zeros_(m.bias)def forward(self, x):act = self.activationx = self.pool(act(self.conv2(act(self.conv1(x))))) # 1 * 28 * 28 -> 32 * 14 * 14# print(x.shape)x = self.pool(act(self.conv4(act(self.conv3(x))))) # 32 * 14 * 14 -> 64 * 7 * 7# print(x.shape)x = self.pool(act(self.conv6(act(self.conv5(x))))) # 64 * 7 * 7 -> 128 * 3 * 3# print(x.shape)x = self.flatten(x) # 128 * 3 * 3 ->1152x = act(self.fc1(x)) # 1152 -> 128x = self.fc2(x) # 128 -> 10return xfor idx, (key, value) in enumerate(CNN().named_parameters()):print(f"{key}\tparamerters num: {np.prod(value.shape)}") # 打印模型的參數信息

一開始conv1,第一層卷積層,去運算的時候,以前全連接的時候直接展平,現在是三維的,通道數是1(黑白照片),卷積的時候卷積核也是(1,3,3),但現在卷積核的尺寸實際上是立方體,雖然寫的是2d,這是接口的這么一個設計,之所以是2d是因為在兩個維度上進行移動(上下左右),不像以前的全連接是一維的必須展平。

in_channels=1就是通道數,必須和圖像的通道數是一樣的也就是x(32,1,28,28)的第二個數。

kernel_size=3就代表3*3的大小,其實也可以寫成一個元組(3,3)。

out_channels就是輸出,輸出是32就是有32個卷積核。網絡初始化時,每個卷積核的權重矩陣會通過特定分布(如Xavier均勻分布)獨立隨機初始化。

padding=1就是補一圈0的意思。

tips:如果一張圖片不是方形,一開始就會使用圖片增強技術把圖片變成方形。

對于第二層卷積層,卷積核是(32,3,3),這層的輸入和輸出的大小一樣,作用是提取高層特征。

每層卷積后一次激活函數,兩層卷積后做一層池化。

池化層:nn.MaxPool2d(2,2),前面一個2代表池化核大小是2*2,后面的2代表步長。池化一次把圖像尺寸減半。尺寸計算公式:

到后面圖像尺寸變為128*3*3時,圖像尺寸已經很小了,根據視野域,這你每一個像素就相當于把整個圖看了一遍,這個時候展平,有1152個像素,相當于從這么多角度學習了圖像信息,這個時候對它進行分類然后降為128再降為10最后是十分類,這樣每一個batchsize就得到10個值,哪個值最大就是哪一個類別。

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

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

相關文章

方案精讀:業財融合轉型路徑和華為實踐【附全文閱讀】

在當今快速變化、競爭激烈的時代,業務面臨不確定性,業財融合至關重要。以華為為例,其從財務到財經的轉型,歷經財務四統一變革、IFS 變革等,構建了包含財經能力中心(COE)、業務伙伴(BP)和財經共享中心(SSC)的財務組織架構 。通過實現財務四算拉通、提升預算預測、項目…

GAF-CNN-SSA-LSSVM故障診斷/分類預測,附帶模型研究報告(Matlab)

GAF-CNN-SSA-LSSVM故障診斷/分類預測,附帶模型研究報告(Matlab) 目錄 GAF-CNN-SSA-LSSVM故障診斷/分類預測,附帶模型研究報告(Matlab)效果一覽基本描述程序設計參考資料 效果一覽 基本描述 本研究提出的GA…

新型深度神經網絡架構:ENet模型

語義分割技術能夠為圖像中的每個像素分配一個類別標簽,這對于理解圖像內容和在復雜場景中找到目標對象至關重要。在自動駕駛和增強現實等應用中,實時性是一個硬性要求,因此設計能夠快速運行的卷積神經網絡非常關鍵。 盡管深度卷積神經網絡&am…

基于DGI框架的最佳實踐

基于DGI框架的核心邏輯和搜索結果中的實踐案例,以下是最精簡的5步實施路徑推薦: 1. 明確治理目標與范圍(Why & What) 聚焦核心問題:優先選擇1-2個業務痛點(如數據質量低下、主數據混亂、合規風險&…

使用Prometheus監控網站是否正常打開

要使用普羅米修斯監控你的網站主頁 http://gyq.com/,可以通過以下步驟實現。普羅米修斯本身并不直接支持 HTTP 狀態碼的監控,但可以通過 Blackbox Exporter 來完成這項任務。 方案概述 Blackbox Exporter 是一個普羅米修斯官方提供的工具,用…

基于YOLOv8與LSKNet的遙感圖像旋轉目標檢測新框架 —LSKblock注意力機制在小目標檢測中的性能優化與SOTA探索

針對遙感圖像中目標尺度差異大、方向任意性強、背景復雜度高等挑戰,本文提出一種基于 YOLOv8 與 LSKNet 的新型旋轉目標檢測框架。通過引入 LSKblock 注意力機制 ,實現對多尺度特征的有效建模與動態感受野調整,顯著提升了模型對小目標與旋轉目標的識別能力。 1. 引言 隨著遙…

JVM——JVM 是如何處理異常的?

JVM 是如何處理異常的? 在 Java 編程語言中,異常處理是一種強大的機制,用于應對程序運行時出現的錯誤和意外情況。而 Java 虛擬機(JVM)作為 Java 程序運行的核心環境,在異常處理過程中扮演著至關重要的角色…

MYSQL三大日志、隔離級別(MVCC+鎖機制實現)

MySQL三大日志 ?Undo Log(回滾日志) 作用 事務回滾時恢復數據到修改前的狀態。 支持 ??MVCC??,為讀操作提供歷史版本數據。 存儲 存放在 undo tablespace 中,通過回滾段管理。 格式 undo log 格式都有一個 roll_point…

訪問計劃(C++)

題目描述 Farmer John 計劃建造 N(1≤N≤10^5)個農場,用 N?1 條道路連接,構成一棵樹(也就是說,所有農場之間都互相可以到達,并且沒有環)。每個農場有一頭奶牛,品種為更…

時間同步服務

時間同步:多主機協作工作時,各個主機的時間同步很重要,時間不一致會造成很多重要應用的故障,如:加密協議,日志,集群等,利用NTP(Network Time Protocol )協議使網絡中的各個計算機 時間達到同步。目前NTP協議…

Cordova開發自定義插件的方法

Cordova開發自定義插件的方法 文章目錄 Cordova開發自定義插件的方法[TOC](文章目錄) 一、自定義插件二、android下的自定義插件開發(一)步驟1、建立cordova工程2、建立自定義插件(1) 安裝plugman(2) 用plu…

【libm】2整數接口(int_traits.rs)

一、源碼 int_traits.rs文件定義了兩個核心 trait MinInt 和 Int,為整數類型提供統一的抽象接口,并通過宏為所有原生整數類型(i8 ~ i128/u8 ~ u128)實現這些 trait。 use core::{cmp, fmt, ops};/// Minimal integer implementa…

WebSocket實戰經驗

WebSocket實戰經驗詳解 WebSocket基礎概念 #mermaid-svg-sdkZP4UrWBpk2Hco {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sdkZP4UrWBpk2Hco .error-icon{fill:#552222;}#mermaid-svg-sdkZP4UrWBpk2Hco .error-tex…

【C/C++】MQTT

文章目錄 MQTT 協議1 基本概念2 核心特性3 核心組件4 C 簡易實現(基于 Paho MQTT 庫)環境準備示例代碼 不同mqtt對比關鍵差異說明 MQTT 協議 1 基本概念 MQTT(Message Queuing Telemetry Transport)是一種輕量級的發布/訂閱模式…

《Java 高并發程序設計》筆記

💡 根據 遺忘曲線:如果沒有記錄和回顧,6天后便會忘記75%的內容 讀書筆記正是幫助你記錄和回顧的工具,不必拘泥于形式,其核心是:記錄、翻看、思考 ::: 書名Java 高并發程序設計作者葛一鳴、郭超狀態已讀完簡…

Fine Structure-Aware Sampling(AAAI 2024)論文筆記和啟發

文章目錄 本文解決的問題本文提出的方法以及啟發 本文解決的問題 傳統的基于Pifu的人體三維重建一般通過采樣來進行學習。一般選擇的采樣方法是空間采樣,具體是在surface的表面隨機位移進行樣本的生成。這里的采樣是同時要在XYZ三個方向上進行。所以這導致了一個問…

【AI面試準備】性能測試與AI模型結合應用指南

面試題: 性能測試:AI模型預測系統瓶頸(如LoadRunnerAI模塊)。 性能測試與AI模型預測系統瓶頸的結合是當前軟件工程和運維領域的重要趨勢,能夠顯著提升系統優化效率和問題預測能力。以下從核心概念、技術實現、快速掌握…

Spring MVC 與 FreeMarker 整合

以下是 Spring MVC 與 FreeMarker 整合的詳細步驟&#xff0c;包含配置和代碼示例&#xff1a; 1. 添加依賴 在 pom.xml 中引入 Spring MVC 和 FreeMarker 的依賴&#xff08;以 Maven 為例&#xff09;&#xff1a; <!-- Spring Web MVC --> <dependency><gr…

Redis分布式鎖使用以及對接支付寶,paypal,strip跨境支付

本章重點在于如何使用redis的分布式鎖來鎖定庫存。減少超賣&#xff0c;同時也對接了支付寶&#xff0c;paypal&#xff0c;strip跨境支付 第一步先建立一個商品表 CREATE TABLE sys_product (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵,code varchar(60) DEFAUL…

使用frpc鏈接內網的mysql

以下是配置 frpc 連接內網 MySQL 服務的詳細步驟&#xff1a; 1. 準備工作 frps 服務器&#xff1a;已部署在公網 IP 11.117.11.245&#xff0c;假設 frps 的默認端口為 7000。 內網 MySQL 服務&#xff1a;運行在內網機器的 3306 端口。 目標&#xff1a;通過公網 IP 11.117…