[ 参数不一致 ]torch.nn.parameter.Parameter

torch.nn.parameter.Parameter

torch.nn.parameter.Parameter(data=None,
                             requires_grad=True)

paddle.create_parameter

paddle.create_parameter(shape,
                        dtype,
                        name=None,
                        attr=None,
                        is_bias=False,
                        default_initializer=None)

两者功能一致但参数不一致,具体如下:

参数差异

| PyTorch | PaddlePaddle | 备注 | | ————- | ———— | —————————————————— | | data | - | 参数 Tensor,Paddle 无此参数。 | | requires_grad | - | ,Paddle 无此参数。 | | - | shape | 指定输出 Tensor 的形状,PyTorch 无此参数。 | | - | dtype | 初始化数据类型,PyTorch 无此参数。 | | - | attr | 指定参数的属性对象,PyTorch 无此参数。 | | - | is_bias | 当 default_initializer 为空,该值会对选择哪个默认初始化程序产生影响。如果 is_bias 为真,则使用 initializer.Constant(0.0),否则使用 Xavier(),PyTorch 无此参数。 | | - | default_initializer | 参数的初始化程序,PyTorch 无此参数。 |

功能差异

使用方式

PyTorch:通过设置data将 Tensor 赋给 Parameter。 PaddlePaddle:有 2 种方式创建 Parameter。方式一:通过设置attr将 ParamAttr 赋给 Parameter;方式二:通过设置shape(大小)、dtype(类型)、default_initializer(初始化方式)设置 Parameter。

梯度设置

PyTorch:通过设置requires_grad确定是否进行梯度反传。 PaddlePaddle:PaddlePaddle 无此功能。

代码示例

# PyTorch 示例:
import torch
x = torch.zeros(2, 3)
param = torch.nn.parameter.Parameter(x, requires_grad=False)

# 输出
# Parameter containing:
# tensor([[0., 0., 0.],
#         [0., 0., 0.]])
# PaddlePaddle 示例:
import paddle
x = paddle.zeros([2, 3], dtype="float32")
param = paddle.create_parameter(shape=x.shape,
                        dtype=str(x.numpy().dtype),
                        default_initializer=paddle.nn.initializer.Assign(x))
param.stop_gradient = True

# 输出
# Parameter containing:
# Tensor(shape=[2, 3], dtype=float32, place=CPUPlace, stop_gradient=True,
#        [[0., 0., 0.],
#         [0., 0., 0.]])