Torch常用函数

博主看开源遇到的torch常用函数,记录方便查阅

      • clamp()
      • Conv1d()
      • expand()
      • tril()
      • Parameter()
      • Identity()
      • flatten()
      • repeat()
      • contiguous()
      • narrow()
      • view() 与 reshape()
      • expand()
      • squeeze()和unsqueeze()
      • transpose()
      • permute()
      • size()和shape
      • masked_fill()
      • new_zeros()

clamp()

torch.clamp(input, min, max, out=None)

将输入input张量每个元素的范围限制到区间 [min,max],返回结果到一个新张量。

input (Tensor) – 输入张量

min (Number) – 限制范围下限

max (Number) – 限制范围上限

out (Tensor, optional) – 输出张量

>>> x=torch.randint(-100,1000,(3,4))
>>> print(x)
tensor([[ 40, 968, -56, 841],[557, 703, 655, 785],[195, 892, -96, 744]])
>>> x = torch.clamp(x, min=0, max=100)
>>> print(x)
tensor([[ 40, 100,   0, 100],[100, 100, 100, 100],[100, 100,   0, 100]])

Conv1d()

用于文本数据,只对宽度进行卷积,对高度不卷积

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

  • in_channels(int) – 输入信号的通道。在文本分类中,即为词向量的维度

  • out_channels(int) – 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积

  • kernel_size(int or tuple) - 卷积核的尺寸,卷积核的大小为(k,),第二个维度是由in_channels来决定的,所以实际上卷积大小为kernel_size*in_channels

  • stride(int or tuple, optional) - 卷积步长

  • padding (int or tuple, optional)- 输入的每一条边补充0的层数

  • dilation(int or tuple, `optional``) – 卷积核元素之间的间距

  • groups(int, optional) – 从输入通道到输出通道的阻塞连接数

  • bias(bool, optional) - 如果bias=True,添加偏置

expand()

其将单个维度扩大成更大维度,展某一维度后自身不会发生变化

x = torch.tensor([[1], [2], [3]])
x.expand(3,4)
tensor([[1, 1, 1, 1],[2, 2, 2, 2],[3, 3, 3, 3]])

tril()

pytorch中tril函数主要用于返回一个矩阵主对角线以下的下三角矩阵,其它元素全部为0。当输入是一个多维张量时,返回的是同等维度的张量并且最后两个维度的下三角矩阵的。

>>> torch.tril(torch.rand(4,4))
tensor([[0.3389, 0.0000, 0.0000, 0.0000],[0.1175, 0.3249, 0.0000, 0.0000],[0.4675, 0.0904, 0.6020, 0.0000],[0.6040, 0.2779, 0.7150, 0.2499]])

Parameter()

torch.nn.parameter.Parameter(data=None, requires_grad=True)

  • nn.Parameter会自动被认为是module的可训练参数,即加入到parameter()这个迭代器中去;而module中非nn.Parameter()的普通tensor是不在parameter中的。

  • nn.Parameter的对象的requires_grad属性的默认值是True,即是可被训练的,这与torth.Tensor对象的默认值相反。

Identity()

它实际上是一个恒等映射,不对输入进行任何变换或操作,只是简单地将输入返回作为输出。

它实际上在某些情况下是很有用的,其存在意义包括以下几点:

  • 连接路径或跳跃连接(Skip Connections): 在一些网络架构中,特别是残差网络(Residual Networks)或者一些需要跨层连接的架构(比如 DenseNet),nn.Identity() 可以用于实现跳跃连接。通过跳跃连接,神经网络可以直接从一个层传递信息到后续层,这有助于解决梯度消失或梯度爆炸等问题,同时也有助于提高模型的性能和训练速度。

  • 模型组合和特殊结构设计: 在设计复杂的神经网络结构时,nn.Identity() 可以用于在模型中创建一些特殊的连接或分支结构。通过使用恒等映射,可以更轻松地实现某些复杂模型的组合,或者通过条件语句动态地选择是否应用某些层。

  • 代码一致性和灵活性: 在编写神经网络代码时,有时需要保持一致性,可能会需要一个占位符层来代表某些特定的操作。nn.Identity() 可以填补这个需求,即使不对输入进行任何更改,也能保持代码的一致性和清晰度。

  • 简化模型和调试: 在一些情况下,为了简化模型或者调试网络结构,可以使用 nn.Identity() 层。它允许将某些部分固定为恒等映射,方便单独地测试网络的不同部分。

flatten()

flatten(dim)是对多维数据的降维函数,只保留dim之 前的维度,后面维度的数据全都挤在dim这一维。

>>>torch.rand((1,2,3,4)).flatten(2).shape
torch.Size([1, 2, 12])

repeat()

可以对张量进行重复扩充

>>>torch.rand((6)).repeat(2).shape
torch.Size([12])
>>>torch.rand((6,6)).repeat(2,2).shape
torch.Size([12, 12])
>>>torch.rand((6,6,6)).repeat(2,2,2).shape
torch.Size([12, 12, 12])

contiguous()

下面这些操作不进行数据拷贝和数据的改变,变的是元数据:

  • narrow()

  • view()

  • expand()

  • transpose()

这些操作改变数据后,会导致操作前的数据改变。

元数据后的数据is_contiguous() 返回为False

>>>x = torch.randn(3, 2)
>>>y = torch.transpose(x, 0, 1)
>>>y[0] = 0
x- tensor([[ 0,  0.8559],[ 0,  1.4375],[ 0,  1.0690]])
y- tensor([[      0,       0,       0],[ 0.8559,  1.4375,  1.0690]])>>>x = torch.randn(3, 2)
>>>y = torch.transpose(x, 0, 1).contiguous()
>>>y[0] = 0
x- tensor([[ 0.9730,  0.8559],[ 1.6064,  1.4375],[-1.0905,  1.0690]])
y- tensor([[      0,       0,       0],[ 0.8559,  1.4375,  1.0690]])

narrow()

  • dim:0表示对行操作,1表示对列操作

  • start:开始位置

  • length:取值个数

view() 与 reshape()

  • view只适合对满足连续性条件(contiguous)的tensor进行操作

  • reshape同时还可以对不满足连续性条件的tensor进行操作

expand()

其将单个维度扩大成更大维度

>>>data=torch.rand(4)
>>>data.expand(2,4)
tensor([[0.8853, 0.1025, 0.9653, 0.9350],[0.8853, 0.1025, 0.9653, 0.9350]])

squeeze()和unsqueeze()

squeeze():将维度为1的挤压移除(3,1,1,2)→(3,2)

unsqueeze(1):扩容一个维度为1的维度(3,2)→(3,1,2)

>>> a=torch.rand((3,2))
>>> a.unsqueeze(0).shape
torch.Size([1, 3, 2])
>>> a.unsqueeze(1).shape
torch.Size([3, 1, 2])
>>> a.squeeze().shape
torch.Size([3, 2])

transpose()

交换维度 (3,2)→(2,3)

>>>data=torch.rand(3,2)
tensor([[0.3341, 0.8254],[0.9084, 0.5621],[0.7031, 0.8052]])
>>>data.transpose(0,1)
tensor([[0.3341, 0.9084, 0.7031],[0.8254, 0.5621, 0.8052]])

permute()

交换维度 (1,3,2)→(1,2,3)

>>>data=torch.rand(1,3,2)
tensor([[[0.9002, 0.9547],[0.9944, 0.9828],[0.6325, 0.5995]]])
>>>data.permute(0,2,1)
tensor([[[0.9002, 0.9944, 0.6325],[0.9547, 0.9828, 0.5995]]])

size()和shape

  • shape是一个Tensor类中的属性

  • size()是Tensor从上面的类中继承来的一个方法

masked_fill()

  • mask是一个pytorch张量(Tensor),元素是布尔值,

  • value是要填充的值,填充规则是mask中取值为True位置用value填充。

>>>t = torch.randn(3,2)
>>>m = torch.randint(0,2,(3,2))
tensor([[1, 1],[0, 1],[0, 0]])
>>>t.masked_fill(m == 0, -100)
tensor([[   1.5305,   -0.8436],[-100.0000,   -1.3557],[-100.0000, -100.0000]])

new_zeros()

复制原来tensor的所有类型,比如数据类型和数据所在设备等等。

device="cuda" 
a=torch.rand(2,3,4).double() 
a=a.to(device) 
b=a.new_zeros((2,3,1)) 
btensor([[[0.],[0.],[0.]],[[0.],[0.],[0.]]], device='cuda:0', dtype=torch.float64)

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

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

相关文章

熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求

1. Spring Boot 核心理解 自动配置:了解 Spring Boot 的自动配置原理(EnableAutoConfiguration),包括如何查看和定制自动配置的内容。需要能解释 Spring Boot 如何减少样板代码。Spring Boot Starter:熟悉各种 starte…

Synchronized锁的升级流程详解

在Java多线程编程中,synchronized关键字用于确保在同一时刻只有一个线程可以访问被锁定的资源,从而维护数据的一致性和安全性。然而,在多线程环境中,锁的频繁获取和释放会带来性能开销。为了提高性能,Java虚拟机&#…

计算机组成原理(笔记7高速缓冲存储器Cache,计算机组成原理的重难点全、直接、组相连)

为什么要设立高速缓冲存储器 (Cache)? Cache是介于CPU和主存之间的小容量存储器,存取速度比主存快。它能高速地向CPU提供指令和数据,加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。…

10月15日,每日信息差

第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元,包括 2002 年首映的 5600 万,2020 年重映的 1.923 亿,以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图,增开城际班列至 131 列,多式联运…

qiankun-前端接入微服务vue3项目应用

背景 由于在 《吐槽一次qiankun微前端的框架》 这篇博客中,初次使用qiankun,然后接入了原生项目作为微服务的应用到主应用,所以就想着出个系列篇 目的 介绍利用qiankun框架, vue3 项目应用作为微应用,怎么接入到主应…

节点+镜像

节点、镜像: 在服务器领域,"节点" 和 "镜像" 是两个关键的概念,常与分布式系统、云计算或集群相关联。以下是对它们的详细解释: 1. 服务器节点 在分布式系统或云计算环境中,节点指的是网络中执行特定任务的…

使用Mockaroo生成测试数据

使用Mockaroo生成测试数据 最近在学习【Spring Boot & React】Spring Boot和React教程视频的P51.Generating 1000 students一课中,看到了https://www.mockaroo.com/网站可以用来模拟生成测试数据,觉得还不错,特此记录一下。感觉每次看老…

centOS部署Jenkins实现项目可持续自动化部署

个人看的是尚硅谷的视频,跟着实战,但因为视频是21年的,所以很容易出现jenkins插件不适配问题。 因而个人直接用较新版的jdk和jenkins. 先切换到root用户 sudo su一、安装jdk 先查询可安装版本 yum list java*安装jdk(只复制圈…

【Python爬虫实战】正则:中文匹配与贪婪非贪婪模式详解

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 (一)匹配单个中文字符 (二…

数据结构常考基础代码题-顺序表有序插入

顺序表递增有序,插入元素 x,仍递增有序 第一步:定义顺序表结构体 根据题目中的“顺序表递增有序”,我们需要定义一个顺序表结构体,用于存储元素和顺序表的相关信息。 typedef struct {int *data; // 动态数组存储元…

DeepFM模型代码详解

直到看到这篇文章,我才搞明白类别特征怎么做lookup的,也看明白了代码逻辑。如果你看完没懂,私信留下wx,给你讲懂。 1、Deepfm 的原理,DeepFM 是一个模型还是代表了一类模型,DeepFM 对 FM 做了什么样的改进…

单细胞copyKat分析学习和整理

CopyKAT(肿瘤拷贝数核型分析)是一种使用综合贝叶斯方法的计算工具,能够在单细胞中以5MB分辨率检测全基因组非整倍体,以便从高通量单细胞RNA测序数据中区分肿瘤细胞与正常细胞,并识别肿瘤亚克隆。 (这里提一下,“5MB”是指 5兆碱基对(5 megab…

JSP复习(二)

九大内置对象 在 JSP(JavaServer Pages)中,有九大内置对象,这些对象为开发者提供了常用的功能,帮助简化 JSP 页面中的处理。以下是这九大内置对象: request:表示客户端请求的对象,可…

CTF-PWN方向 栈溢出等基础知识笔记(2)

C语言基本函数补充 write函数 ret2syscall 要求有0x80这种系统调用存在 (0x0A是回车的意思) 案例 通过file查看这个文件 发现是静态编译的文件 所以很多库函数都被编译进去了 但是不存在bin/sh字符串 不存在system和backdoor函数 修改,rea…

纯手柄控制电脑(且不用插鼠标而使用虚拟鼠标)

前言 因电脑升级后,旧主机就作为客厅游戏机使用了,于是想尽量减少设备的插入,单纯的每次只拔插手柄这一项外设就行,于是需要两大步骤即可到位。 安装JoyXoff 一、官网下载并直接安装:JoyXoff 二、默认开机自启&…

【环境搭建】远程服务器搭建ElasticSearch

参考: 非常详细的阿里云服务器安装ElasticSearch过程..._阿里云服务器使用elasticsearch-CSDN博客 服务器平台:AutoDL 注意: 1、切换为非root用户,su 新用户名,否则ES无法启动 2、安装过程中没有出现设置账号密码…

AD9361 在低至 1MHz 的频率下运行

AD9361 在低至 1MHz 的频率下运行 AD -FREQCVT1-EBZ是包含AD9361的FMCOMMS3/4/5板的附加板。虽然完整的芯片级设计包可在此 RF 收发器的ADI产品页面上找到,但有关此卡的信息及其使用方法、围绕它的设计包以及可使其工作的软件可在此处找到。 AD-FREQCVT1-EBZ 模块…

山西农业大学20241015

02-VUE 一. Vue中常用的指令1. Vue指令概述2 Vue中指令的分类3 Vue中指令3.1 内容渲染指令3.2 条件渲染指令3.2.1 v-show3.2.2 v-if3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 v-on--重要3.3.1 内联语句3.3.2 methods中的函数名 一. Vue中常用的指令 1. Vue指令概述 概念: 指…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

MySQL中表的约束

1,概念 表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。 约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据&…