卷积层 原理与计算

本文详细介绍了卷积神经网络的核心模块——卷积层,包括一维和二维卷积的原理,卷积层的结构,以及卷积层在神经网络中的运算过程。卷积层通过卷积核提取图像特征,感受野的概念描述了卷积层中每个神经元与输入数据的局部连接。文章还探讨了卷积层的超参数,如卷积核大小、深度、步长和零填充,以及如何计算输出尺寸。最后,验证了卷积层的可训练参数数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:cheahom
来自公众号:CV算法恩仇录
关注获得第一手资源

目录

  • 卷积神经网络
  • 详解卷积层
  • 卷积层的运算

卷积神经网络

卷积神经网络(Convolutional Neural Network 又称 CNN 或 ConvNet)是一种具有表征学习、局部连接、权重共享平移不变性等特性的深层前馈神经网络。

卷积神经网络,最初是受生物学领域上的“感受野”机制的启发而提出的。

生物学领域的“感受野”机制指的是生物神经元只接受特定刺激区域内的信号,即感受器受刺激兴奋时,通过感受器官中的向心神经元将神经冲动(各种感觉信息)传到上位中枢,一个神经元所反应(支配)的刺激区域就叫做神经元的感受野。

卷积神经网络就是一种具有“感受野”的神经网络,一般由卷积层、池化层、激活层等交叉堆叠而成。卷积神经网络中卷积层上的任意一个权重,在一次计算中,只会与输入图像的一个特定区域相互关联,这一特定区域就是这个权重所对应的“感受野”。

最原始的神经网络是使用全连接层搭建的神经网络,卷积神经网络从基本原理上来讲,与全连接神经网络非常相似,它们都是由可优化的神经元组成,神经元内的权重与偏置量可根据梯度进行更新。

在前向传播过程中,每个神经元都会得到一些输入数据,这些数据与权重、偏置量进行内积运算后,再经由激活函数输出给下一层。

整个运算过程依旧可看做是一个可导的评分函数,输入是原始图像的所有像素值;输出是不同类别的评分值(最后一层使用全连接层输出评分值)。

详解卷积层

卷积层是整个卷积神经网络的核心模块,它承担着繁重的运算工作。

一维卷积

一维卷积时常用在信号处理任务中,计算信号的延迟累积程度。假设一个信号源每隔时刻 t t t 产生一次信号 x t x_t xt,此信号源的衰减率为 w k w_k wk,那么可知,在 k − 1 k-1 k1 个时刻之后,信息衰减为 k k k 时刻的 w k w_k wk 倍。

假设 w 1 = 1 w_1 = 1 w1=1 w 2 = 1 / 2 w_2 = 1/2 w2=1/2 w 3 = 1 / 4 w_3 = 1/4 w3=1/4,则在第 t t t 个时刻收到的信号 s t s_t st 为当前时刻所产生的信息,以及先前时刻延迟信息的叠加,即:
在这里插入图片描述

上式中 w 1 w_1 w1 w 2 w_2 w2

### 卷积层的工作原理 卷积层(Convolutional Layer)作为卷积神经网络的核心组成部分,在深度学习领域具有重要意义。其主要功能是通过对输入数据执行卷积操作来提取局部特征[^1]。 #### 局部连接权重共享 卷积层的一个显著特点是它的参数数量较少,这得益于局部连接和权重共享机制。具体来说,卷积核(Filter 或 Kernel)是一个小型矩阵,它会在整个输入图像上滑动并计算加权和。这种设计使得卷积层能够专注于检测特定模式而不考虑它们的位置[^2]。 #### 特征提取过程 在实际应用中,卷积层通过多个滤波器捕捉不同类型的特征。例如,在处理图像时,浅层的卷积层可能识别边缘或角点等简单结构;而深层则可以捕获更复杂的图案,比如物体部件或者整体形状。 以下是实现一个基本二维卷积操作的 Python 示例代码: ```python import numpy as np def convolve2d(image, kernel): # 获取输入图片尺寸 image_height, image_width = image.shape # 获取卷积核大小 kernel_size = kernel.shape[0] # 计算输出维度 (假设无填充且步幅为1) output_height = image_height - kernel_size + 1 output_width = image_width - kernel_size + 1 # 初始化结果张量 result = np.zeros((output_height, output_width)) # 执行逐元素乘法求和 for i in range(output_height): for j in range(output_width): window = image[i:i+kernel_size, j:j+kernel_size] result[i,j] = np.sum(window * kernel) return result # 测试用例 image = np.array([[1,2,3], [4,5,6], [7,8,9]]) kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]]) output = convolve2d(image, kernel) print(output) ``` 上述代码展示了如何手动定义一个简单的二维卷积函数,并将其应用于一个小规模的数据集之上。 #### 多通道扩展 当面对彩色图像或其他多维数据形式时,单个卷积核不足以描述全部信息。因此引入了多通道的概念——即每个输入通道对应独立的一组权重向量集合,最终这些响应会被累加以形成单一输出值。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值