mindspore.ops.batch_to_space_nd

mindspore.ops.batch_to_space_nd(input_x, block_shape, crops)[源代码]

用块划分批次维度,并将这些块交错回空间维度。

此函数会将批次维度 N 划分为具有 block_shape 的块,即输出张量的 N 维度是划分后对应的块数。 输出张量的 \(w_1, ..., w_M\) 维度是原始的 \(w_1, ..., w_M\) 维度和 block_shape 的乘积从维度裁剪给定。 若输入的shape为 \((n, c_1, ... c_k, w_1, ..., w_M)\),则输出的shape为 \((n', c_1, ... c_k, w'_1, ..., w'_M)\) 。 其中

\[\begin{split}\begin{array}{ll} \\ n' = n//(block\_shape[0]*...*block\_shape[M-1]) \\ w'_i = w_i*block\_shape[i-1]-crops[i-1][0]-crops[i-1][1] \end{array}\end{split}\]
参数:
  • input_x (Tensor) - 输入张量,必须大于或者等于二维(Ascend平台必须为四维)。批次维度需能被 block_shape 整除。

  • block_shape (Union[list(int), tuple(int), int]) - 分割批次维度的块的数量,取值需大于或者等于1。如果 block_shape 为list或者tuple,其长度 M 为空间维度的长度。如果 block_shape 为整数,那么所有空间维度分割的个数均为 block_shape 。在Ascend后端 M 必须为2。

  • crops (Union[list(int), tuple(int)]) - 空间维度的裁剪大小,包含 M 个长度为2的list,取值需大于或等于0。crops[i] 为对空间维度 i 的填充,对应输入Tensor的维度 i+offsetoffset 为空间维度在输入Tensor维度中的偏移量,其中 offset=N-MN 是输入维度数。同时要求 \(input\_shape[i+offset]*block\_shape[i] > crops[i][0]+crops[i][1]\)

返回:

Tensor,经过划分排列之后的结果。

异常:
  • TypeError - 如果 block_shape 不是 list、tuple 或者 int。

  • TypeError - 如果 crops 不是 list 或者 tuple。

  • ValueError - 当 block_shape 为list或tuple时, block_shape 不是一维。

  • ValueError - 如果 Ascend 平台上 block_shape 长度不是2。

  • ValueError - 如果 block_shape 的元素不是大于或者等于一的整数。

  • ValueError - 如果 crops 的shape不是 (M, 2),其中 M 为 block_shape 的长度。

  • ValueError - 如果 crops 的元素不是非负的整数。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> import numpy as np
>>> from mindspore import Tensor, ops
>>> block_shape = [2, 2]
>>> crops = [[0, 0], [0, 0]]
>>> input_x = Tensor(np.array([[[[1]]], [[[2]]], [[[3]]], [[[4]]]]), mindspore.float32)
>>> output = ops.batch_to_space_nd(input_x, block_shape, crops)
>>> print(output)
[[[[1.  2.]
   [3.  4.]]]]