pytorch入门教程 | 第一章:Tensor

Posted 人工智能LeadAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch入门教程 | 第一章:Tensor相关的知识,希望对你有一定的参考价值。

1

pytorch安装

安装pytorch之前,需要安装好python,还没安装过python的宝宝请先移步到廖雪峰的python教程,待安装熟悉完之后,再过来这边。


我们接着讲。


打开pytorch官网http://pytorch.org,找到下图所示位置




如图所示,选择好系统,包管理工具,python的版本,是否支持CUDA。


选择好相应的配置,然后就可以复制下面“Run this command”的代码,直接打开命令台粘贴运行,即完成pytorch的安装。



2

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+28  4.5768e-41  8.0118e+28

4.5768e-41  2.9747e-37  1.4013e-45

[torch.FloatTensor of size 2x3]  #可以看出数据类型是浮点数的2x3矩阵


看矩阵看不出张量的道道,我们来点刺激的


>>>y=torch.Tensor(4,2,3) #构造一个4x2x3的张量,没初始化

>>>y

(0 ,.,.) =

1.00000e-29 *

0.0000  2.5244  0.0000

2.5244  0.0000  0.0000


(1 ,.,.) =

1.00000e-29 *

0.0000  0.0000  0.0000

0.0000  0.0000  0.0000


(2 ,.,.) =

1.00000e-29 *

0.0000  0.0000  0.0000

0.0000  0.0000  0.0000


(3 ,.,.) =

1.00000e-29 *

0.0000  0.0000  0.0000

2.5244  0.0000  2.5244

[torch.FloatTensor of size 4x2x3]


我们从上面的返回值可以看出,4x2x3的张量y由4个2x3的矩阵构成,这符合了我们数学上的定义。


3

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



4

Tensor的部分截取


pytorch入门教程 | 第一章:Tensor


 利用b[:,1]来截取第2列的所有元素(计算机是从0开始数,所以1是第2列)



5

Tensor的其他操作


除了加法以外,还有上百种张量的操作,比如说转置(transposing),切片(slicing)等。


6

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一样是共用一块内存。


7

CUDA的神助攻


假如少侠你有一块nvidia的显卡并支持cuda(如GTX 1080),那么恭喜你,你可以使用显卡gpu进行tensor的运算。


>>>torch.cuda.is_available()  #看看是否支持cuda


假如返回的是True那么,下面的代码将带你飞。


>>>x = x.cuda()

>>>y = y.cuda()

>>>x+y           #这里的x和y都是tensor,使用cuda函数以后,x和y的所有运算均会调用gpu来运算。



pytorch入门教程 | 第一章:Tensor


首发简书

往期精彩回顾

pytorch入门教程 | 第一章:Tensor


据说北京的程序员都参加了这场培训,点击阅读原文报名!




以上是关于pytorch入门教程 | 第一章:Tensor的主要内容,如果未能解决你的问题,请参考以下文章

超详细Pytorch 入门教程

PyTorch教程-7:PyTorch中保存与加载tensor和模型详解

pytorch入门与实践-3 Tensor详解

PyTorch简明教程torch.Tensor()与torch.tensor()的区别

pytorch教程[2] Tensor的使用

教程 | 如何通过PyTorch上手Tensor Comprehensions?