《Pytorch新手入门》第一节-认识Tensor


参考《深度学习框架PyTorch:入门与实践_陈云(著)》

一、认识Tensor

1.1 Tensor定义

Tensor 是 PyTorch 中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)一维数组(向量)二维数组(阵)或更高的数组。Tensor 和 numpy的ndarrays类似,但Tensor 可以使用GPU加速。

import torch
# 创建一个5*3的矩阵
x = torch.Tensor(5, 3)

在这里插入图片描述

# 查看Tensor的形状
print(x.size())
# 查看Tensor某一维的大小,两种写法等价
print(x.size()[0], x.size(1))
'''
torch.Size([5, 3])
5 3
'''

torch.size是tuple对象的子类,因此它支持 tuple 的所有操作,如xsize0[0]。

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

在这里插入图片描述

1.2 Tensor运算操作

# Tensor加法的三种写法
print(x + y)
print(torch.add(x, y))
print(torch.add(x, y, out=torch.Tensor(5, 3)))

在这里插入图片描述

# 将一个Tensor加到另一个Tensor
print(y.add(x)) #普通加法,不改变y的内容
print(y.add_(x)) # inplace加法,改变y的内容

函数名后面带下划线_的函数会修改 Tensor 本身。例如,x.add_()和x.t_()会改变x,但x.add()和x.t()会返回一个新的 Tensor,而x不变。
Tensor的切片操作与numpy类似,Tensor还支持很多操作,包括数学运算、线性代数、选择、切片等,其接口设计与numpy极为相似。

print(x[:, 1])
'''
tensor([0.0000e+00, 1.0516e-35, 0.0000e+00, 1.0515e-35, 0.0000e+00])
'''

1.3 Tensor与numpy转换

Tensor和numpy的数组间的互操作非常容易且快速。Tensor 不支持的操作,可以先转为 numpy 数组处理,之后再转回 Tensor。Tensor 和 numpy 对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。

# tensor——》numpy array
a = torch.ones(5)
b = a.numpy()
'''
a tensor([1., 1., 1., 1., 1.])
b [1. 1. 1. 1. 1.]
'''
a.add_(1)
'''
a tensor([2., 2., 2., 2., 2.])
b tensor([2., 2., 2., 2., 2.])
'''
import numpy as np
# numpy array——》tensor
a = np.ones(5)
b = torch.from_numpy(a)

Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU带来的加速运算。

# 在不支持CUDA的机器下,这一步不会运行
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    print(x+y)

猜你喜欢

转载自blog.csdn.net/weixin_42149550/article/details/134144298