1,Embedding初始化不当
为了使句子长度保持一致,在数据预处理时对句子进行了padding,并在Embedding层指定了padding_idx,但是在模型初始化时,错误使用了uniform_进行初始化,造成padding部分embedding输出不为0。这就导致模型将句子padding部分当成句子中的有用信息去学习,训练结果不收敛
emb = nn.Embedding(5,3,padding_idx=0)
print(emb.weight.data)
>>>tensor([[ 0.0000, 0.0000, 0.0000],
[ 1.8105, 1.2178, -0.2205],
[-0.3240, 1.5968, 0.4394],
[ 0.5957, 0.0333, 1.5510],
[-1.2320, 0.7576, -1.0856]])
# uniform_初始化之后,padding部分都变成非0数值
emb.weight.data.uniform_(-0.1, 0.1)
>>>tensor([[ 0.0468, 0.0842, -0.0063],
[-0.0537, 0.0975, 0.0155],
[ 0.0086, 0.0962, 0.0746],
[-0.0730, 0.0667, -0.0202],
[-0.0993, 0.0767, -0.0351]])