Pytorch Pytork中nn.线性层在附加尺寸上的应用

Pytorch Pytork中nn.线性层在附加尺寸上的应用,pytorch,tensor,Pytorch,Tensor,pytorch中的完全连接层(nn.Linear)是如何应用于“附加尺寸”的?这说明,它可以应用于将张量(N,*,in_特征)连接到(N,*,out_特征),其中N在一批示例的数量中,因此它是不相关的,*是那些“附加”维度。这是否意味着使用附加维度中的所有可能切片对单个层进行训练,或者是为每个切片或其他不同的对象训练的单独层?在线性中学习了输入特征*输出特征参数。在线性中学习了权重和输出特征参数线性偏差。你可以把nn.Linear想象成 将张量重塑为一些(N',in_特征),其中N'是N和*描述

pytorch中的完全连接层(
nn.Linear
)是如何应用于“附加尺寸”的?这说明,它可以应用于将张量
(N,*,in_特征)
连接到
(N,*,out_特征)
,其中
N
在一批示例的数量中,因此它是不相关的,
*
是那些“附加”维度。这是否意味着使用附加维度中的所有可能切片对单个层进行训练,或者是为每个切片或其他不同的对象训练的单独层?

线性中学习了
输入特征*输出特征
参数。在
线性中学习了权重
输出特征
参数
线性偏差
。你可以把
nn.Linear
想象成

  • 将张量重塑为一些
    (N',in_特征)
    ,其中
    N'
    N
    *
    描述的所有维度的乘积:
    input\u 2d=input。重塑(-1,in_特征)
  • 应用标准矩阵乘法
    output\u 2d=linear.weight@input\u 2d
  • 添加偏差
    output\u 2d+=linear.bias.reformate(1,in\u功能)
    (注意我们在所有
    N'
    维度上广播了它)
  • 重塑输出,使其尺寸与
    输入
    相同,除了最后一个尺寸外:
    输出=输出_2d。重塑(*input.shape[:-1],out_特征)
  • 返回输出

  • 因此,前导维度
    N
    被视为与
    *
    维度相同。文档将
    N
    明确化,让您知道输入必须至少是2d,但可以是您希望的任意多个维度。

    为了验证我的理解,这实际上意味着单个层(=一组
    输入特征*输出特征
    权重和
    输出特征
    偏差)所有切片都经过额外维度的训练(因此我们得到的是
    N'
    训练示例,而不是原始的
    N
    )。这是你回答的正确措辞吗?是的。我没有用这种方式表达它,因为我不确定我是否理解您想要分割它的方式,但是是的,这里有
    N'
    示例。