電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>PyTorch教程8.2之使用塊的網(wǎng)絡(VGG)

PyTorch教程8.2之使用塊的網(wǎng)絡(VGG)

2023-06-05 | pdf | 0.33 MB | 次下載 | 免費

資料介紹

雖然 AlexNet 提供了深度 CNN 可以取得良好結(jié)果的經(jīng)驗證據(jù),但它沒有提供通用模板來指導后續(xù)研究人員設計新網(wǎng)絡。在接下來的部分中,我們將介紹幾個常用于設計深度網(wǎng)絡的啟發(fā)式概念。

該領(lǐng)域的進展反映了芯片設計中 VLSI(超大規(guī)模集成)的進展,工程師從將晶體管放置到邏輯元件再到邏輯塊Mead,1980 年。同樣,神經(jīng)網(wǎng)絡架構(gòu)的設計也變得越來越抽象,研究人員從單個神經(jīng)元的角度思考到整個層,現(xiàn)在轉(zhuǎn)向塊,重復層的模式。十年后,這已經(jīng)發(fā)展到研究人員使用整個訓練模型將它們重新用于不同但相關(guān)的任務。此類大型預訓練模型通常稱為 基礎(chǔ)模型 Bommasani等人,2021 年。

回到網(wǎng)絡設計。使用塊的想法首先出現(xiàn)于牛津大學的視覺幾何組 (VGG),在他們同名的VGG網(wǎng)絡中Simonyan 和 Zisserman,2014 年。通過使用循環(huán)和子例程,可以使用任何現(xiàn)代深度學習框架輕松地在代碼中實現(xiàn)這些重復結(jié)構(gòu)。

import torch
from torch import nn
from d2l import torch as d2l
from mxnet import init, np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()
import jax
from flax import linen as nn
from d2l import jax as d2l
import tensorflow as tf
from d2l import tensorflow as d2l

8.2.1. VGG 塊

CNN 的基本構(gòu)建塊是以下序列:(i) 帶有填充的卷積層以保持分辨率,(ii) 非線性,例如 ReLU,(iii) 池化層,例如最大池化以減少解決。這種方法的問題之一是空間分辨率下降得非???。特別是,這強加了一個硬限制log2?d網(wǎng)絡上所有維度之前的卷積層(d) 用完了。例如,在 ImageNet 的情況下,以這種方式不可能有超過 8 個卷積層。

Simonyan 和 Zisserman ( 2014 )的關(guān)鍵思想是以 塊的形式通過最大池化在下采樣之間使用多個卷積。他們主要感興趣的是深度網(wǎng)絡還是寬網(wǎng)??絡表現(xiàn)更好。例如,連續(xù)應用兩個 3×3卷積接觸與單個相同的像素 5×5卷積確實如此。同時,后者使用了大約同樣多的參數(shù)25?c2) 三個 3×3卷積做(3?9?c2). 在相當詳細的分析中,他們表明深度和狹窄的網(wǎng)絡明顯優(yōu)于淺層網(wǎng)絡。這將深度學習置于對具有超過 100 層的典型應用的更深網(wǎng)絡的追求上。堆疊3×3卷積已成為后來的深度網(wǎng)絡的黃金標準(最近Liu等人( 2022 )才重新考慮的設計決策)。因此,小卷積的快速實現(xiàn)已成為 GPU 的主要內(nèi)容 Lavin 和 Gray,2016 年

回到 VGG:一個 VGG 塊由一系列卷積組成 3×3填充為 1 的內(nèi)核(保持高度和寬度)后跟一??個2×2步長為 2 的最大池化層(每個塊后將高度和寬度減半)。在下面的代碼中,我們定義了一個函數(shù)vgg_block來實現(xiàn)一個 VGG 塊。

下面的函數(shù)有兩個參數(shù),對應于卷積層數(shù)num_convs和輸出通道數(shù) num_channels

def vgg_block(num_convs, out_channels):
  layers = []
  for _ in range(num_convs):
    layers.append(nn.LazyConv2d(out_channels, kernel_size=3, padding=1))
    layers.append(nn.ReLU())
  layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
  return nn.Sequential(*layers)
def vgg_block(num_convs, num_channels):
  blk = nn.Sequential()
  for _ in range(num_convs):
    blk.add(nn.Conv2D(num_channels, kernel_size=3,
             padding=1, activation='relu'))
  blk.add(nn.MaxPool2D(pool_size=2, strides=2))
  return blk
def vgg_block(num_convs, out_channels):
  layers = []
  for _ in range(num_convs):
    layers.append(nn.Conv(out_channels, kernel_size=(3, 3), padding=(1, 1)))
    layers.append(nn.relu)
  layers.append(lambda x: nn.max_pool(x, window_shape=(2, 2), strides=(2, 2)))
  return nn.Sequential(layers)
def vgg_block(num_convs, num_channels):
  blk = tf.keras.models.Sequential()
  for _ in range(num_convs):
    blk.add(
      tf.keras.layers.Conv2D(num_channels, kernel_size=3,
                  padding='same', activation='relu'))
  blk.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))
  return blk

8.2.2. VGG網(wǎng)絡

與 AlexNet 和 LeNet 一樣,VGG 網(wǎng)絡可以分為兩部分:第一部分主要由卷積層和池化層組成,第二部分由與 AlexNet 相同的全連接層組成。關(guān)鍵區(qū)別在于卷積層在保持維數(shù)不變的非線性變換中分組,然后是分辨率降低步驟,如圖 8.2.1所示。

https://file.elecfans.com/web2/M00/A9/C7/poYBAGR9NYmAAu3EAATuF75_NS8172.svg

圖 8.2.1從 AlexNet 到 VGG。關(guān)鍵區(qū)別在于 VGG 由層塊組成,而 AlexNet 的層都是單獨設計的。

網(wǎng)絡的卷積部分連續(xù)連接 圖 8.2.1中的幾個 VGG 塊(也在vgg_block函數(shù)中定義)。這種卷積分組是一種在過去十年中幾乎保持不變的模式,盡管操作的具體選擇已經(jīng)發(fā)生了相當大的修改。該變量 conv_arch由一個元組列表(每個塊一個)組成,其中每個元組包含兩個值:卷積層數(shù)和輸出通道數(shù),它們正是調(diào)用函數(shù)所需的參數(shù)vgg_block。因此,VGG 定義了一個網(wǎng)絡家族,而不僅僅是一個特定的表現(xiàn)形式。要構(gòu)建一個特定的網(wǎng)絡,我們只需迭代arch以組成塊。

class VGG(d2l.Classifier):
  def __init__(self, arch, lr=0.1, num_classes=10):
    super().__init__()
    self.save_hyperparameters()
    conv_blks = []
    for (num_convs, out_channels) in arch:
      conv_blks.append(vgg_block(num_convs, out_channels))
    self.net = nn.Sequential(
      *conv_blks, nn.Flatten(),
      nn.LazyLinear(4096), nn.ReLU(), nn.Dropout(0.5),
      nn.LazyLinear(4096), nn.ReLU(), nn.Dropout(0.5),
      nn.LazyLinear(num_classes))
    self.net.apply(d2l.init_cnn)
class VGG(d2l.Classifier):
  def __init__(self, arch, lr=0.1, num_classes=10):
    super().__init__()
    self.save_hyperparameters()
    self.net = nn.Sequential()
    for (num_convs, num_channels) in arch:
      self.net.add(vgg_block(num_convs, num_channels))
    self.net.add(nn.Dense(4096, activation=
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費