PyTorch教程之Tensors

Tensors类似于numpy的ndarrays,但是可以在GPU上使用来加速计算。

一、Tensors的构建


from __future__ import print_function
import torch
构建未初始化的5x3矩阵:
x = torch.Tensor(5, 3)
print(x)

输出结果:

 -2.9226e-26  1.5549e-41  1.5885e+14
 0.0000e+00  7.0065e-45  0.0000e+00
 7.0065e-45  0.0000e+00  4.4842e-44
 0.0000e+00  4.6243e-44  0.0000e+00
 1.5810e+14  0.0000e+00  1.6196e+14
[torch.FloatTensor of size 5x3]

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

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

输出结果:

 0.8168  0.4588  0.8139
 0.7271  0.3067  0.2826
 0.1570  0.2931  0.3173
 0.8638  0.6364  0.6177
 0.2296  0.1411  0.1117
[torch.FloatTensor of size 5x3]

查看size:

print(x.size())

输出结果:

torch.Size([5, 3])

torch.Size 实际上上一个tuple, 因而支持基于tuple的所有运算。

二、Tensor的运算操作

Tensor的运算操作语法有很多种,以下一一演示。

语法1:

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

输出结果:

 0.9616  0.8727  1.6763
 1.4781  0.7961  1.2082
 0.6717  0.9821  0.6129
 1.2544  1.0118  1.2720
 1.0912  0.3207  0.4200
[torch.FloatTensor of size 5x3]

 语法2:

print(torch.add(x, y))

输出结果:

 0.9616  0.8727  1.6763
 1.4781  0.7961  1.2082
 0.6717  0.9821  0.6129
 1.2544  1.0118  1.2720
 1.0912  0.3207  0.4200
[torch.FloatTensor of size 5x3]

语法3:

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

输出结果:

 0.9616  0.8727  1.6763
 1.4781  0.7961  1.2082
 0.6717  0.9821  0.6129
 1.2544  1.0118  1.2720
 1.0912  0.3207  0.4200
[torch.FloatTensor of size 5x3]

语法4:

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

输出结果:

 0.9616  0.8727  1.6763
 1.4781  0.7961  1.2082
 0.6717  0.9821  0.6129
 1.2544  1.0118  1.2720
 1.0912  0.3207  0.4200
[torch.FloatTensor of size 5x3]

任何一个会改变 tensor的操作都会加上下划线,例如x.copy_(y)和x.t_().

 语法5:

print(x[:, 1])

输出结果:

 0.4588
 0.3067
 0.2931
 0.6364
 0.1411
[torch.FloatTensor of size 5]

任何numpy标准库中的索引操作都可以用于tensor

三、Tensor与numpy的互相转化

 1.从torch Tensor 到 numpy Array

构建Tensor 

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

输出结果:

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

转化为 Array

b = a.numpy()
print(b)

输出结果:

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

对Tensor 进行加法操作:

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

输出结果:

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

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

可以看到对Tensor进行的加法操作映射到了对应Arrayy当中,二者共用内存,属于浅拷贝。

2.从numpy 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.]

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

可以看到对Array进行的加法操作同样映射到了对应Tensor当中,二者共用内存,也属于浅拷贝。

四、GPU运算

tensor可以使用CUDA函数移动到GPU上:
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    x + y

输出结果:

  0.4457  1.3248  1.9033
  0.8010  1.4461  1.0481
  1.2691  1.8655  0.4001
  0.6913  0.2979  0.2352
  1.0372  1.0988  1.2159
[torch.cuda.FloatTensor of size 5x3 (GPU 0)]
 
原文地址:https://www.cnblogs.com/xueqiuqiu/p/7510658.html