神经网络之VGG

2023-11-12

目录

1.VGG的简单介绍  

 1.2结构图

3.参考代码

VGGNet-16 架构:完整指南 |卡格尔 (kaggle.com) 

 

1.VGG的简单介绍  

经典卷积神经网络的基本组成部分是下面的这个序列:

  1. 带填充以保持分辨率的卷积层;

  2. 非线性激活函数,如ReLU;

  3. 汇聚层,如最大汇聚层。

而一个VGG块与之类似,由一系列卷积层组成,后面再加上用于空间下采样的最大汇聚层。在最初的VGG论文中 (Simonyan and Zisserman, 2014),作者使用了带有3×3卷积核、填充为1(保持高度和宽度)的卷积层,和带有2×2汇聚窗口、步幅为2(每个块后的分辨率减半)的最大汇聚层。

VGG的全称是视觉几何小组,隶属于牛津大学科学与工程系。它发布了一系列从VGG开始的卷积网络模型,可以应用于人脸识别和图像分类,从VGG16到VGG19。VGG研究卷积网络深度的初衷是了解卷积网络的深度如何影响大规模图像分类和识别的准确性和准确性-Deep-16CNN),为了加深网络层数并避免参数过多,在所有层中都使用了一个小的3x3卷积核。

 1.2结构图

VGG的输入被设置为大小为224x244的RGB图像。为训练集图像上的所有图像计算平均RGB值,然后将该图像作为输入输入到VGG卷积网络。使用3x3或1x1滤波器,并且卷积步骤是固定的。有3个VGG全连接层,根据卷积层+全连接层的总数,可以从VGG11到VGG19变化。最小VGG11具有8个卷积层和3个完全连接层。最大VGG19具有16个卷积层+3个完全连接的层。此外,VGG网络后面没有每个卷积层后面的池化层,也没有分布在不同卷积层下的总共5个池化层。下图为VGG结构图:

 

 关于架构图:

 VGG16包含16层,VGG19包含19层。在最后三个完全连接的层中,一系列VGG完全相同。整体结构包括5组卷积层,后面是一个MaxPool。不同之处在于,在五组卷积层中包括了越来越多的级联卷积层。

 

3.参考代码

VGGNet-16 架构:完整指南 |卡格尔 (kaggle.com) 

在这里讲述了一个比较完整的代码记录,本文参考李沐老师所写

import torch
from torch import nn
from d2l import torch as d2l


def vgg_block(num_convs, in_channels, out_channels):
    layers = []
    for _ in range(num_convs):
        layers.append(nn.Conv2d(in_channels, out_channels,
                                kernel_size=3, padding=1))
        layers.append(nn.ReLU())
        in_channels = out_channels
    layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
    return nn.Sequential(*layers)
conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))
def vgg(conv_arch):
    conv_blks = []
    in_channels = 1
    # 卷积层部分
    for (num_convs, out_channels) in conv_arch:
        conv_blks.append(vgg_block(num_convs, in_channels, out_channels))
        in_channels = out_channels

    return nn.Sequential(
        *conv_blks, nn.Flatten(),
        # 全连接层部分
        nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5),
        nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5),
        nn.Linear(4096, 10))

net = vgg(conv_arch)
#将构建一个高度和宽度为224的单通道数据样本,以观察每个层输出的形状。
X = torch.randn(size=(1, 1, 224, 224))
for blk in net:
    X = blk(X)
    print(blk.__class__.__name__,'output shape:\t',X.shape)

 为了减少训练时间 将原参数量缩小到原来的1\16.

ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
net = vgg(small_conv_arch)
lr, num_epochs, batch_size = 0.05, 10, 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络之VGG 的相关文章

  • OAuth2四种模式

    OAuth2四种模式 一 隐式授权模式 Implicit Grant 流程图 步骤 优缺点及适用场景 二 授权码授权模式 Authorization code Grant 流程图 步骤 优缺点及适用场景 三 密码模式 Resource Ow
  • 计算机操作系统中常用算法总结

    计算机操作系统中常用算法总结 一 动态分区分配算法 1 首次适应算法 最先适应算法 按照分区的先后次序 从头开始查找 找到符合要求的第一个分区 2 循环首次适应算法 下次适应算法 按照分区的先后次序 从上次已分配的分区起查找 到达最后一个分
  • 上知天文,下知地理,还能替人写脚本!人工智能的进阶ChatGPT

    ChatGPT是OpenAI在11月30日推出的聊天机器人 于12月1日起对公众免费开放 自从这东西出来之后 大家对此的讨论热情越发浓烈 ChatGPT具体可以干些什么 帮你写论文 检讨书 情书 甚至情诗也能信手拈来 以上都是网友测试它写出

