expand

  • paddle.fluid.layers.expand(x, expand_times, name=None)[源代码]

该OP会根据参数 expand_times 对输入 x 的各维度进行复制。通过参数 expand_times 来为 x 的每个维度设置复制次数。 x 的秩应小于等于6。注意, expand_times 的大小必须与 x 的秩相同。以下是一个用例:

  1. 输入(x) 是一个形状为[2, 3, 1]的 3-D Tensor :
  2.  
  3. [
  4. [[1], [2], [3]],
  5. [[4], [5], [6]]
  6. ]
  7.  
  8. 属性(expand_times): [1, 2, 2]
  9.  
  10. 输出(out) 是一个形状为[2, 6, 2]的 3-D Tensor:
  11.  
  12. [
  13. [[1, 1], [2, 2], [3, 3], [1, 1], [2, 2], [3, 3]],
  14. [[4, 4], [5, 5], [6, 6], [4, 4], [5, 5], [6, 6]]
  15. ]
  • 参数:
    • x (Variable)- 维度最高为6的多维 TensorLoDTensor,数据类型为 float32float64int32bool
    • expand_times (list|tuple|Variable)- 数据类型是 int32 。如果 expand_times 的类型是 list 或 tuple,它的元素可以是整数或者形状为[1]的 TensorLoDTensor。如果 expand_times 的类型是 Variable,则是1-D TensorLoDTensor。表示 x 每一个维度被复制的次数。
    • name (str,可选)- 具体用法请参见 Name ,一般无需设置。默认值: None

返回:维度与输入 x 相同的 TensorLoDTensor,数据类型与 x 相同。返回值的每个维度的大小等于 x 的相应维度的大小乘以 expand_times 给出的相应值。

返回类型:Variable

  • 抛出异常:
    • TypeErrorexpand_times 的类型应该是 list、tuple 或 Variable。
    • ValueErrorexpand_times 中的元素不能是负值。

代码示例

  1. import paddle.fluid as fluid
  2.  
  3. # example 1:
  4. data_1 = fluid.layers.fill_constant(shape=[2, 3, 1], dtype='int32', value=0)
  5. expanded_1 = fluid.layers.expand(data_1, expand_times=[1, 2, 2])
  6. # the shape of expanded_1 is [2, 6, 2].
  7.  
  8. # example 2:
  9. data_2 = fluid.layers.fill_constant(shape=[12, 14], dtype="int32", value=3)
  10. expand_times = fluid.layers.fill_constant(shape=[2], dtype="int32", value=4)
  11. expanded_2 = fluid.layers.expand(data_2, expand_times=expand_times)
  12. # the shape of expanded_2 is [48, 56].