mindspore.nn.Unfold
- class mindspore.nn.Unfold(ksizes, strides, rates, padding='valid')[source]
Extracts patches from images. The input tensor must be a 4-D tensor and the data format is NCHW.
- Parameters
ksizes (Union[tuple[int], list[int]]) – The size of sliding window, must be a tuple or a list of integers, and the format is [1, ksize_row, ksize_col, 1].
strides (Union[tuple[int], list[int]]) – Distance between the centers of the two consecutive patches, must be a tuple or list of int, and the format is [1, stride_row, stride_col, 1].
rates (Union[tuple[int], list[int]]) – In each extracted patch, the gap between the corresponding dimension pixel positions, must be a tuple or a list of integers, and the format is [1, rate_row, rate_col, 1].
padding (str) –
The type of padding algorithm, is a string whose value is “same” or “valid”, not case sensitive. Default: “valid”.
same: Means that the patch can take the part beyond the original image, and this part is filled with 0.
valid: Means that the taken patch area must be completely covered in the original image.
- Inputs:
x (Tensor) - A 4-D tensor whose shape is [in_batch, in_depth, in_row, in_col] and data type is number.
- Outputs:
Tensor, a 4-D tensor whose data type is same as x, and the shape is [out_batch, out_depth, out_row, out_col] where out_batch is the same as the in_batch.
\(out\_depth = ksize\_row * ksize\_col * in\_depth\)
\(out\_row = (in\_row - (ksize\_row + (ksize\_row - 1) * (rate\_row - 1))) // stride\_row + 1\)
\(out\_col = (in\_col - (ksize\_col + (ksize\_col - 1) * (rate\_col - 1))) // stride\_col + 1\)
- Raises
TypeError – If ksizes, strides or rates is neither a tuple nor list.
ValueError – If shape of ksizes, strides or rates is not (1, x_row, x_col, 1).
ValueError – If the second and third element of ksizes, strides or rates is less than 1.
- Supported Platforms:
Ascend
Examples
>>> net = Unfold(ksizes=[1, 2, 2, 1], strides=[1, 2, 2, 1], rates=[1, 2, 2, 1]) >>> # As stated in the above code: >>> # ksize_row = 2, ksize_col = 2, rate_row = 2, rate_col = 2, stride_row = 2, stride_col = 2. >>> image = Tensor(np.ones([2, 3, 6, 6]), dtype=mstype.float16) >>> # in_batch = 2, in_depth = 3, in_row = 6, in_col = 6. >>> # Substituting the formula to get: >>> # out_batch = in_batch = 2 >>> # out_depth = 2 * 2 * 3 = 12 >>> # out_row = (6 - (2 + (2 - 1) * (2 - 1))) // 2 + 1 = 2 >>> # out_col = (6 - (2 + (2 - 1) * (2 - 1))) // 2 + 1 = 2 >>> output = net(image) >>> print(output.shape) (2, 12, 2, 2)