Paddle 和 PyTorch 中 nn.functional.linear 权重转置导致计算不同

Posted 氵文大师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paddle 和 PyTorch 中 nn.functional.linear 权重转置导致计算不同相关的知识,希望对你有一定的参考价值。

我的 Paddle 版本 和 PyTorch 版本:

>>> paddle.__version__
'2.4.0'
>>> torch.__version__
'1.13.1+cu117'

paddle中的 linear 计算公式:
O u t = X W + b Out = XW + b Out=XW+b

而 Torch 中的计算公式:
y = x A T + b y = x A^T + b y=xAT+b

torch 中的权重会经过转置在做计算,以下是一个 demo

import paddle
import torch
import numpy as np
import paddle.nn.functional as pF
import torch.nn.functional as tF

np.random.seed(1107)

w = np.random.randn(3, 3)
b = np.random.randn(3,)
x = np.random.randn(2, 3)

w_p = paddle.to_tensor(w)
b_p = paddle.to_tensor(b)
x_p = paddle.to_tensor(x)

w_t = torch.tensor(w)
b_t = torch.tensor(b)
x_t = torch.tensor(x)

y_np = np.matmul(x, w) + b
y_p = pF.linear(x_p, w_p, b_p)
y_t = tF.linear(x_t, w_t.T, b_t)

print(y_np)
print(y_p)
print(y_t)
[[ 0.62959419 -1.8686625   1.47863036]
 [ 1.31505431 -0.37713307 -1.04742683]]
 
Tensor(shape=[2, 3], dtype=float64, place=Place(cpu), stop_gradient=True,
       [[ 0.62959419, -1.86866250,  1.47863036],
        [ 1.31505431, -0.37713307, -1.04742683]])
        
tensor([[ 0.6296, -1.8687,  1.4786],
        [ 1.3151, -0.3771, -1.0474]], dtype=torch.float64)

以上是关于Paddle 和 PyTorch 中 nn.functional.linear 权重转置导致计算不同的主要内容,如果未能解决你的问题,请参考以下文章

基于pytorch的CNN猫狗图分

利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn(适合小白的保姆级教学)

Paddle 点灯人 之 Tensor

Paddle 点灯人 之 Tensor

PPOCRv3模型转pytorch

常用的损失函数