【发布时间】:2019-06-23 23:20:21
【问题描述】:
pytorch 中的全连接层(nn.Linear)如何应用于“附加维度”? documentation 表示,它可以应用于将张量 (N,*,in_features) 连接到 (N,*,out_features),其中 N 在批次中的示例数中,因此无关紧要,而 * 是那些“附加”方面。这是否意味着使用附加维度中的所有可能切片来训练单个层,或者是为每个切片训练单独的层或其他不同的层?
【问题讨论】:
pytorch 中的全连接层(nn.Linear)如何应用于“附加维度”? documentation 表示,它可以应用于将张量 (N,*,in_features) 连接到 (N,*,out_features),其中 N 在批次中的示例数中,因此无关紧要,而 * 是那些“附加”方面。这是否意味着使用附加维度中的所有可能切片来训练单个层,或者是为每个切片训练单独的层或其他不同的层?
【问题讨论】:
在linear.weight 中学习了in_features * out_features 参数,在linear.bias 中学习了out_features 参数。您可以将nn.Linear 视为
(N', in_features),其中N' 是N 和* 描述的所有维度的乘积:input_2d = input.reshape(-1, in_features)
output_2d = linear.weight @ input_2d。output_2d += linear.bias.reshape(1, in_features)(请注意,我们会在所有N' 维度上广播它)input 相同的尺寸,除了最后一个:output = output_2d.reshape(*input.shape[:-1], out_features)
return output因此,前导维度 N 的处理方式与 * 维度相同。该文档明确说明了N,让您知道输入必须是至少 2d,但可以是任意多维。
【讨论】:
in_features * out_features 权重和out_features 偏差)通过附加维度在所有切片中进行训练(因此我们得到@987654342 @训练示例而不是原始的N)。这是对您答案的有效改写吗?
N' 示例。