expand_as

paddle.fluid.layers. expand_as ( x, target_tensor, name=None ) [源代码]

该OP会根据输入的variable target_tensor 对输入 x 的各维度进行广播。通过 target_tensor``的维度来为 ``x 的每个维度设置广播的次数,使得x 的维度与target_tensor的维度相同。 x 的秩应小于等于6。注意, target_tensor 的秩必须与 x 的秩相同。 注意:target_tensor 对应的每一维必须能整除输入x中对应的维度,否则会报错。比如,target_tensor的维度为[2,6,2],x为[2,3,1],则整除后为[1,2,2],x广播后维度为[2,6,2]。如果target_tensor的维度为[2,5,2],第二维5不能整除x的第二维3,则会报错。

以下是一个示例:

  1. 输入(x) 是一个形状为[2, 3, 1]的 3-D Tensor :
  2. [
  3. [[1], [2], [3]],
  4. [[4], [5], [6]]
  5. ]
  6. target_tensor的维度 : [2, 6, 2]
  7. 输出(out) 是一个形状为[2, 6, 2]的 3-D Tensor:
  8. [
  9. [[1, 1], [2, 2], [3, 3], [1, 1], [2, 2], [3, 3]],
  10. [[4, 4], [5, 5], [6, 6], [4, 4], [5, 5], [6, 6]]
  11. ]

参数:

  • x (Variable)- 维度最高为6的多维 TensorLoDTensor,数据类型为 float32float64int32bool

  • target_tensor (list|tuple|Variable)- 数据类型为 float32float64int32bool 。可为Tensor或者LODTensor。

  • name (str,可选)- 具体用法请参见 Name ,一般无需设置。默认值: None

返回:维度与输入 x 相同的 TensorLoDTensor,数据类型与 x 相同。返回值的每个维度的大小等于target_tensor 对应的维度的大小。

返回类型:Variable

抛出异常:

  • ValueErrortarget_tensor 对应的每一维必须能整除输入x中对应的维度,否则会报错。

代码示例

  1. import paddle.fluid as fluid
  2. import numpy as np
  3. data = fluid.data(name="data", shape=[-1,10], dtype='float64')
  4. target_tensor = fluid.data(name="target_tensor", shape=[-1,20], dtype='float64')
  5. result = fluid.layers.expand_as(x=data, target_tensor=target_tensor)
  6. use_cuda = False
  7. place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
  8. exe = fluid.Executor(place)
  9. exe.run(fluid.default_startup_program())
  10. x = np.random.rand(3,10)
  11. y = np.random.rand(3,20)
  12. output= exe.run(feed={"data":x,"target_tensor":y},fetch_list=[result.name])
  13. print(output[0].shape)
  14. #(3,20)