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]

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

那么张量(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的加法(四种)

我们先初始化两个张量:

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

利用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

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

2.array⇒tensor

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

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

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏owent

C++ 新特性学习(六) — 新的字符串编码和伪随机数

使用u””为能至少储存UTF-16的16位元编码,对应’\u’表示16位元的字符。

801
来自专栏数据结构与算法

洛谷P1730 最小密度路径(floyd)

很显然的一个dp方程\(f[i][j][k][l]\)表示从\(i\)到\(j\)经过了\(k\)条边的最小权值

853
来自专栏机器学习算法与Python学习

Numpy

Numpy Numpy是Python中用于科学计算的核心库。它提供了高性能的多维数组对象,以及相关工具。(本文文末的原文链接为numpy的官方文档) NumPy...

3407
来自专栏小樱的经验随笔

Gym 100952C&&2015 HIAST Collegiate Programming Contest C. Palindrome Again !!【字符串,模拟】

C. Palindrome Again !! time limit per test:1 second memory limit per test:64 meg...

2603
来自专栏ACM算法日常

交错字符串(动态规划)- leetcode 97

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

1061
来自专栏小樱的经验随笔

1082 与7无关的数(思维题,巨坑)

1082 与7无关的数 题目来源:                 有道难题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5        ...

3337
来自专栏深度学习那些事儿

pytorch中autograd以及hook函数详解

有些公式为图片,如果这个页面加载不出来,请看这里:https://oldpan.me/archives/pytorch-autograd-hook

1.2K10
来自专栏与神兽党一起成长

最大子序列和O(N)算法简单分析『神兽必读』

可以看到算法中重要的位置都标注出来了。 显然这个算法有一个for循环,整体时间复杂度可以看作O(N)。 就算法正确性来分析,首先假设这样的输入:-2, -3, ...

2232
来自专栏C语言及其他语言

【每日一题】1426: [蓝桥杯][历届试题]九宫重排

如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面...

913
来自专栏数据小魔方

作图前的数据预处理

今天给大家讲解作图前原数据的排序整理技巧! 前一篇推送讲到了条形图数据系列顺序反转问题 原数据系列的排序只是给大家提示要用智能表格排序 今天交给大家一种更简洁...

2637

扫码关注云+社区