• 卷积神经网络中的 Full、Same 和 Valid 卷积



    在这里插入图片描述

    🎉欢迎来到AIGC人工智能专栏~卷积神经网络中的 Full、Same 和 Valid 卷积



    卷积神经网络(Convolutional Neural Network,CNN)是深度学习领域中应用广泛的神经网络类型之一,用于图像处理、计算机视觉、自然语言处理等任务。卷积操作是CNN的核心组成部分之一,而卷积中的 Full、Same 和 Valid 三种模式是卷积操作中的重要概念。本文将深入探讨这三种卷积模式的含义、用途以及如何在实际中应用它们。
    在这里插入图片描述

    卷积神经网络概述

    卷积神经网络是一种受到生物视觉系统启发的神经网络,特别适用于处理具有网格结构的数据,如图像。CNN的核心思想是通过卷积操作从输入数据中提取特征,然后将这些特征传递给全连接层进行分类或回归等任务。

    在这里插入图片描述

    卷积操作包括卷积核(或滤波器)的滑动以及卷积核与输入数据的点积运算。在这个过程中,卷积核在输入数据上滑动,不同的滑动方式会导致 Full、Same 和 Valid 三种卷积模式。

    Full 卷积

    Full 卷积模式,也称为"Full Padding",是指在卷积过程中,在输入数据的周围添加足够的零值填充,以保持输出特征图的大小与输入数据的大小相同。这种填充方式保留了输入数据的每个像素的信息,并且通常用于卷积神经网络的起始层,以防止特征图的尺寸缩小得太快。
    在这里插入图片描述

    在 Full 卷积模式中,输出特征图的大小计算公式为:

    O u t p u t S i z e = I n p u t S i z e + 2 ∗ P a d d i n g − K e r n e l S i z e + 1 OutputSize = InputSize + 2 * Padding - KernelSize + 1 OutputSize=InputSize+2PaddingKernelSize+1

    其中,OutputSize 是输出特征图的大小,InputSize 是输入数据的大小,Padding 是填充大小,KernelSize 是卷积核的大小。这个公式的关键在于填充的大小,它决定了输出特征图的尺寸是否与输入数据相等。

    Same 卷积

    Same 卷积模式是指在卷积过程中,在输入数据的周围添加适当的零值填充,以保持输出特征图的尺寸与输入数据的尺寸相近。具体来说,Same 卷积的填充大小会根据卷积核的大小和步幅(Stride)来自动计算,以使输出特征图的尺寸尽可能接近输入数据的尺寸。
    在这里插入图片描述

    Same 卷积的优点是可以保留输入数据的空间维度信息,使得特征图的大小变化较小。这在需要对输入数据的空间结构进行保留时非常有用,例如在物体检测和分割任务中。

    Valid 卷积

    Valid 卷积模式,也称为"No Padding",是指在卷积过程中不对输入数据进行填充,输出特征图的尺寸会根据卷积核的大小和步幅而缩小。这意味着在 Valid 卷积中,不同位置的输出特征图像素对应于不同位置的输入数据像素。
    在这里插入图片描述

    Valid 卷积通常用于降低特征图的尺寸,以减少计算量和参数数量。在深度卷积神经网络中,通常会通过多次进行 Valid 卷积来逐渐减小特征图的尺寸,同时增加特征图的深度,以提取更高级别的特征。

    卷积模式的选择

    在设计卷积神经网络时,选择适当的卷积模式是非常重要的,它会影响到网络的性能和特征提取能力。以下是一些选择卷积模式的指导原则:

    1. 如果你希望输出特征图的尺寸与输入数据的尺寸相同,可以使用 Full 卷积。这在某些任务中非常有用,例如需要对输入数据的每个像素进行处理的任务。
      在这里插入图片描述

    2. 如果你希望输出特征图的尺寸与输入数据的尺寸相近,并且希望保留输入数据的空间结构信息,可以使用 Same 卷积。这在物体检测和分割等任务中通常很有用。

    3. 如果你希望减小特征图的尺寸以降低计算量,可以使用 Valid 卷积。这在深度卷积神经网络中常用于逐渐减小特征图的尺寸。
      在这里插入图片描述

    代码示例

    让我们通过一个简单的 Python 代码示例来演示 Full、Same 和 Valid 卷积的区别。我们将使用 TensorFlow 框架来进行示范:

    import tensorflow as tf
    
    # 输入数据大小
    input_size = (5, 5, 1)
    # 卷积核大小
    kernel_size = (3, 3)
    # 步幅
    strides = (1, 1)
    
    # 创建输入数据
    input_data = tf.ones(input_size)
    
    # Full 卷积
    full_conv = tf.keras.layers.Conv2D(1, kernel_size, strides=strides, padding='full')(input_data)
    print("Full Convolution Output Shape:", full_conv.shape)
    
    # Same 卷积
    same_conv = tf.keras.layers.Conv2D(1, kernel_size, strides=strides, padding='same')(input_data)
    print("Same Convolution Output Shape:", same_conv.shape)
    
    # Valid 卷积
    valid_conv = tf.keras.layers.Conv2D(1, kernel_size, strides=strides, padding='valid')(input_data)
    print("Valid Convolution Output Shape:", valid_conv.shape)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    通过上述代码,我们创建了一个输入数据(5x5x1),并分别进行了 Full、Same 和 Valid 卷积操作,然后输出了它们的特征图尺寸。你可以通过调整 input_sizekernel_sizestrides 来观察不同设置下的输出特征图大小。

    在这里插入图片描述

    结论

    Full、Same 和 Valid 卷积是卷积神经网络中常用的卷积模式,它们在不同的任务和网络结构中发挥着重要作用。选择适当的卷积模式可以帮助我们更好地处理图像数据,保留关键的空间信息,降低计算复杂性,以及提高网络性能。在实际应用中,根据具体任务和需求选择合适的卷积模式是设计卷积神经网络的关键之一。希望本文能够帮助你更好地理解和应用 Full、Same 和 Valid 卷积。


    🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
    📜您可能感兴趣的内容:

    在这里插入图片描述

  • 相关阅读:
    【利用冒泡排序的思想模拟实现qsort函数】
    带你一文理解JS数组
    pytest allure 生成报告过程
    Asymmetric channel bandwidths(非对称信道带宽)
    9月1日目标检测学习笔记——通用物体检测
    巧用AI玩转时事分析
    链表——双链表
    MAC下MNMP应用程序mysql配置文件my.cnf放在哪里?
    如何设计一个数据库
    1-JAVA-面向对象程序设计概论-笔记整理
  • 原文地址:https://blog.csdn.net/qq_43546721/article/details/132894413