卷积层结构与实现详解

news/2024/11/20 16:19:50/文章来源:https://www.cnblogs.com/crazypigf/p/18558641

在深度学习领域,卷积神经网络(Convolutional Neural Network, CNN)是图像任务中的核心模型架构,广泛应用于图像分类、目标检测等任务。本文将详细解析一个简单的卷积神经网络的卷积层代码示例,通过剖析其结构与运行过程,带领读者理解 CNN 中的基本设计与数学原理。


代码背景与理论基础

卷积操作原理

卷积操作是 CNN 的核心计算单元,它通过滑动卷积核(kernel)提取输入数据的局部特征。输出特征图(feature map)的大小由以下公式决定:

\[N=\left\lfloor \frac{W - F + 2P}{S} + 1 \right \rfloor \]

其中:

  • W:输入图像的宽或高(假设输入为正方形图像)。
  • F:卷积核的大小。
  • P:填充大小(Padding)。
  • S:步长(Stride)。
  • N:输出特征图的宽或高。

代码解析

下面代码实现了一个包含单层卷积的简单 CNN,结构如下:

import torch
import torch.nn as nn

这里导入了 PyTorch 的核心模块 torch 和神经网络模块 torch.nn。后者封装了 CNN 中的常用组件。


网络定义
class ConvNet(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=5, stride=2, padding=2)def forward(self, x):x = self.conv1(x)return x
  • 继承 PyTorch 的 nn.ModuleConvNet 是一个典型的网络模块,使用面向对象方式定义了网络的构造(__init__ 方法)和前向传播逻辑(forward 方法)。
  • 卷积层定义
    • nn.Conv2d:构建二维卷积层。
    • 参数解析:
      • in_channels:输入通道数,对 RGB 图像为 3。
      • out_channels:卷积核数量,控制输出通道数。
      • kernel_size=5:卷积核尺寸为 5 \(\times\) 5。
      • stride=2:步长为 2,表示卷积核每次滑动跳跃 2 个像素。
      • padding=2:填充 2 个像素,避免边界信息丢失。

输入输出尺寸计算

假设输入数据为大小 32 \(\times\) 32 的 RGB 图像,其形状为 (batch_size, channels, height, width),如下初始化:

x = torch.randn((1, 3, 32, 32))
  1. 输入尺寸:W=32,C=3(通道数)。

  2. 输出尺寸计算: 根据公式:

    \[N = \left \lfloor \frac{W - F + 2P}{S} + 1 \right \rfloor \]

    F=5、P=2、S=2。 代入计算:

    \[N= \left\lfloor \frac{32 - 5 + 2 \times 2}{2} + 1 \right\rfloor = \left\lfloor \frac{31}{2} + 1 \right\rfloor = 16 \]

    输出特征图大小为 16 \(\times\) 16。

  3. 通道变化:输入通道数 \(C_{in}=3\),卷积核个数决定输出通道数\(C_{out}=64\)

输出张量形状为 (1, 64, 16, 16)


测试网络

以下是完整的测试代码,用于验证卷积操作的正确性:

def main_func():x = torch.randn((1, 3, 32, 32))  # 模拟大小为 32x32 的 RGB 图像net = ConvNet(3, 64)  # 初始化网络,输入通道数为 3,输出通道数为 64out = net(x)  # 前向传播print(out.shape)  # 打印输出张量形状if __name__ == '__main__':main_func()

运行结果

torch.Size([1, 64, 16, 16])

输出结果表明:

  • 批量大小为 1(未改变)。
  • 输出通道数为 64。
  • 输出特征图尺寸为16 \(\times\) 16。

深入剖析

  1. 卷积层的作用
    • 卷积核通过滑动窗口提取输入特征的局部模式,例如边缘、纹理。
    • 多个卷积核(64 个)可学习多种特征模式。
  2. 参数配置的影响
    • 步长:步长越大,输出特征图尺寸越小,计算量减少,但可能丢失细节。
    • 填充:填充用于补偿边界丢失,提高输出特征图的空间维度。
    • 卷积核大小:卷积核越大,感受野越大,但计算量也会增加。
  3. 扩展方向
    • 在实际应用中,可以堆叠多层卷积以提取更高阶特征。
    • 可添加非线性激活函数(如 ReLU)、池化层(如 MaxPooling)等模块构建更复杂的网络。

