网站用户注册页面怎么做,企业门户网站建设论文,水木网站建设,如何在微信内做网站在PyTorch使用的过程中#xff0c;维度转换一定少不了。而PyTorch中有多种维度形变的方法#xff0c;我们该在什么场景下使用什么方法呢#xff1f;
本小节我们使用的张量如下#xff1a;
# 一维向量
t1 torch.tensor((1, 2))
# 二维向量
t2 torch.tensor([[1, 2, 3], …
在PyTorch使用的过程中维度转换一定少不了。而PyTorch中有多种维度形变的方法我们该在什么场景下使用什么方法呢
本小节我们使用的张量如下
# 一维向量
t1 torch.tensor((1, 2))
# 二维向量
t2 torch.tensor([[1, 2, 3], [4, 5, 6]])
# 三维向量
t3 torch.tensor([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])1 张量的维度与形状
张量为一组数的结构化表示。简单理解向量就是一维数组矩阵为二维数组此外我们还可以定义更高维度的数组。张量的高维数组和Numpy中高维Array概念类似。
1.1 ndim查看张量维度
print(t1.ndim, t2.ndim, t3.ndim, sep , )
# 1, 2, 3
# t1为1维向量
# t2为2维矩阵
# t3为3维张量1.2 shapesize()查看向量的形状
print(t1.shape, t2.shape, t3.shape, sep , )
# torch.Size([2]), torch.Size([2, 3]), torch.Size([2, 2, 2])print(t1.size(), t2.size(), t3.size(), sep , )
# torch.Size([2]), torch.Size([2, 3]), torch.Size([2, 2, 2])t1向量torch.Size([2])的理解向量的形状是1行2列。
t2矩阵torch.Size([2, 3])的理解包含两个一维向量每个一维向量的形状是1行3列。
t3矩阵torch.Size([2, 2, 2])的理解包含两个二维矩阵每个二维矩阵的形状是2行2列。
1.3 numel()查看张量中的元素个数
print(t1.numel(), t2.numel(), t3.numel(), sep , )
# 2, 6, 8
# t1向量中共有2个元素
# t2矩阵中共有6个元素
# t3张量中共有8个元素1.4 形状相同的数组可创建一个高维张量
import numpy as np
a1 np.array([[1, 2], [3, 4]])
a2 np.array([[5, 6], [7, 8]])
t3 torch.tensor([a1, a2])
print(t3)
# tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])2 张量的形变
2.1 flatten()将任意维度张量转为一维张量
t2.flatten()
# tensor([1, 2, 3, 4, 5, 6])t3.flatten()
# tensor([1, 2, 3, 4, 5, 6, 7, 8])2.2 reshape()任意变形
形变维度的乘积需要等于张量元素的个数。
# 将t3变成2×4的矩阵
t3.reshape(2, 4)
#tensor([[1, 2, 3, 4],[5, 6, 7, 8]])# 将t3变成1×4×2的矩阵
t3.reshape(1, 4, 2)
# tensor([[[1, 2], [3, 4], [5, 6], [7, 8]]])2.3 squeeze()unsqueeze()
squeeze()的作用是压缩张量去掉维数为1位置的维度
# 将t3的维度变为2×1×4
t_214 t3.reshape(2, 1, 4)
print(t_214)
# tensor([[[1, 2, 3, 4]], [[5, 6, 7, 8]]])# 使用squeeze()将其变成2×4去掉维度为1位置的维度
t_24 t_214.squeeze(1)
print(t_24)
# tensor([[1, 2, 3, 4], [5, 6, 7, 8]])unsqueeze()的作用是解压张量给指定位置加上维数为一的维度。
# 将2×4的维度再转换成2×1×4在第二个维度上加一维
# 索引是从0开始的。参数0代表第一维参数1代表第二维以此类推
printt_24.unsqueeze(1)
tensor([[[1, 2, 3, 4]], [[5, 6, 7, 8]]])2.4 维度变化总结
一般我们最常使用的就是flatten()与reshape()。仔细思考的同学们肯定也可以发现reshape()也可以实现flatten()的功能,reshape()所需的参数就是张量中的元素数。
print(t3.flatten())
# tensor([1, 2, 3, 4, 5, 6, 7, 8])print(t3.reshape(t3.numel()))
# tensor([1, 2, 3, 4, 5, 6, 7, 8])3 特殊的零维张量
Tensor的零维张量只包含一个元素可以理解为标量只有大小没有方向。
3.1 零维张量的属性
# 零维张量的创建只有一个数不具备一维或多维的概念
t0 torch.tensor(1)# 因为它是标量所以维度是0
print(t0.ndim)
# 0# 因为它是标量所以也不具有形状
print(t0.shape)
# torch.Size([])# 它没有维度但是有一个数
print(t0.numel())
# 13.2 零维张量的转化
使用flatten()、reshape()可以将标量转为向量。
t0 torch.tensor(1)
print(t0.flatten())
# tensor([1])t0 torch.tensor(1)
print(t0.reshape(1))
# tensor([1])4 再谈什么是张量 Tensor是一个多维数组它是标量、向量、矩阵的高维拓展。