博客 | Pytorch入门演练

2018 年 12 月 31 日 AI研习社


本文原载于微信公众号:磐创AI(ID:xunixs),欢迎关注磐创AI微信公众号AI研习社博客专栏


作者 | 磐石

编辑 | 安可

出品 | 磐创AI技术团队


【引言】Pytorch是一个基于Python的科学计算软件包,有以下两种定位:

  • 可以使用多GPU加速的NumPy替代品

  • 提供最大限度灵活性与速度的深度学习研究平台


一、入门

1.Tensors(张量)

Tensors(张量)类似于NumPy中的ndarray,另外它还可以使用GPU加速计算。

from__future__import print_function
importtorch


构造一个未初始化的5x3矩阵:

x = torch.empty(5, 3)
print(x)


输出:

tensor([[-9.0198e-17,  4.5633e-41, -2.9021e-15],
       [ 4.5633e-41,  0.0000e+00,  0.0000e+00],
       [ 0.0000e+00,  0.0000e+00,  0.0000e+00],
       [ 0.0000e+00,  0.0000e+00,  0.0000e+00],
       [ 0.0000e+00,  0.0000e+00,  0.0000e+00]])


构造一个随机初始化的矩阵:

x = torch.rand(5, 3)
print(x)


输出:

tensor([[0.1525, 0.7689, 0.5664],
       [0.7688, 0.0039, 0.4129],
       [0.9979, 0.3479, 0.2767],
       [0.9580, 0.9492, 0.6265],
       [0.2716, 0.6627, 0.3248]])


构造一个使用零填充、数据类型为long(长整型)的5X3矩阵:

x = torch.zeros(5, 3, dtype=torch.long)
print(x)


输出:

tensor([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])


直接用一组数据构造Tensor(张量):

x = torch.tensor([5.5, 3])
print(x)


输出:

tensor([5.5000, 3.0000])


或者根据现有的Tensor(张量)创建新的Tensor(张量)。除非用户提供新值,否则这些方法将重用输入张量的属性,例如dtype:

x = x.new_ones(5, 3, dtype=torch.double)  # 使用new_* 方法设定维度
print(x)

x = torch.randn_like(x, dtype=torch.float)   # 重新设定数据类型
Print(x)                                   # 结果维度不变


输出:

tensor([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]], dtype=torch.float64)

tensor([[ 0.4228,  0.3279,  0.6367],
       [ 0.9233, -0.5232, -0.6494],
       [-0.1946,  1.7199, -0.1954],
       [ 0.1222,  0.7204, -1.3328],
       [ 0.1230, -0.5800,  0.4562]])


输出它的大小:

print(x.size())


输出:

torch.Size([5, 3])

注意:torch.Size 实际上是一个元组,因此它支持所有元组操作。


2. 运算

Tensor运算有多种语法。在下面的示例中,我们将先示例加法运算。

加法运算:语法1

y = torch.rand(5, 3)
print(x + y)


输出:

tensor([[ 0.0732,  0.9384, -0.2489],
       [-0.6905,  2.1267,  3.0045],
       [ 0.6199,  0.4936, -0.0398],
       [-2.0623, -0.5140,  1.6162],
       [ 0.3189, -0.0327, -0.5353]])


加法运算:语法2

print(torch.add(x, y))


输出:

tensor([[ 0.0732,  0.9384, -0.2489],
       [-0.6905,  2.1267,  3.0045],
       [ 0.6199,  0.4936, -0.0398],
       [-2.0623, -0.5140,  1.6162],
       [ 0.3189, -0.0327, -0.5353]])


加法运算:使用输出Tensor(张量)作为参数

result = torch.empty(5, 3)
torch.add(x, y, out=result)

print(result)


输出:

tensor([[ 0.0732,  0.9384, -0.2489],
       [-0.6905,  2.1267,  3.0045],
       [ 0.6199,  0.4936, -0.0398],
       [-2.0623, -0.5140,  1.6162],
       [ 0.3189, -0.0327, -0.5353]])


加法运算:内联接

# adds x to y
y.add_(x)
print(y)


输出:

tensor([[ 0.0732,  0.9384, -0.2489],
       [-0.6905,  2.1267,  3.0045],
       [ 0.6199,  0.4936, -0.0398],
       [-2.0623, -0.5140,  1.6162],
       [ 0.3189, -0.0327, -0.5353]])

注意:任何改变原张量实现内联接的操作都是通过在后边加_ 实现的。例如:x.copy_(y),x.t_(),将将改变x的值。】


你可以像在NumPy中一样使用索引及其他所有华丽的功能。

print(x[:, 1])


输出:

tensor([ 0.3279, -0.5232,  1.7199,  0.7204, -0.5800])


Resizing(调整大小):如果要resize/reshape张量,可以使用torch.view

x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)  # -1是推断出来的