小结

本文通过对一个简单卷积神经网络的实现逐步解析,阐明了卷积层的基本原理和在 PyTorch 中的实现方式。以下为本代码的几个关键点:

  1. 理解卷积公式:熟悉卷积操作的尺寸计算是构建 CNN 的基础。
  2. 网络模块化设计:利用 PyTorchnn.Module 提供的灵活接口,轻松实现自定义网络。
  3. 参数合理选择:卷积核大小、步长和填充的设置直接影响特征提取效果与计算复杂度。

本例虽为单层卷积,但通过理论和实践的结合,能够为构建更复杂的卷积神经网络打下基础。希望本文能帮助读者更深入理解 CNN 的核心概念与实现方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口文档和编写接口测试用例

一、熟悉接口文档和分析接口 1、发送接口文档 2、分析接口文档 3、了解需要测试接口,分析需求文档接口请求参数:接口返回参数:成功整理接口:(自己项目有哪些借款) cms项目接口:查询接口,登录接口,添加用户接口,用户管理接口,文章管理接口,删除用户接口,删除栏目接…

python代码实现RNN, LSTM, GRU

安装torch, transformers, loguru(本代码实现为下方版本,其余版本实现可比葫芦画瓢自行摸索)pip install torch==1.13.1 transformers==4.44.1 numpy==1.26.4 loguru -i https://pypi.tuna.tsinghua.edu.cn/simple/RNN:Recurrent Neural Network,网络结构如下图所示:import nu…

ChatGPT国内中文版镜像网站整理合集(2024/11/20)

ChatGPT 镜像站的用途 镜像站(Mirror Site)ChatGPT镜像网站是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相同或类似的服务和信息。​ 一、ChatGPT中文镜像站 ① yixiaai.com 支持4o以及o1,支持MJ绘画 ② chat.lify.vip 支持通用…

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:Windows 10• 开发工具:DevEco Studio NEXT Be…

13、优化器_(执行计划、统计信息)_1

执行计划 一个SQL文本,经过解析,经过解析之后,oracle发现有很多种执行方案,然后oracle在这多种执行方案中,选出一种oracle认为最优的一种执行方案,来作为执行计划,然后oracle按照执行计划一步步去执行 因为oracle有多种的执行方案,但是,有的执行方案快,有的执行方案慢…

12、表的访问方式(索引)_2

表的访问方式 以t1表为例来看表的访问方式 首先创建了一个用户,建立了一张表t1,按照object_id列排序的: SQL> create user u1 identified by u1; -- 创建用户u1 User created.SQL> grant connect,resource,dba to u1; -- 给u1授权 Grant succeeded.SQL> conne…

第十一课 接口测试之postman11.1

一、介绍postman Postman是一个网页调试工具,也可以调试css、html等 Postman的操作环境 环境:Postman Mac、Windows X32、Windows X64、Linux系统、 postman 浏览器扩展程序、postman chrome应用程序 Postman下载:https://www.postman.com/downloads/ 二、postman安装:略 三…

蠢就是坏,坏就是蠢

如题看着如今的社会乱象,我们不禁想:是什么人让我们的社会变成这样? 我们下面来讨论这个问题。 请注意,我们将阻碍社会发展的反动行为定义为坏的,行使这种行为的人定义为坏人。 而我的观点则如标题所示。 第一种 “蠢” 是自以为是,也就是以为自己无所不知,不认同或忽略…

为什么你的工作总是越忙越乱?答案可能出乎意料!

信息过载与任务混乱:现代职场的隐形敌人信息洪流对现代工作的挑战在现代社会,无论个人还是团队,几乎每天都要面对海量的信息。邮件、聊天工具、项目需求文档,甚至口头传递的信息,都让我们感到“时间不够用,信息处理不过来”。这种现象在企业和团队中尤为严重: 信息分散:…

CF1102(*^▽^*)

红黄橙黄绿绿,已完成A.Integer Sequence Dividing CF原题链接 题目大意: 给出\(n\),要求把序列\(1,2,…,n\)分成两个集合,输出两个集合的和的最小差值。\((1\leqslant n\leqslant 2\times 10^{9})\) 解题思路: 我们坚信它是可以分成我们想要的两个差值最小的集合的 差值一…