深度学习--CNN应用--VGG16网络和ResNet18网络

前言

我们在学习这两个网络时,应先了解CNN网络的相关知识

深度学习--CNN卷积神经网络(附图)-CSDN博客

这篇博客能够帮我们更好的理解VGG16和RetNet18

1.VGG16

1.1 VGG简介

VGG论文网址:VGG论文

大家有兴趣的可以去研读一下。

首先呢,我们先简单了解一下VGG网络的来源

自2012年AlexNet在lmageNet图片分类比赛中大获成功以来,关于深度神经网络的研究又一次如火如茶般进行;
VGGNet 是由牛津大学视觉几何小组 (Visual Geometry Group,VGG)提出的一种深层卷积网络结构,他们以 7.32% 的错误率赢得了 2014年 ILSVRC 分类任务的亚军(冠军由 GoogLeNet 以 6.65% 的错误率夺得)
AlexNet的网络结构来提高自己的准确率,主要有两个方向:小卷积核和多尺度。而VGG的作者们则选择了另外一个方向,即加深网络深度

VGG网络有一个特点:在每一次池化之后,经过卷积通道数都会翻倍,这样呢,就可以保留更多的特征。

1.2 VGG模型

最上面我们可以看出VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即我们所说的VGG16和VGG19。 

而我们今天要学习的主要是D,即VGG16

下面是模型参数

这样看可能有点抽象,让我们结合下面的图片进行理解

我们结合图片对表进行理解:

“Weight layers” 在深度学习和神经网络的上下文中,通常指的是神经网络中的权重层。在神经网络中,每一层(无论是卷积层、全连接层还是其他类型的层)都有与之关联的权重矩阵(或权重张量,对于卷积层而言)。16Weight layers是指卷积层加上连接层共有16层,也就是对应着16个权重层。

con3-aaa,卷积层全部都是3*3的卷积核,用上图中conv3-aaa表示,xxx表示通道数。其步长为1,用padding=same填充。池化层的池化核为2*2

maxpool :是指最大池化,在这里,pooling采用的是2*2的最大池化方法

FC-aaaa:指的是全连接层中有aaaa个节点

通俗地说,就是两组:两个卷积层接上一个池化层,

三组:三个卷积层接一个池化层,

最后是三个全连接层接上一个归一化处理,

这里的每一个卷积层和连接层后都要加上ReLu激活函数。

这样,我们对VGG16论文中的两个表格以及VGG16的框架就大体了解完了,接下来我们就具体分析它们,然后用代码实现它。

1.2.1 通道数

我们可以看出,初始的图片经过卷积层和池化层的处理,通道数在不断增加,有最开始输入的3个,变为了512个,再到4096个,最终的1000是指分类的类别数为1000个。

我们先要理解通道数指的是什么:通道数指的是同时处理的并发任务数量。

也就是说,通道数越多,同时处理的并发任务数量也就越多,

这样的好处也有很多,比如:

  1. 提高并发性:通过增加通道数,可以同时处理更多的任务,从而提高程序的并发性。这对于需要同时处理多个请求或任务的应用程序非常有用,例如网络服务器、数据处理等。

  2. 提高性能:增加通道数可以充分利用计算资源,提高程序的处理能力和响应速度。当程序中存在大量的IO操作时,通过增加通道数可以减少IO等待时间,提高整体性能。

  3. 提高资源利用率:通过增加通道数,可以更好地利用系统资源,充分发挥多核处理器的并行计算能力。这对于需要处理大量数据或计算密集型任务的应用程序非常有益。

  4. 支持高并发场景:在一些需要处理大量并发请求的场景下,增加通道数可以有效地提高系统的吞吐量和响应能力。例如,在Web服务器中,通过增加通道数可以同时处理更多的客户端请求,提供更好的用户体验。

1.2.3 最大池化层

通过最大池化层时,我们将池化层的大小和步长都设为2,这样可以将特征图的长和宽减半

不用多说,这样也有很多好处:

1. 降维与减少冗余信息:池化层通过下采样操作,有效地减少了特征图的维度,从而降低了数据的冗余性。这对于后续的卷积层或全连接层来说,可以显著减少计算量和内存消耗。
2. 扩大感知野:池化操作使得后续的卷积层能够看到更大范围的输入信息,即提高了网络的感知野。这有助于捕捉全局特征和上下文信息,从而增强网络的特征提取能力。
3. 防止过拟合:通过减少特征图的尺寸和参数数量,池化层有助于防止模型在训练过程中出现过拟合现象。过拟合是指模型在训练数据上表现良好,但在未见过的数据上性能较差的情况。
4. 提高鲁棒性:池化操作,尤其是最大池化,能够提取出输入中最显著的特征,对于输入中的微小变化(如平移、旋转或尺度变化)具有一定的不变性。这使得模型对于不同的输入变化更为鲁棒。
5. 加速计算:由于池化层减少了特征图的尺寸,后续的卷积或全连接层的计算量也会相应减少,从而提高了整体的计算速度。 

1.2.4 ReLu函数

我们通过ReLu函数进行非线性激活,并且inplace选择了True,这样可以大大减少VGG16模型所需要的内存

下面,我们就尝试用代码实现CNN网络 

1.3 核心代码

import torch.nn
class VGG16(torch.nn.Module):
    def __init__(self):
        super(VGG16, self).__init__()
        self.conv1 = torch.nn.Conv2d(1, 64, kernel_size=3, stride=1, padding=1)
        self.relu1 = torch.nn.ReLU(inplace=True)
        self.conv2 = torch.nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1)
        self.relu2 = torch.nn.ReLU(inplace=True)
        self.maxpl1 = torch.nn.MaxPool2d(kernel_size
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值