深度学习之CNN网络简介

发布于:2025-08-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

CNN网络简单介绍

1.概述

卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。

​ CNN网络主要有三部分构成:卷积层、池化层和全连接层构成,其中卷积层负责提取图像中的局部特征;池化层用来大幅降低运算量并特征增强;全连接层类似神经网络的部分,用来输出想要的结果。

特点

CNN 网络主要应用于视觉处理,通常位于神经网络的前端(上游),通过卷积层和池化层自动提取图像的局部和全局特征,生成紧凑且有区分度的表示,为后续网络(如全连接层)进行分类或其他任务提供高效输入,同时减少计算复杂度和参数量。

为什么会说减少参数量?

如果用全连接神经网络处理图片,每个像素点都会对应一组参数,因此参数量非常大;而使用卷积神经网络时,通过卷积核的权重共享机制,一个卷积核就可以作用于整个图像区域,从而大幅减少参数数量,同时提取局部特征。

2.卷积层

卷积层(Convolutional Layer是 CNN 的核心组成部分,主要作用是从输入图像中自动提取局部特征。通过卷积核在图像上滑动,卷积层能够捕捉边缘、纹理、形状等低级特征,并通过多层堆叠逐步抽象成更高级的语义特征。同时,卷积核的权重共享机制大幅减少了参数量,使网络在保持空间结构信息的同时,提高了特征提取效率。

卷积核:卷积核是卷积运算过程中必不可少的一个“工具”,其本质上是一个的矩阵。

在定义卷积核时我们需要考虑:

  • 卷积核的个数:卷积核的个数决定了输出特征矩阵的通道数也就是outfeature的个数。
  • 卷积核的大小(size):一般的卷积核大小为奇数×奇数,如3×3、5×5.

例如一个3*3的卷积核:

在这里插入图片描述

卷积运算:

卷积的过程是利用卷积核图像上进行滑动计算,从左到右,从上往下,每滑动到一个位置,卷积核和图像进行点对点的相乘并相加,最后得到一个新的值,将这个新值添加到特征图中,整个图片卷积结束后得到一个新的特征图。

在这里插入图片描述

在这里插入图片描述

卷积的重要性在于它可以将图像中的特征与卷积核进行卷积操作,从而提取出图像中的特征。(类比:卷积核像一个小模板,它在图像上滑动,输出值越大,就表示该区域“越像”卷积核所关注的特征模式(例如边缘方向或纹理)。)

应用Pytorch框架自定义卷积层:

from torch import nn

class MyNet(nn.module):
	def __init__(self):
		super(MyNet, self).__init__()
		self.conv = nn.Conv2d(
			in_channels=32,  # 输入通道
        	out_channels=128,  # 输出通道
        	kernel_size=(5, 5),  # 卷积核大小
       	 	stride=1,  # 步长
        	padding=0,  # 填充
        	bias=True
		)

	def forward(self,x):
        x = self.conv(x)
        return x
    
model = MyNet()
model(img) # img为需要处理的图片
  • in_channels:输入数据的通道数
  • out_channels:输出数据的通道数,这个参数决定了你有多少个卷积核。
  • kernel_size:卷积核大小
  • stride:卷积操作的步长,默认为1。
  • padding:边缘填充值,默认为0(不进行填充)
  • bias:布尔值,是否设置偏置

注意:

  1. 每个卷积核得到一个新的特征图,即有多少个卷积核就有多少个特征图,多通道图片卷积得到的新图片为当前卷积核对每个通道卷积后按位相加得到的最终图。
  2. 在传入图片时,数据格式为(N, C, H, W)。N表示批次数(样本个数)、C表示通道数、H表示高、W表示宽。

特征图大小(图片尺寸)计算:

特征图大小计算公式:
N=W−F+2PS+1 N=\frac{W-F+2P}{S}+1 N=SWF+2P+1

  • W:输入图片的大小
  • F:卷积核大小
  • S:步长
  • P:边缘是否填充,填充为1,否则为0
  • N:输出图片的大小

3.池化层

池化层通常紧跟在卷积层之后,用于下采样和特征压缩。

下采样: 减少数据的空间或时间分辨率,保留主要信息同时压缩数据量。

所以池化层的作用就是减少一定的数据量但同时保留重要的数据。

池化层的运算与卷积相似,他们都采用了滑动窗口的思想,通过对局部的数据进行处理输出一个新的图像。

池化层主要分为两种——最大池化和平均池化。

应用Pytorch创建池化层:

pool = nn.MaxPool2d(
    kernel_size=3,
    stride=1,
    padding=0,
    dilation=1,
    return_indices=True
)
    out = pool(img)

kernel:池化窗口大小,int或tuple,如3表示窗口大小为3×3

stride:步长

padding:边缘填充

dilation:池化窗口内部元素的间隔

return_indices:是否返回新图像中的像素点在原图像中的下标,最大池化使用。

  • 最大池化

在这里插入图片描述

左侧为输入图像,右侧为输出图像。最大池化就是取局部区域的最大值作为新图像像素点的像素值。最大池化在提取图像中的纹理、形状等方面具有很好的效果。

  • 平均池化

将局部区域中的值取平均作为池化后的值,这样可以得到整体特征的平均值。平均池化在提取图像中的整体特征、减少噪声等方面具有较好的效果。

在这里插入图片描述

优点:

  1. 降低特征图的尺寸,减少计算量,提升模型运行效率。
  2. 池化操作可以带来特征的平移、旋转等不变性,这有助于提高模型对输入数据的鲁棒性。
  3. 池化层通常是非线性操作,可以增强网络的表达能力,进一步提升模型的性能。

缺点:可能会丢失一些信息。

总结

  1. 降低特征图的尺寸,减少计算量,提升模型运行效率。
  2. 池化操作可以带来特征的平移、旋转等不变性,这有助于提高模型对输入数据的鲁棒性。
  3. 池化层通常是非线性操作,可以增强网络的表达能力,进一步提升模型的性能。

缺点:可能会丢失一些信息。

总结

​ CNN 网络通常位于神经网络的前端(上游),主要由卷积层和池化层组成,用于自动提取图像特征、减少计算量,并增强模型的鲁棒性和表达能力,从而提升整体性能。

以上内容是博主学习深度学习的一些总结笔记,若文章中出现错误请及时指正博主,感谢浏览☆噜~☆


网站公告

今日签到

点亮在社区的每一天
去签到