电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>电子资料>PyTorch教程8.2之使用块的网络(VGG)

PyTorch教程8.2之使用块的网络(VGG)

2023-06-05 | pdf | 0.33 MB | 次下载 | 免费

资料介绍

虽然 AlexNet 提供了深度 CNN 可以取得良好结果的经验证据,但它没有提供通用模板来指导后续研究人员设计新网络在接下来的部分中,我们将介绍几个常用于设计深度网络的启发式概念。

该领域的进展反映了芯片设计中 VLSI(超大规模集成)的进展,工程师从将晶体管放置到逻辑元件再到逻辑块Mead,1980 年同样,神经网络架构的设计也变得越来越抽象,研究人员从单个神经元的角度思考到整个层,现在转向块,重复层的模式。十年后,这已经发展到研究人员使用整个训练模型将它们重新用于不同但相关的任务。此类大型预训练模型通常称为 基础模型 Bommasani等人,2021 年

回到网络设计。使用块的想法首先出现于牛津大学的视觉几何组 (VGG),在他们同名的VGG网络中Simonyan 和 Zisserman,2014 年通过使用循环和子例程,可以使用任何现代深度学习框架轻松地在代码中实现这些重复结构。

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 的基本构建块是以下序列:(i) 带有填充的卷积层以保持分辨率,(ii) 非线性,例如 ReLU,(iii) 池化层,例如最大池化以减少解决。这种方法的问题之一是空间分辨率下降得非常快。特别是,这强加了一个硬限制log2⁡d网络上所有维度之前的卷积层(d) 用完了。例如,在 ImageNet 的情况下,以这种方式不可能有超过 8 个卷积层。

Simonyan 和 Zisserman ( 2014 )的关键思想是以 块的形式通过最大池化在下采样之间使用多个卷积。他们主要感兴趣的是深度网络还是宽网​​络表现更好。例如,连续应用两个 3×3卷积接触与单个相同的像素 5×5卷积确实如此。同时,后者使用了大约同样多的参数25⋅c2) 三个 3×3卷积做(3⋅9⋅c2). 在相当详细的分析中,他们表明深度和狭窄的网络明显优于浅层网络。这将深度学习置于对具有超过 100 层的典型应用的更深网络的追求上。堆叠3×3卷积已成为后来的深度网络的黄金标准(最近Liu等人( 2022 )才重新考虑的设计决策)。因此,小卷积的快速实现已成为 GPU 的主要内容 Lavin 和 Gray,2016 年

回到 VGG:一个 VGG 块由一系列卷积组成 3×3填充为 1 的内核(保持高度和宽度)后跟一​​个2×2步长为 2 的最大池化层(每个块后将高度和宽度减半)。在下面的代码中,我们定义了一个函数vgg_block来实现一个 VGG 块。

下面的函数有两个参数,对应于卷积层数num_convs和输出通道数 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网络

与 AlexNet 和 LeNet 一样,VGG 网络可以分为两部分:第一部分主要由卷积层和池化层组成,第二部分由与 AlexNet 相同的全连接层组成。关键区别在于卷积层在保持维数不变的非线性变换中分组,然后是分辨率降低步骤,如图 8.2.1所示。

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

图 8.2.1从 AlexNet 到 VGG。关键区别在于 VGG 由层块组成,而 AlexNet 的层都是单独设计的。

网络的卷积部分连续连接 图 8.2.1中的几个 VGG 块(也在vgg_block函数中定义)。这种卷积分组是一种在过去十年中几乎保持不变的模式,尽管操作的具体选择已经发生了相当大的修改。该变量 conv_arch由一个元组列表(每个块一个)组成,其中每个元组包含两个值:卷积层数和输出通道数,它们正是调用函数所需的参数vgg_block因此,VGG 定义了一个网络家族,而不仅仅是一个特定的表现形式。要构建一个特定的网络,我们只需迭代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数据手册
  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开发指南
  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开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  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次下载  |  免费