CNN卷積神經網絡之LeNet和AlexNet經典網絡模型(三)

CNN卷積神經網絡之LeNet和AlexNet經典網絡模型(三)

文章目錄

  • CNN卷積神經網絡之LeNet和AlexNet經典網絡模型(三)
  • 深度學習兩大經典 CNN 模型速覽
    • 1. LeNet-5:CNN 的開山之作(1998)
    • 2. AlexNet:深度學習里程碑(2012)
    • 3. 核心差異對比
    • 4. 可一鍵運行的 PyTorch 實現
      • 4.1 LeNet-5(MNIST)
      • 4.2 AlexNet(ImageNet 簡化版,可在 CIFAR-10 上跑通)
    • 5. 小結 & 面試高頻問答


深度學習兩大經典 CNN 模型速覽

LeNet-5(1998)與 AlexNet(2012)——從 32×32 灰度手寫數字到 224×224 彩色 ImageNet 的跨越


1. LeNet-5:CNN 的開山之作(1998)

1998年Yann LeCun等提出LeNets5 ,是第一個成功應用于手寫數字識別問題并產生實際商業(郵政行業)價值的卷積神經網絡
在這里插入圖片描述

關鍵詞要點
任務MNIST 手寫數字識別
輸入1×32×32 灰度圖
結構7 層:C1(6@28×28) → S2 → C3(16@10×10) → S4 → C5(120@1×1) → F6(84) → Output(10)
卷積核5×5
池化2×2 平均池化
激活Sigmoid(歷史版本)
參數量≈ 60 k
創新首次將 BP-CNN 成功用于商業(USPS 郵編)

整體網絡解讀
在這里插入圖片描述


2. AlexNet:深度學習里程碑(2012)

關鍵詞要點
任務ImageNet 1000 類分類
輸入3×224×224
結構8 層:5 卷積 + 3 全連接
卷積核11×11, 5×5, 3×3
池化3×3 重疊最大池化
激活ReLU(首次大規模使用)
正則Dropout 0.5、數據增強
歸一化LRN(后被 BatchNorm 取代)
訓練2×GTX 580 GPU(3 GB 顯存)
成績Top-5 16.4 % → 15.3 %(7 模型融合)

模型結構:
在這里插入圖片描述


3. 核心差異對比

維度LeNet-5AlexNet
輸入尺寸32×32224×224
網絡深度7 層8 層
激活函數SigmoidReLU
GPU 訓練有(2 GPU 并行)
數據集MNIST(60 k)ImageNet(1.2 M)
參數量60 k60 M

4. 可一鍵運行的 PyTorch 實現

環境:Python≥3.8,PyTorch≥1.12,torchvision

4.1 LeNet-5(MNIST)

# lenet5.py
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as Tclass LeNet5(nn.Module):def __init__(self, num_classes=10):super().__init__()self.features = nn.Sequential(nn.Conv2d(1, 6, 5), nn.Tanh(),        # C1nn.AvgPool2d(2),                      # S2nn.Conv2d(6, 16, 5), nn.Tanh(),       # C3nn.AvgPool2d(2),                      # S4nn.Conv2d(16, 120, 5), nn.Tanh()      # C5)self.classifier = nn.Sequential(nn.Linear(120, 84), nn.Tanh(),        # F6nn.Linear(84, num_classes)            # Output)def forward(self, x):x = self.features(x)x = x.flatten(1)return self.classifier(x)def train_lenet():transform = T.Compose([T.Resize(32), T.ToTensor()])train_ds = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)train_dl = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True)net = LeNet5()opt = optim.Adam(net.parameters(), lr=1e-3)loss_fn = nn.CrossEntropyLoss()for epoch in range(3):for x, y in train_dl:opt.zero_grad()out = net(x)loss = loss_fn(out, y)loss.backward()opt.step()print(f"Epoch {epoch+1} loss={loss.item():.4f}")torch.save(net.state_dict(), 'lenet5.pth')if __name__ == "__main__":train_lenet()

4.2 AlexNet(ImageNet 簡化版,可在 CIFAR-10 上跑通)

# alexnet_cifar.py
import torch, torchvision, torch.nn as nn, torch.optim as optim
from torchvision import transforms as Tclass AlexNet(nn.Module):def __init__(self, num_classes=10):super().__init__()self.features = nn.Sequential(nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2),nn.Conv2d(64, 192, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2),nn.Conv2d(192, 384, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2),)self.classifier = nn.Sequential(nn.Dropout(0.5),nn.Linear(256*4*4, 4096), nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Linear(4096, 4096), nn.ReLU(inplace=True),nn.Linear(4096, num_classes))def forward(self, x):x = self.features(x)x = torch.flatten(x, 1)return self.classifier(x)def train_alexnet():transform = T.Compose([T.Resize(64), T.ToTensor()])train_ds = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)train_dl = torch.utils.data.DataLoader(train_ds, batch_size=128, shuffle=True)net = AlexNet()opt = optim.SGD(net.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4)loss_fn = nn.CrossEntropyLoss()for epoch in range(10):for x, y in train_dl:opt.zero_grad()out = net(x)loss = loss_fn(out, y)loss.backward()opt.step()print(f"Epoch {epoch+1} loss={loss.item():.4f}")torch.save(net.state_dict(), 'alexnet_cifar.pth')if __name__ == "__main__":train_alexnet()

