先上结论:
nn.Linear就是nn.Embedding
验证过程如下:
- 导入必要包
- 实例化 embedding, fc,以及需要输入到embed和fc的数据(这里用了onehot生成数据,实际情况输入可以为任意数据)
- 将数据输入到embed,查看结果
- 手动验证embed的计算过程:(输入数据 X weight,这里的X代表矩阵乘法)
- 将全连接成的参数设定为 embed的权重,用来确定fc和embed的内部处理流程是否一样
- 结果表明,embed和fc是一样的
Note: fc和embed的权重略有差别, fc.weight = embed.weight.T ,是个转置的区别,pytorch给的公式就是这样。
jupyter的第3和第5个cell可以确定,Embedding和FC输出的结果是相同的。第4个cell是手动验证Embedding的计算过程
2022.8.24更新
最近在看重参数的内容,无意中又找到了关于 Embedding的介绍,直接挂链接
词向量与Embedding究竟是怎么回事
虽然说从运算过程来说,nn.Embedding与nn.Linear几乎相同,但是nn.Embdding的层的参数是是直接对应于词的表征的,这和nn.Linear还是有本质区别的。