torch增加维度操作

使用none作为占位符

在Python中,None 表示空值或占位符。

在masked_pos[:, :, None]这个切片操作中,None 被用作一个占位符,以改变张量的维度。这通常用于将一维张量变为二维张量,或者改变张量的形状。

具体来说,masked_pos[:, :, None] 的操作是用于在 masked_pos 这个张量的最后一个维度(通常是元素的维度)上增加一个新的维度。这个新维度将在每个原始元素之间插入,将原本的一维数据转换为二维数据。

这种操作通常在深度学习中用于广播(broadcasting)操作,以便进行元素-wise 的运算或者与具有不同维度的张量进行运算。它允许在某些情况下,将一维张量与二维张量相乘或执行其他相应的操作,而不会引发维度不匹配的错误。

例如,如果 masked_pos 是一个形状为 (batchsize, sequencelength) 的张量,而你想要在每个位置上添加一个额外的维度以进行某种操作,你可以使用 masked_pos[:, :, None] 来将其形状变为 (batchsize, sequencelength, 1)。这将允许你在新的维度上执行操作,而不会影响原始数据的形状。

总之,None 在这里的作用是用来增加维度,以便在深度学习中进行适当的数据操作。这是NumPy和PyTorch等库中的常见用法。

使用torch.unsequeeze函数

torch.unsqueeze(input, dim) 函数是 PyTorch 中用于在指定位置 dim(维度)上增加一个新的维度的操作。它的作用是将输入张量在指定的位置上增加一个新的维度,使得张量的维度数增加 1。
函数参数说明:

1.input:输入的张量。
2.dim:要增加新维度的位置。例如,如果 dim=0,则在张量的最前面增加一个新维度;如果 dim=1,则在张量的第二个位置(从0开始数)增加一个新维度。如果 dim 超出了输入张量的维度范围,会引发错误。

示例:

import torch

# 创建一个形状为 (3, 4) 的张量
x = torch.tensor([[1, 2, 3, 4],
                  [5, 6, 7, 8],
                  [9, 10, 11, 12]])

# 在第一个维度上增加新维度,使其形状变为 (1, 3, 4)
new_x = torch.unsqueeze(x, dim=0)

print(new_x.shape)  # 输出: torch.Size([1, 3, 4])

在这个例子中,torch.unsqueeze 将原始的形状为 (3, 4) 的张量 x 在第一个维度上增加了一个新维度,使得新的张量 new_x 的形状变为 (1, 3, 4)。新维度的大小为1,因为在此例中只是在原来的维度上插入了一个新的单元。这种操作通常在深度学习中用于广播操作,以便在进行元素-wise 运算时匹配不同形状的张量。

综合案例

import torch
a=torch.arange(12).view(3,4)
b=a[:,:,None]
print(torch.unsqueeze(a,2).shape)
print(a.shape,b.shape)

out

torch.Size([3, 4, 1])
torch.Size([3, 4]) torch.Size([3, 4, 1])

你可能感兴趣的:(python,python)