卷积神经网络的运算

参考内容

1、网易云课堂微专业——深度学习—04第一周:http://mooc.study.163.com/smartSpec/detail/1001319001.htm

2、CNN基础介绍:http://blog.youkuaiyun.com/fengbingchun/article/details/50529500



 卷积神经网络(Convolutional Neural Networks,CNN)

1、基本计算原理

  

  动态过程:

  滤波器(过滤器:filter)的权值是根据你要检测的特征来决定的,在深度学习中,也即是要经过训练得到。检测的特征不同,权值就不一样。

  如上单层的图像一般表示的是灰白图,既是没有颜色的,有颜色的RGB图像,会包含三个相同大小的图层,这时对应的滤波器也要变成三层,滤波器的层数(通道数)必须时刻与图像层数保持一致。。。

  

  注意输出的是一个单层图

  

  因为当一个三通道的过滤器与图像进行卷积时,是直接对27个数去加权计算它们的和得到一个结果,而不是分层计算。

2、卷积输出的大小计算

   如上两个例子,5*5的图像经过3*3的滤波器得到一个3*3的结果,6*6*3d的图像经过3*3*3d的滤波器得到一个4*4*1d的结果,从单层的例子我们大概已经知道了是怎么计算的了,那么接下来转换成公式来表示一下。

   

  由计算可知,每次卷积图像都会变小,以上还只是步长为1的情况(也即是每次只移动一个),有两个缺点:

    1、每次卷积之后图像都会缩小,多次卷积之后呢, 可能会变得很小很小

    2、会丢掉角落边缘像素的重要信息,看下面图像

  

    在上面的边缘,从左到右像素检测的次数分别为1、2、3、2、1,可见角落边缘只被检测了一次,而中间可以被检测多次,这就会导致边角信息丢失。解决的办法是加入Padding。

3、加入Padding以及之后的计算

  加入Padding的意思是在卷积之前,在原图像边缘上加入一层像素(也可以多层),一般也叫做补零(因为大多数时候我们添加的元素都是0)。

   

  由上图可知,如果卷积之后要得到与原图像相同大小的图像,那么加入的Padding层数应该是(f - 1) / 2,也由此可见,我们用的过滤器 f 一般也是奇数的,这样才能整除计算,获得对称填充,还有一个原因是奇数的滤波器会有一个中心点,有时候在计算机视觉计算时,有个中心点会方便很多。

  附:

    Padding = 0的卷积被称为Valid Convolution

    为了得到与原图像大小相同图像而加入Padding的卷积称为Same Convolution

3、加入卷积步长(Stride)

  以上运算都是基于步长为1的情况,下面看看步长为2的情况:

  

  在卷积运算时,如果滤波器超出了图像框,一般的操作是不进行运算。

 4、三维卷积

  (1)原始RGB三维图

    

    

  (2)多个滤波器(卷积核)

    以上操作都是基于单个滤波器的,无论是单层还是多层,一个滤波器只能检测一种特征,要检测多个特征,我们需要多个滤波器。

    

 5、汇总

  

 

### 卷积神经网络运算原理与实现 #### 一、卷积神经网络的核心概念 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理数据具有网格状拓扑结构的深度学习模型[^1]。CNN 的核心思想在于通过局部感知野和权共享机制来降低模型复杂度并提升泛化能力。 #### 二、卷积操作的基本原理 卷积操作是 CNN 中最重要的组成部分之一,其主要功能是从输入图像中提取特征。具体来说,卷积核(也称为滤波器)会在输入图像上滑动,并执行逐元素乘法再求和的操作,从而生成一个新的特征图(Feature Map)。这一过程可以表示为: \[ F(x,y) = (I * K)(x,y) = \sum_{m}\sum_{n} I(m,n)K(x-m,y-n) \] 其中 \( F(x,y) \) 是输出特征图中的某个位置,\( I \) 表示输入图像,\( K \) 则代表卷积核矩阵[^2]。 #### 三、池化层的作用 为了进一步减少计算量以及防止过拟合,在每次卷积之后通常会加入一个池化层(Pooling Layer),常见的有最大池化(Max Pooling)和平均池化(Average Pooling)。这些技术能够保留重要信息的同时丢弃冗余细节。 #### 四、全连接层的功能 经过若干次交替使用的卷积层与池化层后,最终得到一系列低维但高度抽象化的特征向量;此时便可以通过传统的全连接人工神经元来进行分类或其他任务预测工作。 #### 五、关于特殊类型的卷积——1×1 Convolution 虽然表面上看似乎无法完成传统意义上的邻域关联分析任务,但实际上这种形式却有着独特优势:它可以调整通道数即改变维度大小而不影响其他方面表现效果良好之处就在于此[^3] 。因此即使不涉及任何空间上的联系建立也能发挥重要作用比如在网络架构设计当中起到降维或者升维的效果等等。 ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 定义卷积层 self.conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(3, 3), stride=1, padding='same') # 定义激活函数ReLU self.relu_activation = nn.ReLU() def forward(self, x): # 执行一次前向传播 output = self.conv_layer(x) activated_output = self.relu_activation(output) return activated_output ``` 上述代码展示了一个简单的两步流程:先应用标准尺寸(如3x3卡尺大小)pixels窗口扫描整个input image;接着利用非线性变换增加表达力. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值