ParameterList

class paddle.fluid.dygraph.ParameterList(parameters=None)[源代码]

参数列表容器。此容器的行为类似于Python列表,但它包含的参数将被正确地注册和添加。

参数

  • parameters (iterable,可选) - 可迭代的Parameters。

返回

代码示例

  1. import paddle.fluid as fluid
  2. import numpy as np
  3. class MyLayer(fluid.Layer):
  4. def __init__(self, num_stacked_param):
  5. super(MyLayer, self).__init__()
  6. # 使用可迭代的 Parameters 创建 ParameterList
  7. self.params = fluid.dygraph.ParameterList(
  8. [fluid.layers.create_parameter(
  9. shape=[2, 2], dtype='float32')] * num_stacked_param)
  10. def forward(self, x):
  11. for i, p in enumerate(self.params):
  12. tmp = self._helper.create_variable_for_type_inference('float32')
  13. self._helper.append_op(
  14. type="mul",
  15. inputs={"X": x,
  16. "Y": p},
  17. outputs={"Out": tmp},
  18. attrs={"x_num_col_dims": 1,
  19. "y_num_col_dims": 1})
  20. x = tmp
  21. return x
  22. data_np = np.random.uniform(-1, 1, [5, 2]).astype('float32')
  23. with fluid.dygraph.guard():
  24. x = fluid.dygraph.to_variable(data_np)
  25. num_stacked_param = 4
  26. model = MyLayer(num_stacked_param)
  27. print(len(model.params)) # 4
  28. res = model(x)
  29. print(res.shape) # [5, 2]
  30. replaced_param = fluid.layers.create_parameter(shape=[2, 3], dtype='float32')
  31. model.params[num_stacked_param - 1] = replaced_param # 替换最后一个参数
  32. res = model(x)
  33. print(res.shape) # [5, 3]
  34. model.params.append(fluid.layers.create_parameter(shape=[3, 4], dtype='float32')) # 添加参数
  35. print(len(model.params)) # 5
  36. res = model(x)
  37. print(res.shape) # [5, 4]