pytorch - nn.Linear层在pytorch中附加维度的应用
问题描述
pytorch中的全连接层(nn.Linear
)如何应用于“附加维度”?该文档说,它可以应用于将张量连接(N,*,in_features)
到(N,*,out_features)
,其中N
批次中的示例数量,因此它是无关紧要的,并且*
是那些“附加”维度。这是否意味着使用附加维度中的所有可能切片训练单个层,或者是为每个切片训练单独的层或其他不同的层?
解决方案
有in_features * out_features
学习的参数linear.weight
和out_features
学习的参数linear.bias
。你可以把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,但可以是任意多维。
推荐阅读
- node.js - Nodejs fs.watch / fs.readFile - 返回添加的文件
- reactjs - 显示来自给定数据对象的图像
- ajax - 来自 ajax 的 Laravel 表单验证返回错误
- python - 我正在尝试编写一个代码来随机选择一个随机选择了 3 次的女孩名字
- android - android-如何在叠加层中启动另一个应用程序
- ios - 如何确定用户是否从 iOS 应用程序中获得了任何 Apple Watch?
- javascript - 带有扩展运算符的未定义结果
- reactjs - 如何通过外部包将页面添加到 Next.js 应用程序?
- arrays - 为什么在声明中分配字符串而不是稍后?
- pyspark - 广播()和提示(“广播”)之间的pyspark区别