計算機視覺CS231n學習(4)

深度學習軟件

(這一部分去看tensorflow和pytorch的筆記)
(見專欄)

  1. tensorflow和pytorch區別

    tensorflow,我們先構建顯示的圖,然后重復運行它

    pytorch,我們每次做前向傳播時,都構建一個新的圖

卷積神經網絡CNN 結構
  1. LeNet-5

    比較經典的用于數字識別的cnn

    from torch import nn
    import torch
    from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Tanhclass LeNet(nn.Module):def __init__(self):super(LeNet,self).__init__()self.model1 = nn.Sequential(#input:32x32x1#conv1:28x28x6Conv2d(1, 6, 5, 1, 0),Tanh(),#poo1:14x14x6MaxPool2d(2, 2),#conv2:10x10x16Conv2d(6,16,5,1,0),Tanh(),#poo2:5x5x16MaxPool2d(2,2),Flatten(),Linear(400,120),Tanh(),Linear(120,84),Tanh(),Linear(84,10))def forward(self,x):x = self.model1(x)return xlenet = LeNet()
    
  2. AlexNet

    很小的計算量,但是耗費存儲也很多,比較低的acc

    但是,實際上AlexNet 的輸入圖片尺寸為 224×224(這里是227×227)

    import torch
    from torch import nn
    from torch.nn import Flatten, Linearclass AlexNet(nn.Module):def __init__(self):super(AlexNet,self).__init__()self.model1 = nn.Sequential(#input:227x227x3#conv1:55x55x96nn.Conv2d(3,96,11,4,0),#pool1:27x27x96nn.MaxPool2d(3,2),nn.ReLU(),#conv2:27x27x256nn.Conv2d(96,256,5,1,2),#pool2:13x13x256nn.MaxPool2d(3,2),nn.ReLU(),#conv3:13x13x384nn.Conv2d(256,384,3,1,1),#conv4:13x13x384nn.Conv2d(384,384,3,1,1),#conv5:13x13x256nn.Conv2d(384,256,3,1,1),#pool3:6x6x256nn.MaxPool2d(3,2),nn.Flatten(),#9216=6x6x256nn.Linear(9216,4096),nn.Linear(4096,1000),nn.Linear(1000,10))def forward(self,x):x = self.model1(x)return xalexnet = AlexNet()
    
  3. ZFNet

    注意:計算輸出圖尺寸是下取整(輸入尺寸-卷積核尺寸+2*padding)/stride + 1

    import torch
    from torch import nnclass ZFNet(nn.Module):def __init__(self):super(ZFNet,self).__init__()self.model1 = nn.Sequential(#input:224x224x3#conv1:110x110x96nn.Conv2d(3,96,7,2,1),#pool1:55x55x96nn.MaxPool2d(3,2),#conv2:26x26x256nn.Conv2d(96,256,5,2,0),#pool2:13x13x256nn.MaxPool2d(3,2),#conv3:13x13x384nn.Conv2d(256,384,3,1,1),#conv4:13x13x384nn.Conv2d(384,384,3,1,1),#conv5:13x13x256nn.Conv2d(384,256,3,1,1),#pool5:6x6x256nn.MaxPool2d(3,2),nn.Flatten(),#6*6*256nn.Linear(6*6*256,4096),nn.Linear(4096,4096),nn.Linear(4096,1000))def forward(self,x):x = self.model1(x)return xzfnet = ZFNet()
    
  4. VGGNet

    耗費最高的存儲,最多的操作

    import torch
    from torch import nnclass VGG16Net(nn.Module):def __init__(self):super(VGG16Net,self).__init__()self.model1 = nn.Sequential(#input:224x224x3nn.Conv2d(3,64,3,1,1),nn.Conv2d(64,64,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(64,128,3,1,1),nn.Conv2d(128,128,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(128,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.Conv2d(256,256,3,1,1),nn.MaxPool2d(2,2),nn.Conv2d(256,512,3,1,1),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.MaxPool2d(2,2),nn.Conv2d(512,512,3,1,1),nn.Conv2d(512, 512, 3, 1, 1),nn.Conv2d(512, 512, 3, 1, 1),nn.MaxPool2d(2,2),nn.Flatten(),nn.Linear(7*7*512,4096),nn.Linear(4096,4096),nn.Linear(4096,1000))def forward(self,x):x = self.model1(x)return xvgg16 = VGG16Net()
    
  5. GoogLeNet

    最高效

    efficient Inception module:設計一個良好的本地網絡拓撲結構(網絡中的網絡)然后將這些模塊堆疊在彼此之上

    沒有全連接層

    對來自前一層的輸入應用并行filter操作

    但是這樣就會計算的很復雜,解決辦法:采用1x1卷積來降低特征深度的“瓶頸”層

    四個并行分支:1x1 卷積、1x1→3x3 卷積、1x1→5x5 卷積、3x3 池化→1x1 卷積實現:

    class Inception(nn.Module):"""Inception模塊:并行處理不同尺度的特征"""def __init__(self, in_channels, c1, c2, c3, c4):super(Inception, self).__init__()# 分支1:1x1卷積(降維或保持維度)self.branch1 = nn.Sequential(Conv2d(in_channels, c1, kernel_size=1),BatchNorm2d(c1),ReLU(inplace=True))# 分支2:1x1卷積(降維)-> 3x3卷積self.branch2 = nn.Sequential(Conv2d(in_channels, c2[0], kernel_size=1),BatchNorm2d(c2[0]),ReLU(inplace=True),Conv2d(c2[0], c2[1], kernel_size=3, padding=1),BatchNorm2d(c2[1]),ReLU(inplace=True))# 分支3:1x1卷積(降維)-> 5x5卷積self.branch3 = nn.Sequential(Conv2d(in_channels, c3[0], kernel_size=1),BatchNorm2d(c3[0]),ReLU(inplace=True),Conv2d(c3[0], c3[1], kernel_size=5, padding=2),BatchNorm2d(c3[1]),ReLU(inplace=True))# 分支4:3x3池化 -> 1x1卷積(降維)self.branch4 = nn.Sequential(MaxPool2d(kernel_size=3, stride=1, padding=1),  # 保持尺寸的池化Conv2d(in_channels, c4, kernel_size=1),BatchNorm2d(c4),ReLU(inplace=True))def forward(self, x):# 四個分支的輸出在通道維度拼接b1 = self.branch1(x)b2 = self.branch2(x)b3 = self.branch3(x)b4 = self.branch4(x)return torch.cat([b1, b2, b3, b4], dim=1)  # dim=1表示通道維度拼接
    
  6. ResNet

    模型效率中等,準確度最高

    使用殘差連接的非常深的網絡(152層)

    在這里插入圖片描述

    這是ResNet(殘差網絡)中最基礎的 殘差塊(Residual Block) 結構示意圖,用來解決深度神經網絡訓練時的梯度消失、模型難以收斂問題,核心是 “殘差連接(跳躍連接)”設計。

    下面拆解每個部分:

    1. 基礎流程(從下往上看)

      • 輸入 X: 代表網絡某一層的輸入特征(比如是圖像經過前面卷積后的特征圖,包含空間維度和通道維度)。
      • 主路徑(計算 F(X)): - 先過一個 3x3 conv(3×3 卷積層),接著 relu(ReLU 激活函數),再過第二個 3x3 conv。這一系列操作對輸入 X 做特征變換,輸出 F(X)F 表示“殘差函數”,學習輸入與輸出的殘差關系 )。
      • 殘差連接(X 直接跳連): 輸入 X 不經過主路徑的卷積,直接“抄近道”加到主路徑輸出上(圖里的 是逐元素相加,要求 XF(X) 維度匹配 )。
      • 前向傳播:因為這個分支僅進行簡單的恒等映射或少量維度調整操作,計算量小,傳播速度更快,雖然X跳連和主路徑并行啟動計算,但是完成時間有差異,最終會在加法操作處等待最慢的分支完成后再繼續傳播。
      • 反向傳播:在殘差塊反向傳播過程中,來自后續層的梯度到達 (F(x) + x) 的加法操作位置時,會按照加法求導規則,同時分配到 “identity” 分支和 (F(x)) 分支。雖然 identity 分支的梯度計算簡單,可能先傳播到前面的層,但前面的層等待的是兩個分支的梯度都傳播過來后進行融合。只有當 (F(x)) 分支的梯度也傳播過來后,將兩個分支的梯度相加,得到總的梯度,才會用于對前面層的參數更新 。
      • 輸出(F(X)+Xrelu): 相加后的結果 F(X)+X 再經過一個 relu,作為整個殘差塊的最終輸出,傳遞給下一層。
    2. 核心設計意義

      殘差連接 - 解決梯度消失:傳統深層網絡訓練時,梯度回傳易衰減。殘差連接讓梯度能“走捷徑”直接反向傳播,讓深層網絡更易訓練。

      學習殘差更高效:網絡不直接學“從 X 到最終輸出”的復雜映射,而是學“殘差 F(X) = 最終輸出 - X”。殘差通常更簡單,模型收斂更快、更穩定。

  7. 其他的一些CNN結構

    1. Network in Network (NiN)

      帶有“微網絡”的Mlpconv層,在每個卷積層內部計算局部圖像塊,更高層次的特征抽象

      微網絡采用多層感知機(全連接層,即1x1卷積層)
      作為GoogLeNet和ResNet “瓶頸層”的前身

    2. Identity Mappings in Deep Residual Networks

    3. Wide Residual Networks

    4. Aggregated Residual Transformations for Deep Neural Networks (ResNeXt)

    5. Deep Networks with Stochastic Depth

    6. FractalNet: Ultra-Deep Neural Networks without Residuals
      采用分形結構設計

    7. Densely Connected Convolutional Networks
      DenseNet:通過特征拼接增強層間連接

    8. SqueezeNet: AlexNet-level Accuracy With 50x Fewer Parameters and <0.5Mb Model Size

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

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

相關文章

【具身智能】具身智能的革命——人形機器人如何重塑人類日常生活

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 2025年被譽為具身智能的元年,人形機器人技術迅猛發展,將深刻改變人類生活方式。本文從具身智能的核心概念入手,探討人形機器人的硬件架構、感知系統、運動控制和決策算法等技術基礎。結合…

Jira Service Management企業服務管理:IT、HR、法務、財務等部門如何落地現代企業服務管理理念與實踐

Jira Service Management 服務管理方法Jira Service Management 服務管理方法將開發、IT運營和業務團隊整合至一個統一平臺&#xff0c;以實現更高效的協作。任何團隊都能夠快速響應業務變化&#xff0c;為客戶和員工提供卓越體驗。Jira Service Management 提供直觀、經濟高效…

軟件開發 - danger 與 dangerous、warn 與 warning

danger 與 dangerous 1、danger詞性&#xff1a;n.含義&#xff1a;指可能造成傷害或損失的情況或事物# 例詞in 【danger】&#xff08;處于危險中&#xff09; out of 【danger】&#xff08;脫離危險&#xff09;# 例句After the surgery, the doctor said the patient was o…

為何毫米波需要采用不同的DPD方法?如何量化其值?

摘要 在5G新無線電技術標準中&#xff0c;除了sub-6 GHz頻率外&#xff0c;還利用毫米波(mmWave)頻率來提高吞吐量。毫米波頻率的使用為大幅提高數據吞吐量帶來了獨特的機會&#xff0c;同時也帶來了新的實施挑戰。本文探討sub-6 GHz和毫米波基站無線電之間的架構差異&#xff…

【數據結構入門】棧和隊列的OJ題

目錄 1. 有效的括號 分析&#xff1a; 代碼&#xff1a; 2. 用隊列實現棧 分析&#xff1a; 代碼&#xff1a; 3. 用棧實現隊列 分析&#xff1a; 代碼&#xff1a; 4. 設計循環隊列 思路&#xff1a; 代碼&#xff1a; 定義循環隊列結構體&#xff1a; 初始化結…

#Datawhale AI夏令營#第三期全球AI攻防挑戰賽(AIGC技術-圖像方向)

本次題目來源于Datawhale AI夏令營第三期全球AI攻防挑戰賽圖像生成賽道。首先看一下賽題背景和要求。1.賽題相關大賽背景隨著大模型&#xff08;Deepseek、GPT、LLaMA等&#xff09;的爆發式應用&#xff0c;AI技術已深度融入金融、醫療、智能終端語音交互場等核心領域&#xf…

Compose筆記(四十二)--RangeSlider

這一節主要了解一下Compose中的RangeSlider&#xff0c;在Jetpack Compose中&#xff0c;RangeSlider是Material3庫提供的雙滑塊范圍選擇控件&#xff0c;用于在一個連續區間內選擇最小值和最大值。它能直觀地設置一個區間范圍&#xff0c;廣泛應用于篩選、過濾等場景,簡單總結…

window10本地運行datax與datax-web

搭建 dataX 前置條件 JDK(1.8以上&#xff0c;推薦1.8)Python(2或3都可以)Apache Maven 3.x (Compile DataX) 下載 datax 編譯好的包 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz 進入目錄&#xff0c;使用 powershell 打開 執行解壓命令…

PDF注釋的加載和保存的實現

PDF注釋功能文檔 概述 本文檔詳細說明了PDF注釋功能的實現&#xff0c;包括注釋的加載和保存功能。該功能基于Android PDFBox庫實現&#xff0c;支持Ink類型注釋的讀取和寫入。 功能模塊 1. 注釋加載功能 (getAnnotation()) 功能描述 從PDF文件中加載已存在的注釋&#xff0c;并…

Linux環境下實現簡單TCP通信(c)

具體代碼實現 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define PORT 8080 #define BUFFER_SIZE 1024void handle_client(int client_s…

炫酷圓形按鈕調色器

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>圓形按鈕顏色控制器</title><style>bod…

Vue 3 的編譯時優化如何改寫 DOM 操作規則

在現代前端開發中&#xff0c;框架級優化正悄然改變我們處理性能瓶頸的方式。與手動優化策略不同&#xff0c;Vue 3 的編譯器在構建階段就完成了關鍵性能改造&#xff0c;為 DOM 操作效率帶來質的飛躍。一、虛擬DOM的隱藏成本虛擬DOM&#xff08;Virtual DOM&#xff09;通過內…

Angular初學者入門第二課——.ts、.d.ts、.state.ts的區別(精品)

初次接觸 Angular 實際項目時&#xff0c;發現里邊有很多不同后綴的文件&#xff0c;雖然沒深入研究過&#xff0c;但根據其他編程語言的經驗猜測這應該是通過后綴名來區分文件的作用。后來有時間研究了一下具體的細節和不同點&#xff0c;就有了今天這篇文章&#xff0c;這些知…

進程狀態+進程優先級+進程上下文切換解讀

一、進程狀態 什么是進程狀態&#xff1f;進程狀態指的是在操作系統中進程在生命周期中所處的不同階段。進程狀態有哪些呢&#xff1f;我們可以看到上述圖片 進程狀態分為&#xff1a;創建狀態、就緒狀態、運行狀態、阻塞狀態和終止狀態所有的操作系統在實現進程狀態變化的時候…

Android 原生與 Flutter 通信完整實現 (Kotlin 版)

1. 項目配置 pubspec.yaml 添加依賴 dependencies:flutter:sdk: flutterprovider: ^6.0.52. Flutter 端實現 狀態管理類 // settings_provider.dart import package:flutter/foundation.dart;class SettingsProvider with ChangeNotifier {String _themeColor blue;bool _dark…

數字圖像處理3

圖像線性濾波——目的就是濾去噪聲&#xff0c;但是邊緣會模糊&#xff0c;整體也模糊線性&#xff1a;鄰域平均法&#xff08;4鄰域平均和8鄰域平均&#xff09;用當前運算點所在鄰域的平均值來代替該點的平均值im_for_read"D:\AAAproject\PYproject\EXPERuse\zaosheng.j…

Linux發行版分類與Centos替代品

讓centos7氣的不輕&#xff0c;這玩意兒太老了&#xff0c;什么都不好配置。 目錄Linux 發行版的大致分類1. Red Hat 系列&#xff08;RPM 系&#xff09;2. Debian 系列&#xff08;DEB 系&#xff09;3. Arch 系列4. SUSE 系列CentOS 7 的替代品推薦AlmaLinux 和 Rocky Linux…

大語言模型提示工程與應用:大語言模型對抗性提示安全防御指南

對抗性提示工程 學習目標 理解大語言模型中對抗性提示的風險與防御機制&#xff0c;掌握提示注入、提示泄露和越獄攻擊的檢測方法&#xff0c;培養安全防護意識。 相關知識點 對抗性攻擊類型防御技術 學習內容 1 對抗性攻擊類型 1.1 提示注入 提示注入旨在通過使用巧妙…

避不開的數據拷貝(2)

接著上周未完的話題 避不開的數據拷貝。 既然處理器是通用機器&#xff0c;就沒有專屬數據&#xff0c;所以數據都要從別處調來&#xff0c;這就涉及到了數據搬運&#xff0c;就有了外設的概念。由于不同外設和處理器一起共享數據存儲&#xff0c;時間會花在兩方面&#xff1a…

娃哈哈經銷商“大洗牌”:砍掉年銷300萬以下經銷商

文 | 大力財經據第一財經報道&#xff0c;娃哈哈在宗馥莉“鐵腕”策略推動下&#xff0c;正經歷經銷商體系的重大變革&#xff0c;陸續砍掉年銷低于300萬元的經銷商&#xff0c;方式有時頗為激進&#xff0c;“一刀切”的做法引發諸多爭議&#xff0c;部分經銷商反饋存在款項未…