今天周末,在家准备复现Transformer主干网络架构,期待中的一帆风顺果然还是没有出现…
报错说明,此处错误是我在复现,Transformer编码器过程中出现的,我的整个复现思路上是严格遵守,Transformer的实现思路的,但是出于对某些细节上可能功夫还是对Transformer理解不到位,所以造成了这个问题的出现。
复现Transformer网络架构参考论文地址:
个人百度网盘下载地址
链接:https://pan.baidu.com/s/1p9ZJpgeTTjEQVQmQDobbPA
提取码:l980
复制这段内容后打开百度网盘手机App,操作更方便哦
复现的Transformer网络架构如图所示:
在报错代码环节我是严格按照该网络架构实现,但依然还是出现了以下问题,总结来讲其实是1个问题,就是上一级所传的数据需要一个张量,但是我提供的是一个元祖。
AttributeError: 'tuple' object has no attribute 'mean'
TypeError: dropout(): argument 'input' (position 1) must be Tensor, not tuple
通过简单的对数据传输路径的分析,得到以下结论:
- 初始输入数据无问题,张量维度为torch.Size([2, 4, 512]);
- 模型实现结构代码无问题;
- 很有可能是上一个子层的返回数据结构有偏差;
果然,就是这个问题;
调整上一个子层返回数据结构,问题解决:耗时10分钟…
综合来看这个问题的出现还是个人对Transformer整体架构的一些细节理解不到位,还得继续加油…