首页 > 其他分享 >卷积、激活、池化与批量归一化:深度学习中的关键操作

卷积、激活、池化与批量归一化:深度学习中的关键操作

时间:2024-09-28 11:23:04浏览次数:3  
标签:卷积 poolSize stride 池化 归一化 input size

在深度学习,尤其是卷积神经网络(CNN)中,卷积、激活、池化和批量归一化是四个基本操作。它们共同作用,帮助模型高效学习和提取数据中的重要特征。

1. 卷积操作

作用
卷积操作旨在通过滑动卷积核(过滤器)在输入数据上提取局部特征,如边缘和角点。
过程

滑动卷积核:卷积核在输入特征图上移动,逐个覆盖区域。
特征计算:在每个位置,卷积核与输入特征图的对应部分进行逐元素相乘并求和,得到输出值。公式为:

h ( i , j ) = ∑ m ∑ n f ( i + m , j + n ) ⋅ g ( m , n ) h(i,j) = \sum_{m} \sum_{n} f(i+m, j+n) \cdot g(m,n) h(i,j)=m∑​n∑​f(i+m,j+n)⋅g(m,n)
在此公式中, f f f代表输入特征图, g g g 代表卷积核, h h h 为输出特征图。输出特征图的横纵坐标由 i i i 和 j j j表示,而卷积核的横纵坐标则用 m m m 和 n n n 表示。
输出特征图的大小需要满足以下公式:
D o u t = D i n − D c o n v + 2 P S + 1 D_{out}=D_{in}-D_{conv}+2PS+1 Dout​=Din​−Dconv​+2PS+1
D o u t D_{out} Dout​表示输出特征图的维度(宽度或高度)。
D i n D_{in} Din​表示输入特征图的相应维度大小。
D c o n v D_{conv} Dconv​表示卷积核的相应维度大小。
P P P表示边界填充的大小。
S S S表示卷积操作的步长。

优势

参数共享:通过在整个输入上共享卷积核参数,显著减少模型参数数量。
平移不变性:能够有效捕捉到不同位置的相同特征,提高了模型的鲁棒性。

2. 激活运算

作用
激活函数引入非线性特性,使得神经网络能够学习和表示复杂的模式。
过程

非线性变换:对每个输入值进行变换,常见的激活函数包括:
ReLU(Rectified Linear Unit):

ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)

Sigmoid:

Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+e−x1​

Tanh:

Tanh ( x ) = 2 1 + e − 2 x − 1 \text{Tanh}(x) = \frac{2}{1 + e^{-2x}} - 1 Tanh(x)=1+e−2x2​−1

Softmax(用于多分类):

Softmax ( z i ) = e z i ∑ j e z j \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}} Softmax(zi​)=∑j​ezj​ezi​​
优势

增强表达能力:通过引入非线性,网络能够学习复杂的特征。
加快收敛:如ReLU等激活函数能有效减轻梯度消失问题,加速模型训练。

3. 池化运算

作用
池化操作用于减少特征图的维度,降低计算复杂度,同时保持关键信息。
过程

最大池化:在池化窗口中选择最大值,提取显著特征。公式为:

P max = max ⁡ { a i j ∣ 1 ≤ i ≤ m , 1 ≤ j ≤ n } P{\text{max}} = \max \{a{_{ij}} \mid 1 \leq i \leq m, 1 \leq j \leq n\} Pmax=max{aij​∣1≤i≤m,1≤j≤n}
最大池化的matlab实现:

