什么是PyTorch?

入门

  1. 张量
  2. 操作

Numpy转换

  1. 将Torch张量转换为numpy数组
  2. 将numpy数组转换为Torch张量

CUDA传感器

这是一个基于Python的科学计算包,主要分入如下2部分:

  1. 使用GPU的功能代替numpy
  2. 一个深刻的学习研究平台,提供最大的灵活性和速度

入门

张量

Tensors类似于numpyndarrays,另外还可以在GPU上使用Tensors来加速计算。

from __future__ import print_function
import torch

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

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

输出:

1.00000e-36 *
  0.0000  0.0000  0.0000
  0.0000  0.1910  0.0000
  0.1894  0.0000  2.0271
  0.0000  0.0093  0.0000
  0.0039  0.0000  0.1942
[torch.FloatTensor of size 5x3]

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

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

输出:

1.00000e-36 *
  0.0000  0.0000  0.0000
  0.0000  0.1910  0.0000
  0.1894  0.0000  2.0271
  0.0000  0.0093  0.0000
  0.0039  0.0000  0.1942
[torch.FloatTensor of size 5x3]

获取矩阵的大小

print(x.size())

输出:

(5L, 3L)

提示: torch.Size 实际上是一个元组,所以它支持相同的操作

操作

操作有多种语法。我们来看看下面的例子 语法一:

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

输出:

 0.6050  0.0465  0.6626
 0.8219  0.6481  0.2022
 0.0346  0.9443  0.8881
 0.4288  0.7175  0.9279
 0.4868  0.9976  0.2751
[torch.FloatTensor of size 5x3]

语法二:

print(torch.add(x, y))

输出:

0.8685  1.1023  1.4549
 0.4700  1.1125  1.4969
 0.7625  0.3434  0.8084
 0.8114  1.0919  1.8061
 1.5888  1.3338  0.9857
[torch.FloatTensor of size 5x3]

另外:定义一个输出张量

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

输出:

0.8685  1.1023  1.4549
 0.4700  1.1125  1.4969
 0.7625  0.3434  0.8084
 0.8114  1.0919  1.8061
 1.5888  1.3338  0.9857
[torch.FloatTensor of size 5x3]

补充:in-place追加

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

输出:

 0.0457  0.1247  0.5834
 0.3273  0.5949  0.8044
 0.7898  0.3060  0.1873
 0.1682  0.8595  0.9096
 0.2379  0.4539  0.5456
[torch.FloatTensor of size 5x3]

注意: 该变异就地张量的任何操作是后固定有 例如:`x.copy(y)x.t_(),将改变x`。

print(x[:, 1])

输出:

0.5700
 0.4744
 0.2796
 0.5653
 0.8713
[torch.FloatTensor of size 5]

最后说明: 100+张量的操作,包括移调,索引,切片,数学运算,线性代数,随机数等等被描述 在这里

Numpy转换

将Tensor转换为numpy数组
a = torch.ones(5)
print(a)

输出:

 1
 1
 1
 1
 1
[torch.FloatTensor of size 5]
b = a.numpy()
print(b)

输出:

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

看看numpy数组的值如何变化。

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

输出:

 2
 2
 2
 2
 2
[torch.FloatTensor of size 5]

[ 2.  2.  2.  2.  2.]
将numpy数组转换为Torch张量

看到如何更改np阵列自动更改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.]

 2
 2
 2
 2
 2
[torch.DoubleTensor of size 5]

除了CharTensor之外,CPU上的所有传感器都支持转换为NumPy并返回

CUDA传感器

可以使用该.cuda功能将传感器移动到GPU上。

# let us run this cell only if CUDA is available
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    x + y

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

Download Python source code: tensor_tutorial.py

Download Jupyter notebook: tensor_tutorial.ipynb