美文网首页神经网络与深度学习语言PyTorch
超简单!pytorch入门教程(一):Tensor

超简单!pytorch入门教程(一):Tensor

作者: Zen_君 | 来源:发表于2017-02-01 13:54 被阅读60325次

    Zen君的配置是macbook pro,升级到Mac Serria安装不了qt,无法显示图片,好在发现了pytorch,正好Zen君以前也玩过python的,所以非常激动。这个教程系列也是趁着心情激动写下来的,不知道会不会持续更新,暂时别抱有期待:)

    一、pytorch安装

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

    我们接着讲。

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

    如图所示,选择好系统,包管理工具,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]

    如图,我们可以看出,矩阵是二维的,向量是一维的,标量是零维的。

    那么张量(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的矩阵构成,这符合了我们数学上的定义。

    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的部分截取

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

    Tensor的其他操作

    除了加法以外,还有上百种张量的操作,比如说转置(transposing),切片(slicing)等,送个链接给少侠,少侠自己在家慢慢操练了🏇。

    Tensor与numpy的Array的相互转换

    torch的tensor可以与numpy的array进行转换

    1.tensor⇒array

    >>>b = a.numpy() #a为tensor

    如图所示,b和a是共用一块内存,所以当a发生变化时,b也会发生变化。

    2.array⇒tensor

    >>>b = torch.from_numpy(a)  #a为numpy的array

    如图所示,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来运算。

    相关文章

      网友评论

      • 圈圈虫:虽然是翻译的原文,但是添加了有趣的旁白,让枯燥的学习生动有趣了:smile:
      • cb52d03c9bb9:import torch
        x=torch.rand(4,3)
        y=torch.rand(4,3)
        x=x.cuda()
        y=y.cuda()
        x+y
        然后出现下面错误信息,是什么问题?怎么解决?谢谢!
        Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "f:\Anaconda3\lib\site-packages\torch\tensor.py", line 293, in __add__
        return self.add(other)
        RuntimeError: cuda runtime error (48) : no kernel image is available for execution on the device at d:\pytorch\pytorch\torch\lib\thc\generic/THCTensorMathPointwise.cu:301
        此番风景:@隽_6baa 有gpu吗,cuda版本适配吗
      • 91b2d90bb277:好歹注明一下翻译官网tutorial:no_mouth:
      • GhMa:是翻译的好歹标下原文:smiley:
      • tTJJ8K:真是萌新笔法啊。

      本文标题:超简单!pytorch入门教程(一):Tensor

      本文链接:https://www.haomeiwen.com/subject/xvxlittx.html