5. 小結 & 面試高頻問答

問題一句話答案
LeNet-5 為何用 5×5?當時算力與感受野權衡下的最優。
AlexNet 為何用 ReLU?解決 Sigmoid 梯度消失,加速 6× 訓練時間。
Dropout 的本質?訓練時隨機“掐掉”神經元,等價于多模型投票,減少過擬合。
LRN 現在還用嗎?基本不用,BatchNorm 更穩定。
兩個網絡最大啟示?更深、更大、更多數據 + GPU并行 是提升性能的核心路線。

1、Dropout:正則化方法,提高模型泛化能力。
在這里插入圖片描述
2、LRN:對于每個神經元,LRN會將其輸出按照局部范圍進行加權平均,然后將加權平均值除以一個尺度因子(通常為2),最后將結果取平方根并減去均值,得到歸一化后的輸出。
在這里插入圖片描述


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

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

相關文章

江協科技STM32 12-2 BKP備份寄存器RTC實時時鐘

這一節我們要講的主要內容是RTC實時時鐘,實時時鐘本質上是一個定時器,但是這個定時器是專門用來產生年月日時分秒,這種日期和時間信息的。所以學會了STM32的RTC就可以在STM32內部擁有一個獨立運行的鐘表。想要記錄或讀取日期和時間&#xff0…

【10】大恒相機SDK C++開發 ——對相機采集的原圖像數據IFrameData裁剪ROI 實時顯示在pictureBox中,3種方法實現(效率不同)

文章目錄1 在回調函數中實現2 獨立封裝調用2.1 獲取圖像寬、高、pBuffer、channel2.2 內存圖像數據截取ROI并顯示2.3 回調函數調用3 for循環嵌套 方法24 for循環嵌套 方法35 按行復制數據提高效率,但很耗內存6 unsafe代碼 解釋及注意事項 看我另一篇文章7 ConvertTo…

ubuntu22.04系統入門 linux入門(二) 簡單命令 多實踐以及相關文件管理命令

以下有免費的4090云主機提供ubuntu22.04系統的其他入門實踐操作 地址:星宇科技 | GPU服務器 高性能云主機 云服務器-登錄 相關兌換碼星宇社區---4090算力卡免費體驗、共享開發社區-CSDN博客 之所以推薦給大家使用,是因為上面的云主機目前是免費使用的…

分布式ID方案(標記)

一、參考文章-標記 分布式ID方案有哪些?雪花算法如何搞定時鐘回撥和動態機器ID? 二、應用 1.百度 uid-generator github項目地址 原理參考 2.百度 uid-generator 擴展應用 燈官網 燈 項目代碼 lamp-util 單元模塊 lamp-util 單元模塊子模塊 lamp-…

std::map 加鎖

在并發環境下使用std::map,必須采取同步措施。 在并發環境下對 std::map 進行不加鎖的讀寫操作會導致嚴重的線程安全問題,主要會產生以下幾種問題: ?? 主要風險與后果數據競爭(Data Race) 當多個線程同時修改同一個鍵…

學習筆記090——Ubuntu 中 UFW 防火墻的使用

文章目錄1、允許特定的端口訪問2、允許特定 IP 訪問某個端口3、允許某個范圍的端口4、查看 UFW 狀態5、重新加載 UFW6、啟用 UFW7、關閉 UFW1、允許特定的端口訪問 # 允許 TCP 端口(例如 80): sudo ufw allow 80/tcp# 允許 UDP 端口&#xf…

移動端 WebView 內存泄漏與性能退化問題如何排查 實戰調試方法匯總

在混合 App 應用中,WebView 頁面常承載復雜業務邏輯與交互。隨著用戶使用時間增長,特別在切換多個頁面或反復打開界面后,常常會出現性能下降、頁面卡頓、甚至白屏崩潰等現象。這通常是因為頁面存在內存泄漏、事件監聽未解綁或垃圾回收阻塞導致…

JSON 對象在瀏覽器中順序與后端接口返回不一致的問題

一、問題描述 后端接口返回一個字典表的JSON對象,頁面展示排序與預期排序不一致。 在瀏覽器調試面板Response中看到接口原始響應字符串,是期望順序:在Preview中看到, key “22” 被提到最前,順序發生變化:頁…

