参考《深度学习框架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 对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。文章来源:https://www.toymoban.com/news/detail-739432.html
# 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带来的加速运算。文章来源地址https://www.toymoban.com/news/detail-739432.html
# 在不支持CUDA的机器下,这一步不会运行
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
print(x+y)
到了这里,关于《Pytorch新手入门》第一节-认识Tensor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!