function output = maxPooling(input, poolSize, stride)
    % 输入检查
    assert(ndims(input) == 3, '输入必须是三维数组 (高度 x 宽度 x 通道)');
    assert(all(size(poolSize) == 2), '池化大小必须是2维 [h, w]');
    
    [height, width, channels] = size(input);
    % 计算输出的高度和宽度
    outHeight = floor((height - poolSize(1)) / stride) + 1;
    outWidth = floor((width - poolSize(2)) / stride) + 1;
    
    % 初始化输出矩阵
    output = zeros(outHeight, outWidth, channels);
    
    % 最大值池化操作
    for c = 1:channels % 遍历每个通道
        for i = 1:outHeight
            for j = 1:outWidth
                % 计算池化窗口
                hStart = (i - 1) * stride + 1;
                hEnd = hStart + poolSize(1) - 1;
                wStart = (j - 1) * stride + 1;
                wEnd = wStart + poolSize(2) - 1;

                % 取出池化窗口,并计算最大值
                window = input(hStart:hEnd, wStart:wEnd, c);
                output(i, j, c) = max(window(:)); % 获取窗口内的最大值
            end
        end
    end
end

平均池化:计算池化窗口内所有值的平均,平滑特征。公式为:

P avg = 1 m n ∑ i = 1 m ∑ j = 1 n a i j P{\text{avg}} = \frac{1}{mn} \displaystyle\sum_{i=1}^{m} \sum_{j=1}^{n} a{_{ij}} Pavg=mn1​i=1∑m​j=1∑n​aij​
平均池化的matlab实现:

function output = averagePooling(input, poolSize, stride)
    % 输入检查
    assert(ndims(input) == 3, '输入必须是三维数组 (高度 x 宽度 x 通道)');
    assert(all(size(poolSize) == 2), '池化大小必须是2维 [h, w]');
    
    [height, width, channels] = size(input);
    % 计算输出的高度和宽度
    outHeight = floor((height - poolSize(1)) / stride) + 1;
    outWidth = floor((width - poolSize(2)) / stride) + 1;
    
    % 初始化输出矩阵
    output = zeros(outHeight, outWidth, channels);
    
    % 平均池化操作
    for c = 1:channels % 遍历每个通道
        for i = 1:outHeight
            for j = 1:outWidth
                % 计算池化窗口
                hStart = (i - 1) * stride + 1;
                hEnd = hStart + poolSize(1) - 1;
                wStart = (j - 1) * stride + 1;
                wEnd = wStart + poolSize(2) - 1;

                % 取出池化窗口,并计算平均值
                window = input(hStart:hEnd, wStart:wEnd, c);
                output(i, j, c) = mean(window(:)); % 计算窗口内所有元素的平均值
            end
        end
    end
end

滑动窗口:通过滑动池化窗口来提取特征,通常使用 ( 2 × 2 2 \times 2 2×2) 或 ( 3 × 3 3 \times 3 3×3) 的窗口。

优势

-降低计算量:通过减少特征图的空间维度,提升训练效率。
增强不变性:使得模型对输入的轻微变形(如平移、缩放)更加鲁棒。

4.批量归一化(Batch Normalization)

作用
批量归一化主要用于解决内部协变量偏移问题,加速模型训练并提高稳定性。
过程

计算均值和方差:对每个小批量的数据计算均值和方差:

μ B = 1 m ∑ j = 1 m x j \mu_B= \frac{1}{m}\displaystyle\sum_{j=1}^{m} x_j μB​=m1​j=1∑m​xj​
σ B 2 = 1 m ∑ j = 1 m ( x j − μ B ) 2 \sigma_B^2 = \frac{1}{m} \displaystyle\sum_{j=1}^{m} (x_j - \mu_B)^2 σB2​=m1​j=1∑m​(xj​−μB​)2

标准化:使用均值和方差对输入进行标准化处理:

x ^ j = x j − μ B σ B 2 + ϵ \hat{x}_j = \frac{x_j - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^j​=σB2​+ϵ ​xj​−μB​​

缩放和偏移:通过可学习的参数 ( γ \gamma γ) 和 ( β \beta β ) 进行缩放和偏移:

y j = γ x ^ j + β y_j = \gamma \hat{x}_j + \beta yj​=γx^j​+β
优势

加速训练:标准化层输入,减少层间的协变量偏移,加快模型收敛。
提高稳定性:缓解梯度消失,增强训练过程的稳定性。
减少过拟合:引入随机性,使模型对训练数据的依赖性降低,有助于正则化。
BN2d的matlab实现:


function result = BN2d(input, mean, var, weight, bias)
    % 输入检查
    assert(ndims(input) == 4, '输入必须是四维数组');
    assert(size(mean, 2) == size(var, 2) && size(var, 2) == size(weight, 2) && size(weight, 2) == size(bias, 2), ...
           '均值、方差、权重和偏置必须具有相同的通道数');

    channels = size(mean, 2);  % 通道数
    std_dev = sqrt(var + eps);  % 计算标准差
    result = (input - mean) ./ std_dev .* weight + bias;  % 向量化计算
end

总结

通过卷积、激活、池化和批量归一化这四个操作,卷积神经网络能够高效地处理图像数据,提取多层次的特征。这些操作的有效结合不仅提升了模型的学习能力和表现,还加速了训练过程,增强了模型的鲁棒性。并且根据上述卷积,池化,激活,bn模块,就可以开始搭建简单的神经网络结构了。

标签:卷积,poolSize,stride,池化,归一化,input,size
From: https://blog.csdn.net/qq_45041298/article/details/142604268

相关文章

  • 【鸟类识别系统】计算机毕设项目+卷积神经网络算法+人工智能+深度学习+模型训练+Pytho
    一、介绍鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网......
  • 【花朵识别系统】计算机毕设案例+卷积神经网络算法+人工智能+深度学习+Django网页界面
    一、介绍花朵识别系统。本系统采用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,并基于前期收集到的5种常见的花朵数据集(向日葵、玫瑰、蒲公英、郁金香、菊花)进行处理后进行模型训练,最后得到一个识别精度较高的模型,然后保存为本地的h5格式文件,便......
  • 【交通标志识别系统】计算机毕设案例+卷积神经网络算法+人工智能+深度学习+模型训练+D
    一、介绍交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Dj......
  • 卷积神经网络-迁移学习
    文章目录一、迁移学习1.定义与性质2.步骤二、BatchNormalization(批次归一化)三、ResNet网络1.核心思想2.残差结构(1)残差块(2)残差结构类型四、总结一、迁移学习迁移学习(TransferLearning)是一种强大的机器学习方法,其核心思想是将在一个任务(源任务)上学到的知识或模型......
  • [深度学习]卷积神经网络CNN
    1图像基础知识importnumpyasnpimportmatplotlib.pyplotasplt#图像数据#img=np.zeros((200,200,3))img=np.full((200,200,3),255)#可视化plt.imshow(img)plt.show()#图像读取img=plt.imread('img.jpg')plt.imshow(img)plt.show()2CNN概述卷积层conv+......
  • 标准化和归一化的定义、公式、作用、示例、区别
    标准化(Standardization)和**归一化(Normalization)**是数据预处理中常用的两种技术,目的是调整数据的尺度,使得不同特征的数据可以在同一水平上进行比较或处理。这两种方法在形式和用途上有所不同,下面分别进行介绍并举例说明。1.标准化(Standardization)定义:标准化是通过对......
  • 【鸟类识别系统】+计算机毕设项目+卷积神经网络算法+人工智能+深度学习+模型训练+Pyth
    一、介绍鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作......
  • 【动物识别系统】计算机毕设项目案例+Python卷积神经网络算法+模型训练+人工智能+深度
    一、介绍动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现......
  • CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
    近年来,VisionTransformer(ViT)在计算机视觉领域取得了巨大突破。然而ViT模型通常计算复杂度高,难以在资源受限的移动设备上部署。为了解决这个问题,研究人员提出了ConvolutionalAdditiveSelf-attentionVisionTransformers(CAS-ViT),这是一种轻量级的ViT变体,旨在在效率和性......
  • 时序预测 | Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数
    时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)目录时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)预测效果基本介绍程序设计参考资料预测效果基本介绍1.Matlab实现SSA-TCN......