pytorch中tensor的使用

姓名:王咫毅
学号:19021211150
【嵌牛导读】pytorch和tensorflow一样,都是用于机器学习实现的环境当中的,而pytorch使用方法却和tensorflow有所不同,本文将介绍在pytorch下tensor的使用方法以及相应的简单的指令。
【嵌牛鼻子】pytorch tensor
【嵌牛提问】tensor在pytorch中究竟该如何使用?
【嵌牛正文】
转载自:https://www.jianshu.com/p/5ae644748f21?utm_source=desktop&utm_medium=timeline
一、pytorch安装
安装pytorch之前,需要安装好python(废话),还没安装过python的宝宝请先移步到廖雪峰的python教程,待安装熟悉完之后,再过来这边。
我们接着讲。
打开pytorch官网http://pytorch.org,找到下图所示位置
pytorch中tensor的使用
文章图片
如图所示,选择好系统,包管理工具,python的版本,是否支持CUDA(Zen君的配置是OSX,包管理工具是pip,版本2.7,不支持CUDA,哭)
选择好相应的配置,然后就可以复制下面“Run this command”的代码,直接打开命令台粘贴运行,即完成pytorch的安装。
二、pytorch的基石--Tensor张量
要介绍Tensor这个数据类型,我觉得有必要扯一下数学。
我们都知道:
标量(Scalar)是只有大小,没有方向的量,如1,2,3等
向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)
矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2; 3,4]
pytorch中tensor的使用
文章图片
如图,我们可以看出,矩阵是二维的,向量是一维的,标量是零维的。
那么张量(Tensor)是什么呢?呵呵呵呵!大家估计也能猜出来!是按照三维排列的一堆数字?
是的。但是也不完全正确。
其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵是二维的张量。
pytorch中tensor的使用
文章图片
张量就是按照任意维排列的一堆数字的推广。如图所示,矩阵不过是三维张量下的一个二维切面。要找到三维张量下的一个标量,需要三个维度的坐标来定位。
除此之外,张量还可以是四维的、五维的、。。。等等
数学扯完了,我们撸串代码操练操练 (*ˉ︶ˉ*)
>>>import torch #引用torch包
>>>x = torch.Tensor(2,3)#构造一个2x3的矩阵,没初始化但仍然会有值
>>>x
8.0118e+284.5768e-418.0118e+28
4.5768e-412.9747e-371.4013e-45
[torch.FloatTensor of size 2x3]#可以看出数据类型是浮点数的2x3矩阵
看矩阵看不出张量的道道,我们来点刺激的
>>>y=torch.Tensor(4,2,3) #构造一个4x2x3的张量,没初始化
>>>y
(0 ,.,.) =
1.00000e-29 *
0.00002.52440.0000
2.52440.00000.0000
(1 ,.,.) =
1.00000e-29 *
0.00000.00000.0000
0.00000.00000.0000
(2 ,.,.) =
1.00000e-29 *
0.00000.00000.0000
0.00000.00000.0000
(3 ,.,.) =
1.00000e-29 *
0.00000.00000.0000
2.52440.00002.5244
[torch.FloatTensor of size 4x2x3]
我们从上面的返回值可以看出,4x2x3的张量y由4个2x3的矩阵构成,这符合了我们数学上的定义。
Tensor的加法(四种)
我们先初始化两个张量:
pytorch中tensor的使用
文章图片
rand()用随机数初始化5x3的矩阵
第一种:
>>>a+b
第二种:
>>>torch.add(a,b)
第三种:
>>>result = torch.Tensor(5,3)
>>>torch.add(a,b,out=result) #把运算结果存储在result上
第四种:
>>>b.add_(a) #把运算结果覆盖掉b
Tensor的部分截取
pytorch中tensor的使用
文章图片
利用b[:,1]来截取第2列的所有元素(计算机是从0开始数,所以1是第2列)
Tensor的其他操作
除了加法以外,还有上百种张量的操作,比如说转置(transposing),切片(slicing)等,送个链接给少侠,少侠自己在家慢慢操练了。
Tensor与numpy的Array的相互转换
torch的tensor可以与numpy的array进行转换
1.tensor?array
>>>b = a.numpy() #a为tensor
pytorch中tensor的使用
文章图片
如图所示,b和a是共用一块内存,所以当a发生变化时,b也会发生变化。
2.array?tensor
>>>b = torch.from_numpy(a)#a为numpy的array
pytorch中tensor的使用
文章图片
如图所示,a和b一样是共用一块内存。
CUDA的神助攻
假如少侠你有一块nvidia的显卡并支持cuda(如GTX 1080),那么恭喜你,你可以使用显卡gpu进行tensor的运算。假如你像Zen君一样没有,考虑买一个吧。。。购买指南:为你的深度学习任务挑选最合适GPU:从性能到价格的全方位指南
>>>torch.cuda.is_available()#看看是否支持cuda
假如返回的是True那么,下面的代码将带你飞。
>>>x = x.cuda()
>>>y = y.cuda()
>>>x+y#这里的x和y都是tensor,使用cuda函数以后,x和y的所有运算均会调用gpu来运算。
115人点赞
1人踩
深度学习
作者:Zen_君
链接:https://www.jianshu.com/p/5ae644748f21
来源:
【pytorch中tensor的使用】著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    推荐阅读