PaddlePaddle / PaConvert

PaddlePaddle Code Convert Toolkit. 『飞桨』深度学习代码转换工具
Apache License 2.0
87 stars 53 forks source link

got the wrong result when using paconvet #340

Open GreatV opened 10 months ago

GreatV commented 10 months ago
import torch.nn as nn
from functools import partial

class test(nn.Module):
    def __init__(self, in_channels, out_channels, norm_func=nn.LayerNorm):
        super(test, self).__init__()
        self.norm = norm_func(in_channels)
        self.linear = nn.Linear(in_channels, out_channels)

    def forward(self, x):
        x = self.norm(x)
        x = self.linear(x)
        return x

if __name__ == "__main__":
    model = test(10, 10, partial(nn.LayerNorm, eps=0.2))
import paddle
from functools import partial

class test(paddle.nn.Layer):

    def __init__(self, in_channels, out_channels, norm_func=paddle.nn.LayerNorm
        ):
        super(test, self).__init__()
        self.norm = norm_func(in_channels)
        self.linear = paddle.nn.Linear(in_features=in_channels,
            out_features=out_channels)

    def forward(self, x):
        x = self.norm(x)
        x = self.linear(x)
        return x

if __name__ == '__main__':
    model = test(10, 10, partial(paddle.nn.LayerNorm, eps=0.2))
Traceback (most recent call last):
  File "/home/greatx/repos/PaConvert/paddle_project/test.py", line 21, in <module>
    model = test(10, 10, partial(paddle.nn.LayerNorm, eps=0.2))
  File "/home/greatx/repos/PaConvert/paddle_project/test.py", line 10, in __init__
    self.norm = norm_func(in_channels)
TypeError: LayerNorm.__init__() got an unexpected keyword argument 'eps'

eps should be converted to epsilon.

zhwesky2010 commented 10 months ago

@GreatV 你好,partial 形式的代码目前还不支持转换,这个可能后续会支持。另外再请问一下,这个case是具体实际模型中的用法case吗?

GreatV commented 10 months ago

@zhwesky2010 有的, 例如 dino 里就有

zhwesky2010 commented 10 months ago

@GreatV 收到,我们后续评估新功能需求。