神经网络 torch.nn---Convolution Layers

news2024/10/4 6:35:18

torch.nn — PyTorch 2.3 documentation

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io)

torch.nn和torch.nn.functional的区别

  • torch.nn是对torch.nn.functional的一个封装,让使用torch.nn.functional里面的包的时候更加方便

  • torch.nn包含了torch.nn.functional,打个比方,torch.nn.functional相当于开车的时候齿轮的运转,torch.nn相当于把车里的齿轮都封装好了,为我们提供一个方向盘

  • 如果只是简单应用,会torch.nn就好了。但要细致了解卷积操作,需要深入了解torch.nn.functional

  • 打开torch.nn.functional的官方文档,可以看到许多跟卷积相关的操作:torch.nn.functional — PyTorch 2.3 documentation

torch.nn中Convolution Layers 卷积层

  1. 一维卷积层 torch.nn.Conv1d
  2. 二维卷积层 torch.nn.Conv2d
  3. 三维卷积层 torch.nn.Conv3d

一维卷积层 torch.nn.Conv1d

class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

一维卷积层,输入的尺度是(N, C_in,L),输出尺度( N,C_out,L_out)的计算方式:

说明

  • bigotimes: 表示相关系数计算
  • stride: 控制相关系数的计算步长
  • dilation: 用于控制内核点之间的距离,详细描述在这里
  • groups: 控制输入和输出之间的连接, group=1,输出是所有的输入的卷积;group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。

