www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor

admin 4个月前 (07-06) 科技 73 0

本文始发于小我私家民众号:TechFlow,原创不易,求个关注


今天是Pytorch专题的第二篇,我们继续来领会一下Pytorch中Tensor的用法。

上一篇文章当中我们简朴先容了一下若何建立一个Tensor,今天我们继续深入Tensor的其他用法

tensor操作

size()和SHape

我们可以用size()函数或者直接挪用tensor当中的shape属性获取一个tensor的巨细,这两者是等价的,一样平常情况下我们用前者多一些。

view

我们可以通过view改变一个tensor的shape,它会凭据我们指定的shape返回一个新的tensor

需要注重的是,view返回的是原数据的一个引用,也就是说我们改变原数据,view出来的效果会样发生转变。

在上面这个例子当中,我们把原tensor x中的[0, 1]的位置修改成了2,我们print y会发现y当中的元素同样发生了转变。

numel

我们可以用numel获取tenosr当中元素的数目:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第1张

squeeze和unsqueeze

我们可以用squeeze来削减tensor的维度,而使用unsqueeze来增添一个tenor的维度

其中unsqueeze吸收一个参数,允许我们指定我们希望增添的维度。我们可以通过size显著看到数据的转变:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第2张

squeeze是削减维度,相比之下没有那么多操作,它会自动将长度是1的维度消除,若是没有一个维度长度是1,也就是说当前已经是最简的形式,那么什么也不会转变。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第3张

也支持使用另一个数组作为索引接见数据:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第4张

Tensor索引

Tensor当中支持与Numpy数组类似的索引操作,语法也异常相似。和Numpy一样,索引获得的效果是原数据的引用,也就是说我们修改其中一个,另一个也会随着发生更改。

它支持多维索引:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第5张

也支持切片:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第6张

也可以通过bool数组获取元素:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第7张

Tensor运算

Tensor当中有大量的运算api,我们只枚举其中最常用的几种,剩下的使用频率不高,人人可以用到的时刻再去查阅响应的文档。

加减乘除

Tensor当中支持好几种运算的方式,我们以加法为例来领会一下。首先支持通过符号直接运算:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第8张

第二种方式是我们可以挪用torch当中的函数,好比加法的函数就是add。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第9张

若是使用torch当中的函数举行盘算的话,它还支持out参数,允许我们传入一个tensor,它会将盘算效果存储tensor当中。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第10张

除此之外,它还允许我们举行inplace操作,也就是在原tensor值的基础上直接修改,而不是通过函数值返回。和Numpy当中传入inplace参数的设计差别,Tensor当中是通过api区分的,在原函数名下增添一个下划线即是inplace的api,好比add的inplace方式是add_。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第11张

矩阵点乘

在机械学习领域当中,矩阵点乘是一个经常用到的操作。由于为了节省时间,我们通常会把样本和特征以及各种参数向量化,通过矩阵或者是向量点乘的形式来举行加权求和、线性变换等操作。以是矩阵点乘异常主要定会用到。

在Numpy当中我们通过dot函数来盘算两个矩阵之间的内积,而在Tensor当中做了严酷的区分,只有一维的向量才可以使用dot盘算点乘,多维的向量只能使用matmul盘算矩阵的乘法。为了简化,还可以使用mm来取代matmul。若是你学过TensorFlow的话,你会发现matmul是TensorFlow当中点乘的api,Pytorch当中沿用了这个命名。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第12张

可以看到,mm和matmul盘算获得的效果是一致的。

类型转换

在Numpy当中,我们通过astype方式转换类型,而在Tensor当中将这个方式拆分,每一种类型都有自己的转化函数

好比我们想要将tensor转化成int类型,挪用的是int()方式,想要转化成float类型挪用的是float()方式。挪用这些方式之后,会返回一个新的tensor。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第13张

Tensor当中界说了7种CPU类型和8种GPU类型:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第14张

我们可以挪用内置函数将它们互相转化,这些转换函数有:long(), half(), int(), float(), double(), byte(), char(), short()。我赖这些函数的寄义人人应该都可以明白。

转置与变形

Tensor当中的转置操作和Numpy中不太相同,在Numpy当中,我们通过.T或者是transpose方式来举行矩阵的转置。若是是高维数组举行转置,那么Numpy会将它的维度完全翻转。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第15张

而在Tensor当中区分了二维数组和高维数组,二维数组的转置使用的函数是t(),它的用法和.T一样,会将二维数组的两个轴换取。

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第16张

若是是高维数组挪用t函数会报错,若是我们要变换高维数组的形状,可以挪用transpose和permute两个方式。先说transpose方式,它吸收两个int型参数,示意需要换取的两个轴。好比一个形状是[4, 3, 2]的矩阵,我们可以通过0,1,2示意它的所有轴,传入两个,指定想要换取的两个轴:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第17张

而permute可以换取多个轴的位置,以是它接受的参数是一个int型的不定参数。我们传入我们希望获得的轴的顺序,Tensor会凭据我们传入的轴的顺序对数据举行翻转:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第18张

另外,t和transpose支持inplace操作,而permute不行,这也是他们显著的区别之一。

装备之间移动

我们可以通过device这个属性看到tensor当前所在的装备:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第19张

我们可以通过cuda函数将一个在CPU的tensor转移到GPU,然则不推荐这么干。比较好的设施是使用to方式来举行装备转移

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第20张

将tensor转移到GPU上举行盘算可以行使GPU的并发性能提升盘算的效率,这是Pytorch当中常用的手段。to方式不仅可以改变tensor的装备,还可以同时调换tensor当中元素的类型:

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第21张

总结

虽然tensor拥有许多分外的功效和盘算函数,然则tensor的意义并不仅仅如此。最主要的是,它可以提升我们的盘算速度。这当中的原也很简朴,由于在Python的List当中,每一个元素实在都是一个工具。纵然我们存储的是一个int或者是float,Python都市将它们封装成一个工具,这会带来分外的开销。若是只是少量的数据影响不大,若是是上百万甚至是更大的量级,那么两者的差距就会异常大。另外一点就是tensor库的底层也是C和C++,运行效率显然Python更高。以是我们不能简朴地把它明白成一个盘算包,对于深度学习来说,它并不仅仅只是盘算。

Tensor当中另有许多其他的方式,这其中许多适用频率很低加上篇幅的限制,我们不能逐一穷尽,人人只需要对Tensor库整体有一个映像,一些详细的使用方式和细节可以用到的时刻再举行查询。

本文基于滴滴云GPU完成,租借滴滴云GPU,使用滴滴云AI大师码2323,享受9折优惠。

若是喜欢本文,可以的话,请点个关注,给我一点激励,也利便获取更多文章。

本文使用 mdnice 排版

www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor 第22张

,

www.px111.net

欢迎进入平心在线官网(原诚信在线、阳光在线)。平心在线官网www.px111.net开放平心在线会员登录网址、平心在线代理后台网址、平心在线APP下载、平心在线电脑客户端下载、平心在线企业邮局等业务

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:www.px111.net:Pytorch | 详解Pytorch科学盘算包——Tensor

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:788
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1323
  • 评论总数:387
  • 浏览总数:46113