如何解决使用多个维度处理 nn.Linear
PyTorch 的 nn.Linear(in_features,out_features)
接受大小为 (N_batch,N_1,N_2,...,N_end)
的张量,其中 N_end = in_features
。输出是大小为 (N_batch,out_features)
的张量。
我不太清楚它在以下情况下的表现:
- 如果
v
是一行,则输出为 A^Tv+b - 如果
M
是一个矩阵,它被当作一批行处理,对于每一行v
,执行A^Tv+b,然后一切都放回矩阵形式 - 如果输入张量的等级更高怎么办?假设输入张量的维度为
(N_batch,4,5,6,7)
。该层是否会输出一批大小为N_batch
的(1,1,N_out)
形状的向量,所有东西都形成一个(N_batch,N_out)
张量?
解决方法
对于1维,输入是带有dim in_features
的向量,输出是out_features
。按你说的计算
对于二维,输入是 N_batch
向量,暗淡 in_features
,输出是 N_batch
向量,暗淡 out_features
。按你说的计算
对于3维,输入为(N_batch,C,in_features)
,即N_batch
矩阵,每个矩阵有C
行向量,dim为in_features
,输出为N_batch
矩阵,每个矩阵有 C
行向量,dim out_features
。
如果您觉得很难想到 3 维案例。一种简单的方法是将形状展平为 (N_batch * C,in_features)
,因此输入变为 N_batch * C
行的向量,其中带有暗淡的 in_features
,这与二维情况相同。扁平化部分不涉及计算,只需重新排列输入即可。
所以在你的情况 3 中,它的输出是 N_batch
个向量的 (3,4,5,6,N_out)
,或者在用暗淡的 N_batch * 3 * 4 * 5 * 6
重新排列它的 N_out
向量之后。您的所有 1 个暗淡的形状不正确,因为总共只有 N_batch * N_out
个元素。
如果您深入研究 pytorch 的内部 C 实现,您会发现 matmul
实现实际上使尺寸变平,正如我所描述的那样 native matmul 这是 nn.Linear
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。