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

卷积的计算——nn.Conv2d(Torch.nn里的Convolution Layers模块里的Conv2d类)

 **前置知识:

1、张量和通道

张量:多维数组,用来表示数据(图像、视频等)

通道:图像数据的一部分,表示不同的颜色或特征层

通道只是张量的其中一个维度

以一张RGB图像为例,

该图像数据可以用一个三维张量(shape等于(C,H,W))来表示

其中C表示通道数(对于RGB图像,C=3),H表示高度,W表示宽度

再以一批64张图像组成的数据对象来看,

它可以用一个四维张量(shape等于(N,C,H,W))来表示

其中N表示批次大小(一批次图像的数量)

关于通道的补充:

2、Reshape:输入数据和卷积核张量的重塑

input = torch.reshape(input, (1, 1, 5, 5))

  • 1第一个 1 表示有 1 张图片(批量大小)
  • 1第二个 1 表示输入的通道数(这里是单通道,表示灰度图像)
  • 55:分别表示图像的高度和宽度

kernel = torch.reshape(kernel, (1, 1, 3, 3))

  • 1第一个 1 表示有 1 个卷积核(输出通道数)
  • 1第二个 1 表示卷积核的输入通道数(与input的输入通道数匹配)
  • 33:分别表示卷积核的高度和宽度

通过重塑,增加的信息主要是关于批量大小和通道数,

这使得输入和卷积核符合 conv2d 函数的要求

(输入张量必须是四维的,形状为 (N, C, H, W),

卷积核(权重)必须是四维的,形状为 (out_channels, in_channels, kernel_height, kernel_width):)

补充:

一张2*2RGB图像与一个3*3卷积核的卷积:

reshape后:

input的形状是(1,3,2,2),1表示1张图片

卷积核的形状是(1,3,3,3),1表示1个输出通道

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

input输入张量(4维)
kernel卷积核(4维)
stride卷积核移动的步幅(可以是一个整数或元组,默认为 1)
padding在输入的边缘添加零填充(帮助保持输出的空间尺寸)

**代码:

步骤:

import torch.nn.functional as F

定义input、kernel——>修改成四维形状reshape——>使用conv2d进行卷积

灰度图像的卷积:帮助识别图像中的特定特征,如边缘或纹理

import torch
import torch.nn.functional as Finput=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]
])print(input.shape)
print(kernel.shape)input=torch.reshape(input,(1,1,5,5))  #图片数,图层数(通道数),宽,高
kernel=torch.reshape(kernel,(1,1,3,3))print(input.shape)
print(kernel.shape)output1=F.conv2d(input,kernel,stride=1)
print(output1)output2=F.conv2d(input,kernel,stride=2)
print(output2)output3=F.conv2d(input,kernel,stride=1,padding=1)
print(output3)

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

相关文章:

  • 确保接口安全:六大方案有效解决幂等性问题
  • 代码随想录算法训练营第二十九天| 93. 复原 IP 地址,78. 子集, 90. 子集 II
  • 【WebGis开发 - Cesium】三维可视化项目教程---初始化场景
  • 点云中ICP算法的详解
  • 抽象类Abstart Class
  • Redis:通用命令 数据类型
  • 【Python高级编程】探索Python库:创建引人入胜的交互界面
  • OpenCV Canny()函数
  • Java基础(3)
  • 【C语言】VS调试技巧
  • 【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师
  • 速盾:休闲类游戏如何选择高防cdn?
  • 电脑插上U盘不显示怎么回事?怎么解决?
  • Python 如何使用 SQLAlchemy 进行复杂查询
  • nginx主配置文件
  • 使用数据库:
  • python list, tuple dict,set的区别 以及**kwargs 的基本用法
  • 实用生活英语口语学习成人零基础入门柯桥专业外语培训
  • FLINK SQL数据类型
  • 汇编语言教程:打造你的第一款汇编语言小游戏 汇编语言教程攻略
  • 白色简洁大方公司企业网站源码 WordPress主题2款
  • MinIO分片上传超大文件(纯服务端)
  • leetcode链表(一)-移除链表元素
  • python的特殊方法——魔术方法
  • 深入浅出理解TCP三次握手与四次挥手
  • 如何在Windows和Linux查看正在监听的端口和绑定的进程
  • 如何用深度神经网络预测潜在消费者
  • 基于opencv答题卡识别判卷
  • ShardingSphere分库分表产品介绍
  • Java经典面试题-多线程打印