Pytorch学习笔记——卷积操作

news2024/12/25 15:32:55

一、认识卷积操作

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

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

二、运用卷积操作

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.coloradmin.cn/o/1653511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ConvNeXt网络的图像识别

1、前言 ConvNeXt 网络基于传统的卷积神经网络,与当下 transformer当道而言简直是一股清流 ConvNeXt并没有特别复杂或者创新的结构 ConvNeXt 网络有五种大小,可以参考下面 2、项目实现 完整的项目如下: 这里参考了网上的ConvNeXt 模型&…

揭秘App如何翻倍广告收益:科学变现的秘诀

在数字时代,移动应用(App)已成为日常生活的一部分。无论是娱乐、教育还是工具类应用,它们为用户提供了便捷的服务。然而,许多App开发者面临一个共同的挑战:如何在免费的基础上实现盈利?答案之一…

生产制造中刀具管理系统,帮助工厂不再频繁换刀

一、刀具管理的定义与重要性 刀具管理是指对生产过程中使用的各种刀具进行计划、采购、存储、分配、使用、监控、维修和报废等全过程的管理。刀具作为制造过程中的直接工具,其性能、质量和使用效率直接影响产品的加工精度、表面质量和生产效率。因此,建…

在全志H616核桃派1B开发板Python进行GPIO按键功能实现

前言​ 按键是最简单也最常见的输入设备,很多产品都离不开按键,包括早期的iPhone,今天我们就来学习一下如何使用Python来编写按键程序。有了按键输入功能,我们就可以做很多好玩的东西了。 实验目的​ 编程实现按键输入检测。 …

Shell变成规范与变量

目录 1. Shell脚本 1.1 Shell脚本概述 1.2 Shell的作用 1.3 Shell脚本的构成 2. 重定向与管道操作 2.1 交互式硬件设备 ​ 2.2 重定向操作 3. shell变量 3.1 自定义变量 3.2 变量的作用范围​编辑 3.3 整数变量的运算 4. 环境变量 4.1 特殊的Shell变量 4.2 只读变…

SWAT模型【建模方法、实例应用、高级进阶技能】实践

第一部分:SWAT模型实践部分 一、SWAT模型及应用介绍 1.1 面源污染概要 1.2 SWAT模型及应用 1.3 SWAT模型原理 1.4 SWAT模型输入文件 1.5 ArcGIS与SWAT关系 二、SWAT模型中GIS必备技术 2.1 GIS软件平台 2.2 ArcGIS10.6安装和注意事项 2.3 ArcGIS入门 2.…

【如此简单!数据库入门系列】之无序不代表混乱 -- 堆文件

文章目录 前言堆文件链表实现页目录实现总结系列文章 前言 还记得上次遗留的问题吗? 以什么组织方式将数据保存在磁盘中? 今天我们接着讨论这个问题。 首先想一个问题:有一天,你开着自己心爱的大型SUV去超市购物。在停车场入口看…

Python中tkinter编程入门1

1 tkinter库简介 tkinter是Python的标准库,用来进行GUI(Graphical User Interface,图形用户界面)编程。 2 导入tkinter库 tkinter是Python默认的GUI库,因此,IDLE中已经包含了该库,使用时无需…

爱奇艺文娱知识图谱的构建与应用实践

2012年5月,Google发布了知识图谱(Knowledge Graph),以提升搜索引擎返回的答案质量和用户查询的效率。有了知识图谱作为辅助,搜索引擎能够洞察用户查询背后的语义信息,返回更为精准、结构化的信息,更大可能地满足用户的…

抖音小店怎么运营?最全的运营攻略来了?

大家好,我是电商糖果 很多开好店铺的小伙伴,都会遇到一个难题,那就是不会运营店铺。 可能好几个月才出十几单,甚至体验分都没有弄出来。 说实话,这种情况糖果见多了。 糖果做抖音小店也有四年多了,也开…

STM32F1#1(入门了解)

一、STM32开发平台和工具 1.1 STM32芯片介绍 典型微控制器由CPU(运算器、控制器)、RAM、ROM和输入输出组成。 1.2 STM32核心板 STM32核心板配件: ①JTAG/SWD仿真-下载器 ②通信-下载模块 ③OLED显示屏 1) 通信-下载模…

uniapp 小程序图片懒加载组件 ImageLazyLoad

预览图 组件【ImageLazyLoad】代码 <template><viewclass"image-lazy-load":style"{opacity: opacity,borderRadius: borderRadius rpx,background: background,transition: opacity ${time / 1000}s ease-in-out,}":class"image-lazy-loa…

请大数据把我推荐给正在申请小程序地理位置接口的人

小程序地理位置接口有什么功能&#xff1f; 若提审后被驳回&#xff0c;理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;那么遇到这种情况&#x…

Python程序设计 函数(三)

练习十一 函数 第1关&#xff1a; 一元二次方程的根 定义一个函数qg&#xff0c;输入一元二次方程的系数a,b,c 当判别式大于0&#xff0c;返回1和两个根 当判别式等于0&#xff0c;返回0和两个根 当判别式小于0&#xff0c;访问-1和两个根 在主程序中&#xff0c;根据函数返回…

c 双向链表

图片 #include <stdio.h> #include <stdlib.h> #include <string.h>int main(void){ struct film{char name[20];int id;struct film *pre; //前向指针struct film *next; //后向指针 };struct film *headNULL;struct film *ls,*lspre,*work;in…

微信小程序16: 组件通信

父子组件之间的通信 父子组件通信一共有三种方式 属性绑定 用于父组件向子组件的指定属性设置数据&#xff0c;仅能设置JSON兼容的数据 事件绑定 用于子组件向父组件传递数据&#xff0c;可以传递任意数据 获取组件实例 父组件还可以通过this.selectComponent()获取子组件的实…

【C++】:模板初阶

目录 一&#xff0c;泛型编程二&#xff0c;函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三&#xff0c;类模板3.1 类模板的定义格式3.2 类模板的实例化 一&#xff0c;泛型编程 在C语言中如何实现一个通用的交换…

在Leaflet中点对象使用SVG和Canvas两种模式的对比

目录 前言 一、关于SVG和Canvas 1、SVG知识 2、Canvas知识 3、优缺点 二、SVG和Canvas在Leaflet的使用 1、相关类图 2、Leaflet的默认展示方式 三、SVG和Canvas实例及性能对比 1、SVG模式及性能对比 2、Canvas优化 总结 前言 众所周知&#xff0c;在Leaflet当中&#…

我独自升级下载 我独自升级崛起一键下载安装

近期&#xff0c;动画《我独自升级》凭借其高涨的人气&#xff0c;迅速席卷了各大平台&#xff0c;其热度非凡。乘着这股风潮&#xff0c;韩国知名厂商网石集团火速推出了同名游戏力作《我独自升级&#xff1a;ARISE》&#xff0c;让众多粉丝得以跨越次元壁垒&#xff0c;亲自投…

批量图片重命名及汇总

又一堆图片文件需要处理... 源文件分布&#xff1a; 有N个文件夹&#xff0c;每个文件夹下又有M个子文件夹&#xff0c;每个子文件夹下有X张图片。 例如文件夹A下有子文件夹A1,A2,A3&#xff0c;子文件夹A1下有图片a-1,a-2,a-3...... 处理目标&#xff1a; 1、将所有图片汇…