Spring MVC數據傳遞全攻略

Spring MVC數據傳遞一、前端到后端的數據傳遞1. 使用 RequestParam 傳遞簡單參數2. 使用 PathVariable傳遞路徑參數3. 使用RequestBody傳遞 JSON 數據二、后端到前端的數據傳遞1. 使用Model或 ModelAndView傳遞數據到前端2. 使用HttpServletResponse直接寫回數據3.使用Response…

倉庫管理系統-12-前端之頭部區域Header基于嵌套路由訪問個人中心

文章目錄 1 個人中心 1.1 DateUtils.vue(子組件) 1.2 Home.vue(父組件) 1.3 router/index.js(嵌套路由) 1.4 index.vue(路由占位符) 2 Header.vue 2.1 頁面布局 2.2 toUser方法 2.3 初始加載 2.4 Header.vue 頭部區域Header中有一個個人中心下拉菜單,點擊個人中心選項,通過嵌…

【智能協同云圖庫】第七期:基于AI調用阿里云百煉大模型,實現AI圖片編輯功能

摘要:AI 高速發展賦能傳統業務,圖庫網站亦有諸多 AI 應用空間。以 AI 擴圖功?能為例,讓我們來學習如何在項目?中快速接入 AI 繪圖大模型。?用戶可以選擇一張已上傳的圖片,?通過 AI 擴圖得到新的圖片,希望可以幫到大…

Notepad++插件安裝

方式一:自動安裝(有些notepad并不好用,推薦方式二)工具欄-》插件-》插件管理如下點擊安裝后會提示,后端安裝,安裝成功后自動啟動,本人使用的v8.6.4的版本,插件基本都無法自動安裝&am…

git pull和git fetch的區別

git pull和git fetch是git版本控制系統中的兩個基本命令,它們都用于從遠程倉庫更新本地倉庫的信息,但執行的具體操作不同。git fetch:git fetch下載遠程倉庫最新的內容到你的本地倉庫,但它并不自動合并或修改你當前的工作。它取回了遠程倉庫的…

Item35:考慮virtual函數以外的其他選擇

在C++中,虛函數是實現多態的傳統方式,但并非唯一選擇。過度依賴虛函數可能導致派生類與基類的強耦合,或難以在運行時靈活切換行為。《Effective C++》Item35指出:應根據場景選擇更合適的替代方案,包括NVI模式、函數指針、策略模式等。本文解析這些方案的原理、適用場景及實…

Vue3 狀態管理新選擇:Pinia 從入門到實戰

一、什么是pinia? 在 Vue3 生態中,狀態管理一直是開發者關注的核心話題。隨著 Vuex 的逐步淡出,Pinia 作為官方推薦的狀態管理庫,憑借其簡潔的 API、強大的功能和對 Vue3 特性的完美適配,成為了新時代的不二之選。今天我們就來深…

Unity相機控制

相機的控制無非移動和旋轉,每種操作各3個軸6個方向,一共12種方式。在某些需要快速驗證的項目或Demo里常常需要絲滑的控制相機調試效果。相機控制雖然不是什么高深的技術,但是要寫的好用還是很磨人的。 鎖定Z軸的旋轉 一個自由的相機可以繞 …

vue2 使用liveplayer加載視頻

vue2 使用liveplayer加載視頻 官網: https://www.liveqing.com/docs/manuals/LivePlayer.html支持WebRTC/MP4播放;支持m3u8/HLS播放;支持HTTP-FLV/WS-FLV/RTMP播放;支持直播和點播播放;支持播放器快照截圖;支持點播多清晰度播放;支持全屏或比例顯示;自動檢測IE瀏覽器兼容播放;支…

JavaScript語法樹簡介:AST/CST/詞法/語法分析/ESTree/生成工具

AST簡介 在平時的開發中,經常會遇到對JavaScript代碼進行檢查或改動的工具,例如ESLint會檢查代碼中的語法錯誤;Prettier會修改代碼的格式;打包工具會將不同文件中的代碼打包在一起等等。這些工具都對JavaScript代碼本身進行了解析…

Java函數式編程之【基本數據類型流】

一、基本數據類型與基本數據的包裝類 在Java編程語言中,int、long和double等基本數據類型都各有它們的包裝類型Integer、Long和Double。 基本數據類型是Java程序語言內置的數據類型,可直接使用。 而包裝類型則歸屬于普通的Java類,是對基本數據…

.NET Core部署服務器

1、以.NET Core5.0為例,在官網下載 下載 .NET 5.0 (Linux、macOS 和 Windows) | .NET 根據自己需求選擇x64還是x86,記住關鍵下載完成還需要下載 Hosting Bundel ,否則不成功 2、部署https將ssl證書放在服務器上,雙擊導入&#…