Pytorch入门之Tensor
Tensor
Tensor是PyTorch 中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)或更高维的数组。Tensor 和 numpy的ndarrays类似,但Tensor可以使用GPU加速。Tensor的使用和numpy及MATLAB的
接口十分相似,下面通过几个示例了解Tensor的基本使用方法。
# 构建5*3矩阵,只是分配了空间,并未初始化
from __future__ import print_function
import torch as t
x = t.Tensor(5, 3)
print(x)

# 使用[0,1]均匀分布随机初始化二维数组
x = t.rand(5, 3)
print(x)

# 查看x的形状
print(x.size())
# torch.Size是tuple对象的子类,因此他支持tuple的所有操作,如x.size()[0]
print(x.size()[0])
print(x.size()[1])

x = t.rand(5, 3)
y = t.rand(5, 3)
# 加法的第一种写法
print(x+y)
# 加法的第二种写法
print(t.add(x, y))
# 加法的第三种写法 指定加法的输出目标为result
result = t.Tensor(5, 3) # 预先分配空间
t.add(x, y, out=result) # 输出到result
print(result)
# 以上三种结果一毛一样

x = t.rand(5, 3)
y = t.rand(5, 3)
print(y)
# 函数名后面带下划线_的函数会修改Tensor本身
# 第一种,不改变y
y.add(x)
print(y)
# 第二种,改变y
y.add_(x)
print(y)

a = t.ones(5) # 新建一个全是1的Tensor
# Tensor与numpy数组间的互操作非常容易且快速
# Tensor不支持的操作,先转化为numpy处理,之后再转回Tensor
b = a.numpy() # Tensor->numpy
print(a)
print(b)

import numpy as np
a = np.ones(5) # 新建一个全是1的Tensor
b = t.from_numpy(a) # Tensor->numpy
print(a)
print(b)
# Tensor和numpy对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。
# 这也意味着,如果其中一个变了,另外一个也会随之改变。
b.add_(1) # b被修改了
print('=============\n', a)
print(b)

Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU带来的加速运算
x = t.rand(5, 3)
y = t.rand(5, 3)
# 在不支持CUDA的机器上, 下一步不会运行
if t.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x + y)

在此处可能会发现GPU运算的速度并未提升太多,这是因为x和y太小且运算也较简单,而且将数据从内存转移到显存还需要花费额外的开销。GPU的优势需在大规模数据和复杂运算下才能体现出来。

浙公网安备 33010602011771号