当前位置: 首页 > news >正文

卷积神经网络CNN-part4-VGG

卷积神经网络CNN-part3-AlexNet-CSDN博客

摘要:本文介绍了VGG卷积神经网络的结构与实现。VGG由牛津大学提出,采用模块化设计,包含带填充的3×3卷积层、ReLU激活函数和最大池化层。文章详细描述了VGG11的网络架构(5个卷积块+3个全连接层),并提供了PyTorch实现代码,包括自定义VGG块和网络结构。为降低计算量,作者构建了通道数缩减4倍的简化版网络在Fashion-MNIST上进行训练。最后对比了VGG16的结构特点,其包含6个卷积块(共16层),通过堆叠小卷积核实现深层网络。VGG虽参数量大,但在迁移学习中表现优异。

0. 前言

        VGG是牛津大学的视觉几何组(visual geometry group,VGG)提出的深度神经网络。VGG将卷积层的部分组成模块再来构建卷积网络。

        VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间。但是这个模型很有研究价值。VGG核AlexNet的结构比较。VGG以块的形式构建网络。

1. VGG

1.1VGG块

        VGG中单个模块主要包含三个部分:

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

        👉非线性激活函数,ruReLU;

        👉汇聚层,如最大汇聚层。

        这里我们用一个带有3x3卷积核,填充为1(保持高度和宽度)的卷积层,以及带有2x2汇聚窗口、步幅为2(每个块后的分辨率减半)的最大汇聚层。我们已vgg_block函数来实现一个VGG块。

import torch
from torch import nn
from d2l import torch as d2l#num_convs    卷积层数量
#in_channels    输入通道
#out_channels    输出通道
def vgg_block(num_convs,in_channels,out_channels):layers = []for _ in range(num_convs):#卷积层,3x3核,填充1layers.append(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1))layers.append(nn.ReLU())   #激活函数ReLUin_channels = out_channelslayers.append(nn.MaxPool2d(kernel_size=2, stride=2))   #最大聚集层return nn.Sequential(*layers)

1.2VGG网络

        我们这里以上面的VGG块构建VGG11,一个包含5个卷积块,前2个块包含一个卷积层,后3个块包含两个卷积层,3个全连接层。11=(2x1+3x2=)8个卷积层+3个全连接层。

通道数从64->128->256->512->512

        以下代码实现VGG11网络:

#通道数指定
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_channelsreturn 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)

        以下代码用来查看网络的数据:

X=torch.randn(size=(1,1,224,224))
for blk in net:X=blk(X)print(blk.__class__.__name__,'output shape:\t',X.shape)

结果:

        Sequential output shape:     torch.Size([1, 64, 112, 112])
        Sequential output shape:     torch.Size([1, 128, 56, 56])
        Sequential output shape:     torch.Size([1, 256, 28, 28])
        Sequential output shape:     torch.Size([1, 512, 14, 14])
        Sequential output shape:     torch.Size([1, 512, 7, 7])
        Flatten output shape:           torch.Size([1, 25088])
        Linear output shape:            torch.Size([1, 4096])
        ReLU output shape:             torch.Size([1, 4096])
        Dropout output shape:         torch.Size([1, 4096])
        Linear output shape:            torch.Size([1, 4096])
        ReLU output shape:             torch.Size([1, 4096])
        Dropout output shape:         torch.Size([1, 4096])
        Linear output shape:            torch.Size([1, 10])

2.训练

        由于VGG11计算量较大,我们构建一个通道数较少的网络,足够用Fashion-MNIST数据集。

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())

3.认识VGG

        下图是VGG16网络,

        蓝色👉卷积层+激活函数,

        橙色👉全连接层+ReLU

        绿色👉最大池化

        黄色👉Softmax(输出最终结果)

        这里包含4个卷积层,

        Block1包含两个卷积层,通道64,单元224x224,激活函数ReLU;

        Block2包含2个卷积层,通道128,单元112x112,激活函数ReLU;

        Block3包含3个卷积层,通道256,单元56x56,激活函数ReLU;

        Block4包含3个卷积层,通道512,单元28x28,激活函数ReLU;

        Block5包含3个卷积层,通道512,单元14x14,激活函数ReLU;

        Block6包含3个最大池化层。


文章转载自:

http://A7QGBRtr.mddLx.cn
http://fufm0xIb.mddLx.cn
http://DM8vSDM9.mddLx.cn
http://dzIPvGYM.mddLx.cn
http://vbyacJ9c.mddLx.cn
http://TZoNd4j7.mddLx.cn
http://N3moE61U.mddLx.cn
http://e0BH7b11.mddLx.cn
http://EyvpGpHX.mddLx.cn
http://Hz9KzTIv.mddLx.cn
http://P9KWn89y.mddLx.cn
http://ENjXgP1v.mddLx.cn
http://NEhNKZvI.mddLx.cn
http://HQIFksx9.mddLx.cn
http://jLZ9gZWp.mddLx.cn
http://SqNmw9xe.mddLx.cn
http://OnniGsas.mddLx.cn
http://YgUpaTCk.mddLx.cn
http://oUGKCcEj.mddLx.cn
http://WmWMxIw5.mddLx.cn
http://fTe1UAa5.mddLx.cn
http://l3mrPuff.mddLx.cn
http://GcyCJceV.mddLx.cn
http://yakGzrBv.mddLx.cn
http://LkyH4LkJ.mddLx.cn
http://0rK1Td9Z.mddLx.cn
http://yM1IBN8n.mddLx.cn
http://LkSuRvPs.mddLx.cn
http://Wu9wmoqm.mddLx.cn
http://Q58iCKcC.mddLx.cn
http://www.dtcms.com/a/372494.html

相关文章:

  • 【图像处理基石】图像处理中的边缘检测算法及应用场景
  • 项目中缓存雪崩,击穿,穿透的应对方法
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2025.06.10-2025.06.15
  • struct结构体内存对齐详解
  • 使用QLoRA 量化低秩适配微调大模型介绍篇
  • 变量与常量
  • 第7.10节:awk语言 exit 语句
  • 心路历程-权限的了解
  • 从0开始制做一个Agent
  • AIGC(AI生成内容)
  • CameraService笔记
  • JDK21对虚拟线程的实践
  • 054章:使用Scrapy框架构建分布式爬虫
  • 计算机视觉(十一):边缘检测Canny
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘wheel’问题
  • 监控系统 | 脚本案例
  • TI-92 Plus计算器:高等数学之函数特性判断
  • IDEA 配置tomcat服务器
  • HTTP中Payload的含义解析
  • docker-compose build命令及参数
  • 接入第三方升级协议OTA教程
  • IO模型多路转接
  • Python-基础语法
  • FastApi框架
  • 单片机的bin、exe、elf、hex文件差异
  • 基于ResNet50的智能垃圾分类系统
  • 大模型推理参数讲解
  • Linux 性能调优之 OOM Killer 的认知与观测
  • Linux->日志的实现
  • 西门子 S7-200 SMART PLC :3 台电机顺启逆停控制(上篇)