随机推荐

  • python numpy数组

    1 数组创建 import numpy arr numpy array 11 22 33 44 55 print arr 输出 11 22 33 44 55 数组属性查看 print type arr 输出
  • java 注解 @Retention @interface 元数据

    java注解 即是注释了 百度解释 也叫元数据 一种代码级别的说明 个人理解 就是内容可以被代码理解的注释 一般是一个类 元数据 也叫元注解 是放在被定义的一个注解类的前面 是对注解一种限制 只有两个 Retention 和 Target
  • 程序员常见系统错误代码大全:1到15841

    程序员常见系统错误代码大全 1到15841 提示 使用浏览器的Ctrl F键盘组合来搜索错误代码 要么搜索错误消息本身 要么只搜索错误代码 例如 错误代码635 系统错误代码大全 1到15841 错误代码1 功能不正确 ERROR INVA
  • IDEA获取gitee仓库的数据时,发生错误

    以本人遇到的情况为例 以上错误与本地的代码没有关系 主要原因是gitee仓库上的application yml配置文件的格式编写有误所导致 修改正确之后即可成功获取
  • DTO与Entity相互转化

    import java lang reflect Method import java util concurrent ConcurrentHashMap import org slf4j Logger import org slf4j L
  • 关于path用变量的问题思考

    1 用go解析路由时 中间件里相对路由做统一处理 或者是对于一组路由做处理 只能挨个正则去匹配 要不就多写代码 侵入业务 2 路由不可读 命名再不规范的话 抓包也痛苦 需要看代码才能理解这个接口是做什么的 和前端对接口时 前端 接口名字是什
  • 微服务回归单体,代码行数减少75%,性能提升1300%

    关注并星标腾讯云开发者 每周3 谈谈我在腾讯的架构设计经验 第5期 李浩津 13倍性能重构 搜索内容架构 C 微服务群改造 内容架构是 QQ 浏览器搜索的内容接入和计算层 主要负责腾讯域内的内容接入和处理 当前接入了多个合作方的上千类内容
  • leaflet可视化平台搭建

    leaflet viz Leaflet可视化平台 https github com zrysmt leaflet viz leaflet是一个开源的前端地图交互类库 比较轻量级 支持移动端 而且有丰富的插件资源可供我们使用 Echarts是
  • matplotlib绘制3d图形出现空白,解决办法

    如果出现如下图空白 或者出现下面报错MatplotlibDeprecationWarning Axes3D fig adding itself to the figure is deprecated since 3 4 Pass the k
  • 三大框架 之 Hibernate查询(一对多、多对多、查询关系)

    目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate cfg xml中的标签里 添加核心配置文件 引入工具类 编写测试类 级联操作 什么是级联 级联分类 级联是有方向性 级联保
  • openfeign使用报错:No Feign Client for loadBalancing defined.

    错误描述 nested exception is java lang IllegalStateException No Feign Client for loadBalancing defined Did you forget to inc
  • DDR中的ODT功能详解及波形对比

    ODT on die termination 即为片内端接 就是将端接电阻放在了芯片内部 这个功能只有在DDR2以上的数据信号才有 而有了ODT功能 原本需要在PCB板上加串联电阻的数据信号就不需要再额外添加端接了 只需要芯片内部打开ODT
  • 敌兵布阵

    http acm hdu edu cn showproblem php pid 1166 Problem Description C国的死对头A国这段时间正在进行军事演习 所以C国间谍头子Derek和他手下Tidy又开始忙乎了 A国在海岸线
  • java将两个有序链表合并成有序链表

    利用递归法将两有序链表合并成链表 且合并后的链表仍然有序 比较链表1和链表2的第一个结点数据 如果head1 data
  • DDoS攻击重大历史事件

    历史上有名ddos的攻击事件很多 涉及行业包括政治 经济 军事等各个行业 下面列举一下2016年比较有名的几起DDOS事件 1 暴雪DDoS攻击 LizardSquad组织对暴雪公司战网服务器发起DDoS攻击 包括 星际争霸2 魔兽世界 暗
  • ARM 异常介绍

    一 中断概念 CPU 在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程 硬件引起的中断不可预测 随机性 软中断 事先在程序中安排特殊指令 CPU 执行到该类指令时 转去执行相应的一段预先安排好的程序 然后再返回来执行原来的
  • 用三元操作符替代if-else以降低CPU分支预测惩罚实现Unity内函数13倍提速

    测试对象 1 C Unity脚本 2 C DLL mcs build的动态链接库再导入Unity 3 C Native Code LLVM编译后导入Unity 被测试函数源码 两个随机数数组进行大小比较 一个数组保存大数 另一个保存小数 C
  • 动态IP代理是什么?一文看懂动态代理IP

    一 什么是动态IP代理 动态IP代理是一种代理服务 而动态IP是由ISP动态分配给用户的IP地址 这些IP地址会周期性地更改 每次链接互联网时 用户会被分配一个新的IP地址 因而也称为 轮换IP IP地址轮换是一个过程 您的IP 地址 网络
  • Unity教程:GUI 界面开发

    UI概述 UI永远是显示在屏幕的最前面上 不受变形 碰撞 光照的影响 GUI概述 GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置
  • 神经网络之VGG

    目录 1 VGG的简单介绍 1 2结构图 3 参考代码 VGGNet 16 架构 完整指南 卡格尔 kaggle com 1 VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列 带填充以保持分辨率的卷积层 非线性激活函数 如R