PyTorch中nn.Linear实例如何处理张量元组?以Annotated Transformer为例
代码逻辑解析
这段代码里并没有把元组(query, key, value)整体传入nn.Linear()实例,你误解了循环的配对逻辑:
zip(self.linears, (query, key, value))会将线性层列表的前3个元素,分别和元组内的query、key、value一一对应配对:- 第一个线性层
self.linears[0]对应单个张量query - 第二个线性层
self.linears[1]对应单个张量key - 第三个线性层
self.linears[2]对应单个张量value
- 第一个线性层
- 循环中的
lin(x)是逐个独立处理:每次取一组配对(一个线性层+一个单独的张量),用线性层对该张量执行线性变换,完全不存在元组被拼接成张量的操作。
后续的.view(nbatches, -1, self.h, self.d_k).transpose(1, 2)是把线性变换后的张量拆分多头维度,最终分别更新query、key、value,为多头注意力计算做准备。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

