PaConvert
PaConvert copied to clipboard
got the wrong result when using paconvet
- pytorch
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))
- paddle
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.
@GreatV 你好,partial 形式的代码目前还不支持转换,这个可能后续会支持。另外再请问一下,这个case是具体实际模型中的用法case吗?
@zhwesky2010 有的, 例如 dino 里就有
- https://github.com/PaddleJitLab/dino/blob/713030cd5a8ba8fbab9a51980c9f17318891adbb/vision_transformer.py#L239
- https://github.com/RuijieJ/pren/blob/03d79e2477a9cbd2e9d0ea19d64458c4faea59f6/Nets/EfficientNet_utils.py#L89-L95
@GreatV 收到,我们后续评估新功能需求。