Paddle 【论文复现】torch.nn.LayerNorm和paddle.nn.LayerNorm输出有差异

jtjikinw  于 2022-04-21  发布在  Java
关注(0)|答案(2)|浏览(225)

为使您的问题得到快速解决,在建立Issues前,请您先通过如下方式搜索是否有相似问题:【搜索issue关键字】【使用labels筛选】【官方文档】

如果您没有查询到相似问题,为快速解决您的提问,建立issue时请提供如下细节信息:

  • 标题:简洁、精准概括您的问题
  • 版本、环境信息:

   1)PaddlePaddle版本:PaddlePaddle2.1.2,
   2)CPU/GPU:CPU
   3)系统环境:Linux-5.4.104+-x86_64-with-Ubuntu-18.04-bionic
   4)Python版本号:3.7.11
   5)显存信息
注:您可以通过执行summary_env.py获取以上信息。

  • 复现信息:如为报错,请给出复现环境、复现步骤
  • 问题描述:

torch.nn.LayerNorm和paddle.nn.LayerNorm输出有差异
代码如下:
import torch
import paddle
import numpy as np
np.random.seed(666)
input=np.random.rand(207, 2, 1024).astype(np.float32)
input_paddle=paddle.to_tensor(input)
LayerNormPaddle=paddle.nn.LayerNorm(1024)

input_torch=torch.tensor(input)
LayerNormTorch=torch.nn.LayerNorm(1024)

print(LayerNormPaddle.weight)
print(np.shape(LayerNormTorch.weight),LayerNormTorch.weight)
print(LayerNormPaddle.bias)
print(np.shape(LayerNormTorch.bias),LayerNormTorch.bias)
print(LayerNormPaddle(input_paddle).numpy()-LayerNormTorch(input_torch).detach().numpy())
结果如下:
Parameter containing:
Tensor(shape=[1024], dtype=float32, place=CPUPlace, stop_gradient=False,
[1., 1., 1., ..., 1., 1., 1.])
torch.Size([1024]) Parameter containing:
tensor([1., 1., 1., ..., 1., 1., 1.], requires_grad=True)
Parameter containing:
Tensor(shape=[1024], dtype=float32, place=CPUPlace, stop_gradient=False,
[0., 0., 0., ..., 0., 0., 0.])
torch.Size([1024]) Parameter containing:
tensor([0., 0., 0., ..., 0., 0., 0.], requires_grad=True)
[[[ 1.0728836e-06 2.3841858e-06 8.9406967e-07 ... 2.0265579e-06
2.0265579e-06 3.5762787e-06]
[ 1.4305115e-06 1.1324883e-06 1.7881393e-06 ... -1.3113022e-06
-2.9802322e-06 -2.9057264e-07]]

[[-2.9802322e-06 2.3841858e-06 -2.7418137e-06 ... -2.9206276e-06
1.3113022e-06 1.9073486e-06]
[-3.0994415e-06 -1.0542572e-06 -1.3709068e-06 ... -1.2665987e-06
-3.8743019e-07 -2.9802322e-06]]

[[-1.4603138e-06 2.0265579e-06 5.3644180e-07 ... -7.8231096e-07
-1.1324883e-06 -2.8014183e-06]
[-3.8146973e-06 4.1723251e-07 -3.2186508e-06 ... -1.0728836e-06
-2.6226044e-06 7.7486038e-07]]

...

[[-1.1920929e-06 5.9604645e-07 -3.5762787e-07 ... 4.1723251e-07
-9.5367432e-07 -5.3644180e-07]
[ 1.3411045e-07 5.9604645e-08 -4.7683716e-07 ... 1.9371510e-07
-3.5762787e-07 -4.7683716e-07]]

[[ 2.3841858e-07 1.4901161e-08 2.3841858e-07 ... -2.3841858e-07
2.9802322e-08 -3.5762787e-07]
[-1.9073486e-06 -7.4505806e-07 3.8743019e-07 ... 8.9406967e-07
-1.3411045e-07 2.3841858e-06]]

[[-5.9604645e-07 -5.9604645e-07 -6.5565109e-07 ... -5.9604645e-07
-5.9604645e-07 -7.1525574e-07]
[ 1.1920929e-06 8.9406967e-07 5.3644180e-07 ... 1.0132790e-06
8.6426735e-07 3.5762787e-07]]]
虽然偏差比较小,但是对后续的影响会不断增大

hrysbysz

hrysbysz1#

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

neekobn8

neekobn82#

使用np.allclose对结果比较设置atol=1e-5可以通过,这个误差范围应该并不算太大。
但需要进一步确认的是:2个框架的结果哪个更接近理论值?如果你已经有验证结论,也可以将验证方法和结果贴在下方

相关问题