当前位置: 首页 > news >正文

Pytorch学习笔记——卷积操作

一、认识卷积操作

        卷积操作是一种数学运算,它涉及两个函数:输入函数(通常是图像)和卷积核(也称为滤波器或特征检测器)。卷积核在输入函数上滑动,将核中的每个元素与其覆盖的输入函数区域中的对应元素相乘,然后将所有乘积相加,形成输出函数的一个值。这个过程在整个输入函数上重复,生成一个新的二维数组,称为特征图或激活图。

        卷积操作的主要目的是从输入数据中提取特征。通过改变卷积核的值,可以检测不同类型的特征,如边缘、角点、纹理等。

二、运用卷积操作

1、卷积操作函数

        在PyTorch中,可以使用torch.nn.functional.conv2d函数执行二维卷积操作。该函数的输入包括输入张量、卷积核、以及其他可选参数,如步长(stride)、填充(padding)等。

2、函数参数解释

对常用的参数进行一些说明

  1. 输入通道数 (in_channels): 这表示输入图像有多少个颜色通道。例如,对于彩色图像,通常有红、绿、蓝三个通道,所以输入通道数就是3。
  2. 输出通道数 (out_channels): 这表示卷积操作后,你希望有多少个特征图或者卷积核。每一个特征图都可以看作是一种特征检测器,用于检测输入图像中的某种特定特征。
  3. 卷积核大小 (kernel_size): 这表示卷积核的尺寸。卷积核就像一个滑动窗口,在输入图像上滑动,进行像素值的加权求和。常见的卷积核大小有3x3、5x5等。
  4. 步长 (stride): 这表示卷积核在输入图像上滑动时,每次移动的距离。步长越大,输出的特征图尺寸就越小。
  5. 填充 (padding): 在输入图像的周围添加额外的像素值,通常是0。填充的目的是为了控制输出特征图的尺寸,以及让卷积核能够处理到输入图像的边界像素。

其他的具体参数,可以查看官方文档,里面有详细说明

torch.nn.functional.conv2d — PyTorch 2.3 documentationicon-default.png?t=N7T8https://pytorch.org/docs/stable/generated/torch.nn.functional.conv2d.html#torch.nn.functional.conv2d

3、简单进行卷积操作

常理,先进行导包操作

import torch
import torch.nn.functional as F

接着定义输入的矩阵和卷积核,输入矩阵形状为5*5,卷积核大小为3*3

# 输入
input = torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1]])# 卷积核
kernel = torch.tensor([[1, 2, 1],[0, 1, 0],[2, 1, 0]])

 将输入图像和卷积核重塑为四维张量,以适应conv2d函数的要求

input = torch.reshape(input, [1, 1, 5, 5])
kernel = torch.reshape(kernel, [1, 1, 3, 3])

输出张量的形状为[1, 1, 3, 3],其中第一个和第二个维度分别表示批量大小和通道数(在这个例子中都是1),第三个和第四个维度表示输出特征图的高和宽。

接着,执行卷积操作

output = F.conv2d(input, kernel, stride=1, padding=0)

得出结果如下:

三、卷积函数的原理

        这里就结合着上面的demo来讲解一下,如果学过矩阵的话,这就很好理解了,在默认步长为1的情况下,由于卷积核是3*3的,那么就会在原来的输入矩阵中,框出同样为3*3的区域,按照矩阵中每一个位置对应相乘,再相加,就得到卷积后3*3矩阵的第一行第一列的结果10

接下来红色所示的框会移动,重复上述操作即可得到卷积结果

四、卷积层的工作原理

        卷积层是卷积神经网络(CNN)中的基本组件之一。它的工作原理是通过在输入数据上滑动卷积核来提取特征。每个卷积核都可以学习并检测输入数据中的特定类型的特征。卷积层的输出是一个特征图,其中每个位置的值表示该位置在输入数据中是否存在某种特征。后期将会和Tensorboard结合使用,更加直观地了解工作过程。

http://www.lryc.cn/news/344201.html

相关文章:

  • 探索鸿蒙开发:鸿蒙系统如何引领嵌入式技术革新
  • chrome extension插件替换网络请求中的useragent
  • PHP基础【介绍,注释,更改编码,赋值,数据类型】
  • ASP.NET小型证券术语解释及翻译系统的设计与开发
  • 硬件知识积累 音频插座的了解,看音频插座的原理图来了解音频插座的引脚。
  • error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ......
  • 邮箱Webhook API发送邮件的性能怎么优化?
  • 并发编程实现
  • 基于EBAZ4205矿板的图像处理:12图像二值化(阈值可调)
  • 人大金仓数据库报com.kingbase8.util.KSQLException: 致命错误: 用户 “SYSTEM“ Password 认证失败
  • 文件加密软件哪个好?文件加密软件排行榜前十名(好用软件推荐)
  • Netty的第一个简单Demo实现
  • K8S 哲学 - 服务发现 services
  • Springboot工程创建
  • 日本站群服务器的优点以及适合该服务器的业务类型?
  • 堆的应用2——TOPK问题
  • leetcode-5. 最长回文子串
  • 【Flask 系统教程 1】入门及配置
  • 石家庄河北银行的
  • 【CCNP ENCOR OCG】CHAPTER 2》Spanning Tree Protocol
  • docker无法映射/挂载根目录
  • C++中不要重新定义继承而来的non-virtual函数
  • C++ 对象型参数和返回值
  • LeetCode 字符串专题——KMP算法_28. 找出字符串中第一个匹配项的下标
  • 上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝
  • 【管理咨询宝藏94】某国际咨询公司供应链财务数字化转型方案
  • C++_使用邻接表(链表-指针)实现有向图[完整示例及解释]
  • Gitlab自动化测试的配置
  • Qwen-Audio:推动通用音频理解的统一大规模音频-语言模型(开源)
  • 杭州破冰之举:全面取消住房限购,激发市场新活力