print(x.size(), y.size(), z.size())


输出:

torch.Size([4, 4])  torch.Size([16])  torch.Size([2, 8])


如果你有只含一个元素的张量,可以用.item()获取它的值作为Python数值

x = torch.randn(1)
print(x)
print(x.item())


输出:

tensor([0.1550])
0.15495021641254425

【延伸阅读:100+张量操作,包括置换,索引,切片,数学运算,线性代数,随机数等等,被详细描述在这里(https://pytorch.org/docs/torch)。】


二、NUMPY桥接器

将Torch Tensor转换为NumPy array是一件轻而易举的事(反之亦然)。Torch Tensor和NumPyarray共享其底层内存位置,更改一个将改变另一个。

1.将Torch Tensor转换为NumPy array

a = torch.ones(5)
print(a)


输出:

tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)


输出:

[1. 1. 1. 1. 1.]


了解numpyarray的值如何变化。

a.add_(1)
print(a)
print(b)


输出:

tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]


2. 将NumPy array转换为Torch Tensor

了解如何自动地将np array更改为Torch Tensor

import numpy as np

a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)

print(a)
print(b)


输出:

[2. 2. 2. 2. 2.]

tensor([2., 2., 2., 2., 2.], dtype=torch.float64)


除了Char(字符型)Tensor之外,CPU上的所有Tensors都支持转换为NumPy及返回。


三、CUDA TENSORS(张量)

可以使用.to方法将张量移动到任何设备上。

# 仅当CUDA可用的情况下运行这个cell 
# 我们用 ``torch.device`` 对象实现tensors在GPU上的写入与读出if torch.cuda.is_available():

   device = torch.device("cuda")          # 一个 CUDA 终端对象

   y = torch.ones_like(x, device=device)  # 直接在GUP上创建Tensor
   x = x.to(device)                # 或者直接使用字符串`.to("cuda")``
   z = x + y

   print(z)
   print(z.to("cpu", torch.double))     # `.to`` 也可以改变对象数据类型


输出:

tensor([2.4519], device='cuda:0')

tensor([2.4519], dtype=torch.float64)


脚本总运行时间:(0分6.338秒)

tensor—tutorial.py下载链接:https://pytorch.org/tutorials/_downloads/092fba3c36cb2ab226bfdaa78248b310/tensor_tutorial.py

tensor—tutorial.ipynb下载链接:https://pytorch.org/tutorials/_downloads/3c2b25b8a9f72db7780a6bf9b5fc9f62/tensor_tutorial.ipynb


欢迎扫码关注磐创AI微信公众号

 

假期也要常来【AI求职百题斩】给自己充电哦!

点击 阅读原文 查看本文更多内容

登录查看更多
1

相关内容

基于Lua语言的深度学习框架 github.com/torch
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
110+阅读 · 2019年10月26日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
最新翻译的官方 PyTorch 简易入门教程
人工智能头条
10+阅读 · 2019年1月10日
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
从零开始深度学习第8讲:利用Tensorflow搭建神经网络
一文读懂PyTorch张量基础(附代码)
数据派THU
6+阅读 · 2018年6月12日
PyTorch:60分钟入门学习
全球人工智能
13+阅读 · 2018年5月18日
教程 | 从头开始了解PyTorch的简单实现
机器之心
20+阅读 · 2018年4月11日
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
教程 | 如何从TensorFlow转入PyTorch
机器之心
7+阅读 · 2017年9月30日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
Tutorial on NLP-Inspired Network Embedding
Arxiv
7+阅读 · 2019年10月16日
Arxiv
11+阅读 · 2018年5月13日
Arxiv
3+阅读 · 2018年2月22日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
110+阅读 · 2019年10月26日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
相关资讯
最新翻译的官方 PyTorch 简易入门教程
人工智能头条
10+阅读 · 2019年1月10日
从张量到自动微分:PyTorch入门教程
论智
9+阅读 · 2018年10月10日
从零开始深度学习第8讲:利用Tensorflow搭建神经网络
一文读懂PyTorch张量基础(附代码)
数据派THU
6+阅读 · 2018年6月12日
PyTorch:60分钟入门学习
全球人工智能
13+阅读 · 2018年5月18日
教程 | 从头开始了解PyTorch的简单实现
机器之心
20+阅读 · 2018年4月11日
手把手教 | 深度学习库PyTorch(附代码)
数据派THU
27+阅读 · 2018年3月15日
手把手教你由TensorFlow上手PyTorch(附代码)
数据派THU
5+阅读 · 2017年10月1日
教程 | 如何从TensorFlow转入PyTorch
机器之心
7+阅读 · 2017年9月30日
学员笔记||Python数据分析之:numpy入门(一)
七月在线实验室
7+阅读 · 2017年9月28日
相关论文
Top
微信扫码咨询专知VIP会员