Parameters:

  • in_channels(int) – 输入信号的通道
  • out_channels(int) – 卷积产生的通道
  • kerner_size(int or tuple) - 卷积核的尺寸
  • stride(int or tupleoptional) - 卷积步长
  • padding (int or tupleoptional)- 输入的每一条边补充0的层数
  • dilation(int or tuple, `optional``) – 卷积核元素之间的间距
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数
  • bias(booloptional) - 如果bias=True,添加偏置

shape:
输入: (N,C_in,L_in)
输出: (N,C_out,L_out)
输入输出的计算方式:

变量:
weight(tensor) - 卷积的权重,大小是(out_channelsin_channelskernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel

二维卷积层

1、torch.nn.functional.conv2d 

torch.nn.functional.conv2d(inputweightbias=Nonestride=1padding=0dilation=1groups=1)

对几个输入平面组成的输入信号应用2D卷积。

参数:

  • input: 输入,数据类型为tensor,形状尺寸规定为:(minibatch, 几个通道(in_channels), 高, 宽)

  • weight: 权重。更专业地来说可以叫卷积核,形状尺寸规定为:(输出的通道(out_channel), in_channels/groups(groups一般取1), 高kH, 宽kW)

  • bias: 偏置。可选偏置张量 (out_channels) 

  • strids: 步幅。卷积核的步长,可以是单个数字或一个元组 (sh x sw)

  • padding: 填充。默认为1 - padding – 输入上隐含零填充。可以是单个数字或元组。

  • 默认值:0 - groups – 将输入分成组,in_channels应该被组数除尽

举例讲解参数strids

输入一个5×5的图像,其中的数字代表在每个像素中的颜色显示。卷积核设置为3×3的大小。

  • strids参数的输入格式是单个数或者形式为 (sH,sW) 的元组,可以理解成:比如输入单个数:strids=1,每次卷积核在图像中向上下或左右移1位;如果输入strids=(2,3),那么每次卷积核在图像中左右移动(横向移动)时,是移动2位,在图像中上下移动(纵向移动)时,是移动3位。
  • 本例设置strids=1

第一次移位:

  • 基于上述的假设,在做卷积的过程中,需要将卷积核将图像的前三行和前三列进行匹配:

  • 在匹配过后,进行卷积计算对应位相乘然后相加,即

  • 上面的得出的10可以赋值给矩阵,然后作为一个输出

 之后卷积核可以在图像中进行一个移位,可以向旁边走1位或2位,如下图(向右走2位)。具体走多少位由strids参数决定,比如strids=2,那就是走2位。本例设置stride=1。

第二次移位:

  • 向右移动一位,进行卷积计算:

以此类推,走完整个图像,最后输出的矩阵如下图。这个矩阵是卷积后的输出

举例讲解参数padding

padding的作用是在输入图像的左右两边进行填充,padding的值决定填充的大小有多大,它的输入形式为一个整数或者一个元组 ( padH, padW ),其中,padH=高padW=宽默认padding=0,即不进行填充。

  • 仍输入上述的5×5的图像,并设置padding=1,那么输入图像将会变成下图,即图像的上下左右都会拓展一个像素,然后这些空的地方像素(里面填充的数据)都默认为0。

  • 按上面的顺序进行卷积计算,第一次移位时在左上角3×3的位置,卷积计算公式变为:

  • 以此类推,完成后面的卷积计算,并输出矩阵

程序代码

import torch
import torch.nn.functional as F

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]])

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

print(input.shape)
print(kernel.shape)

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

# Stride=2
output2 = F.conv2d(input, kernel, stride=2)
print(output2)

#  padding=1
output3 = F.conv2d(input, kernel, stride=1, padding=1)
print(output3)

运行结果

2、torch.nn.Conv2d

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

二维卷积层, 输入的尺度是(N, C_in,H,W),输出尺度(N,C_out,H_out,W_out)的计算方式:

Parameters:

  • in_channels(int) – 输入信号的通道
  • out_channels(int) – 卷积产生的通道
  • kerner_size(int or tuple) - 卷积核的尺寸
  • stride(int or tupleoptional) - 卷积步长
  • padding(int or tupleoptional) - 输入的每一条边补充0的层数
  • dilation(int or tupleoptional) – 卷积核元素之间的间距
  • groups(intoptional) – 从输入通道到输出通道的阻塞连接数
  • bias(booloptional) - 如果bias=True,添加偏置

shape:
input: (N,C_in,H_in,W_in)
output: (N,C_out,H_out,W_out)or(C_out,H_out,W_out)

变量:
weight(tensor) - 卷积的权重,大小是(out_channelsin_channels,kernel_size)
bias(tensor) - 卷积的偏置系数,大小是(out_channel

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

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

相关文章

使用API有效率地管理Dynadot域名,删除已设置的文件夹

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

几种更新 npm 项目依赖的实用方法

几种更新 npm 项目依赖的实用方法 引言1. 使用 npm update 命令2. 使用 npm-check-updates 工具3. 使用 npm outdated 命令4. 直接手动更新 package.json 文件5. 直接安装最新版本6. 使用自动化工具结语 引言 在软件开发的过程中,我们知道依赖管理是其中一个至关重…

Linux基础指令磁盘管理002

LVM(Logical Volume Manager)是Linux系统中一种灵活的磁盘管理和存储解决方案,它允许用户在物理卷(Physical Volumes, PV)上创建卷组(Volume Groups, VG),然后在卷组上创建逻辑卷&am…

【Unity性能优化】使用多边形碰撞器网格太多,性能消耗太大了怎么办

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

【多模态】35、TinyLLaVA | 3.1B 的 LMM 模型就可以实现 7B LMM 模型的效果

文章目录 一、背景二、方法2.1 模型结构2.2 训练 pipeline 三、模型设置3.1 模型结构3.2 训练数据3.3 训练策略3.4 评测 benchmark 四、效果 论文:TinyLLaVA: A Framework of Small-scale Large Multimodal Models 代码:https://github.com/TinyLLaVA/T…

Stable Diffusion——四种模型 LoRA(包括LyCORIS)、Embeddings、Dreambooth、Hypernetwork

目前 Stable diffusion 中用到主要有四种模型,分别是 Textual Inversion (TI)以 Embeddings 为训练结果的模型、Hypernetwork 超网络模型、LoRA(包括 LoRA 的变体 LyCORIS)模型、Dreambooth 模型。 视频博主 koiboi 用…

儿童护眼灯哪个好?带你了解适合儿童的护眼灯款式分享

儿童护眼灯哪个好?作为我们日常生活中极为实用的小家电,为了确保使用台灯时的舒适性并且保护视力,选择一款专业的护眼台灯成为了一个明智的决定。这样的台灯能够提供更舒适、均匀的照明环境,那么到底儿童护眼灯哪个好你&#xff1…

LeetCode刷题之HOT100之不同路径

2024/6/6 小雨,没停。明天就要高考啦,回想五年前我也带着紧张与期待走过这些天,祝高考学子一切顺利。Anyway,早上一到实验室我就去看望我的栀子花,带着满怀的期待去看它长大了多少,是的,花苞还在…

umijs 服务端渲染(SSR) 指南

umijs 服务端渲染(SSR) 指南 Umi 是什么? Umi,中文可发音为乌米,是可扩展的企业级前端应用框架。Umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备,并以此进…

科普!终于把手机副卡给搞清楚了!

你知道什么是手机副卡吗? 你开通过手机副卡吗? 小小的脑袋,大大的疑问? 可能很多朋友对手机副卡这个词比较懵,那不要紧,接下来小编给大家介绍的这是关于手机副卡。 ​ 十个问题,带你搞清楚什…

专用于恢复iOS系统的数据恢复软件

一、简介 1、一款专门为苹果iOS设备设计的数据恢复软件,支持iPhone、iPad和iPod Touch等设备的数据恢复。这款软件能够恢复包括微信聊天记录、通讯录、短信、备忘录等多种类型的数据。用户可以通过设备扫描恢复、iTunes备份恢复和iCloud备份恢复三种模式来进行数据恢…

【MySQL数据库】MySQL 高可用搭建方案——MHA实战

MHA(Master High Availability) MHA实战 MHA(Master High Availability) 一、MHA简介二、MHA搭建准备要求:mha集群搭建,4台服务器,1主2从,1台mha2.1实验思路2.2实验准备 三、搭建MyS…

Python代码关系图生成,帮助快速熟悉一个项目

一、静态代码关系图 工具1、pyreverse pyreverse 是一个由 Logilab 开发的 Python 工具,它能够自动生成 UML (统一建模语言) 类图,这些类图基于 Python 源代码。pyreverse 可以分析 Python 代码,并从中提取出类、模块、函数、方法和它们之间…

如何通过Python SMTP配置示例发附件邮件?

Python SMTP配置的步骤?SMTP服务器的优缺点有哪些? 当我们需要发送包含附件的邮件时,自动化的解决方案显得尤为重要。Python提供了SMTP库,使我们能够轻松配置并发送带有附件的邮件。AokSend将通过一个示例来展示如何操作&#xf…

大坝监测新规范的改进与实施

近年来,为了进一步保障大坝的安全运行,相关部门对大坝监测规范进行了多项改进。本文将详细介绍这些改进措施及其重要性。 1、巡视检查的部位由原来的7个增加到8个,新增了对监测设施的巡查。这一改动确保了监测设施的正常运行,能够…

CR80通用清洁卡:证卡打印机、ATM机、POS机、读卡器等卡片设备清洁维护的好助手!

随着科技的进步,ATM机、POS终端、门禁系统、证卡打印机、读卡器等卡片设备在我们的日常生活中扮演着越来越重要的角色,些设备在长时间使用和环境因素的影响下,容易积聚油脂、灰尘和其他污染物,从而对其性能和功能产生负面影响。 深…

广东智慧物流2024年端午节放假安排

广东智慧物流2024年端午节放假安排

C# 反射类Assembly 程序集(Assembly)用法

常见的两种程序集: 可执行文件(.exe文件)和 类库文件(.dll文件)。 在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。 他们之间是一种从属关系,也就是说&…

【YOLOv10改进[CONV]】2024年的DynamicConv助力YOLOv10目标检测效果 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将使用2024的DynamicConv助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后参数量对比: 目录 一 DynamicConv

PyTorch 相关知识介绍

一、PyTorch和TensorFlow 1、PyTorch PyTorch是由Facebook开发的开源深度学习框架,它在动态图和易用性方面表现出色。它以Python为基础,并提供了丰富的工具和接口,使得构建和训练神经网络变得简单快捷。 发展历史和背景 PyTorch 是由 Fac…