crop_tensor

paddle.fluid.layers.crop_tensor(x, shape=None, offsets=None, name=None)[source]

Crop input into output, as specified by offsets and shape.

* Case 1 (input is a 2-D Tensor):
    Input:
        X.shape = [3, 5]
        X.data = [[0, 1, 2, 0, 0],
                  [0, 3, 4, 0, 0],
                  [0, 0, 0, 0, 0]]
    Parameters:
        shape = [2, 2]
        offsets = [0, 1]
    Output:
        Out.shape = [2, 2]
        Out.data = [[1, 2],
                    [3, 4]]
* Case 2 (input is a 3-D Tensor):
    Input:
        X.shape = [2, 3, 4]
        X.data =  [[[0, 1, 2, 3],
                    [0, 5, 6, 7],
                    [0, 0, 0, 0]],
                   [[0, 3, 4, 5],
                    [0, 6, 7, 8],
                    [0, 0, 0, 0]]]
    Parameters:
        shape = [2, 2, -1]
        offsets = [0, 0, 1]
    Output:
        Out.shape = [2, 2, 3]
        Out.data  = [[[1, 2, 3],
                      [5, 6, 7]],
                     [[3, 4, 5],
                      [6, 7, 8]]]
Parameters
  • x (Variable) – 1-D to 6-D Tensor, the data type is float32, float64, int32 or int64.

  • shape (list|tuple|Variable) – The output shape is specified by shape. Its data type is int32. If a list/tuple, it’s length must be the same as the dimension size of x. If a Variable, it shoule be a 1-D Tensor. When it is a list, each element can be an integer or a Tensor of shape: [1]. If Variable contained, it is suitable for the case that the shape may be changed each iteration.

  • offsets (list|tuple|Variable, optional) – Specifies the cropping offsets at each dimension. Its data type is int32. If a list/tuple, it’s length must be the same as the dimension size of x. If a Variable, it shoule be a 1-D Tensor. When it is a list, each element can be an integer or a Tensor of shape: [1]. If Variable contained, it is suitable for the case that the offsets may be changed each iteration. Default: None, the offsets are 0 at each dimension.

  • name (str, optional) – The default value is None. Normally there is no need for user to set this property. For more information, please refer to Name .

Returns

The cropped Tensor has same data type with x.

Return type

Variable

Raises
  • TypeError – If the data type of x is not in: float32, float64, int32, int64.

  • TypeError – If shape is not a list, tuple or Variable.

  • TypeError – If the data type of shape is not int32.

  • TypeError – If offsets is not None and not a list, tuple or Variable.

  • TypeError – If the data type of offsets is not int32.

  • ValueError – If the element in offsets is less than zero.

Examples

import paddle.fluid as fluid
x = fluid.data(name="x", shape=[None, 3, 5], dtype="float32")
# x.shape = [-1, 3, 5], where -1 indicates batch size, and it will get the exact value in runtime.

# shape is a 1-D Tensor
crop_shape = fluid.data(name="crop_shape", shape=[3], dtype="int32")
crop0 = fluid.layers.crop_tensor(x, shape=crop_shape)
# crop0.shape = [-1, -1, -1], it means crop0.shape[0] = x.shape[0] in runtime.

# or shape is a list in which each element is a constant
crop1 = fluid.layers.crop_tensor(x, shape=[-1, -1, 3], offsets=[0, 1, 0])
# crop1.shape = [-1, 2, 3]

# or shape is a list in which each element is a constant or Variable
y = fluid.data(name="y", shape=[3, 8, 8], dtype="float32")
dim1 = fluid.data(name="dim1", shape=[1], dtype="int32")
crop2 = fluid.layers.crop_tensor(y, shape=[3, dim1, 4])
# crop2.shape = [3, -1, 4]

# offsets is a 1-D Tensor
crop_offsets = fluid.data(name="crop_offsets", shape=[3], dtype="int32")
crop3 = fluid.layers.crop_tensor(x, shape=[-1, 2, 3], offsets=crop_offsets)
# crop3.shape = [-1, 2, 3]

# offsets is a list in which each element is a constant or Variable
offsets_var =  fluid.data(name="dim1", shape=[1], dtype="int32")
crop4 = fluid.layers.crop_tensor(x, shape=[-1, 2, 3], offsets=[0, 1, offsets_var])
# crop4.shape = [-1, 2, 3]