shuffle_channel

paddle.fluid.layers.nn. shuffle_channel ( x, group, name=None ) [source]

This operator shuffles the channels of input x. It divide the input channels in each group into group subgroups, and obtain a new order by selecting element from every subgroup one by one.

Please refer to the paper https://arxiv.org/pdf/1707.01083.pdf

Given a 4-D tensor input with the shape (N, C, H, W):
    input.shape = (1, 4, 2, 2)
    input.data =[[[[0.1, 0.2],
                   [0.2, 0.3]],

                  [[0.3, 0.4],
                   [0.4, 0.5]],

                  [[0.5, 0.6],
                   [0.6, 0.7]],

                  [[0.7, 0.8],
                   [0.8, 0.9]]]]
    Given group: 2
    then we get a 4-D tensor out with the same shape of input:
    out.shape = (1, 4, 2, 2)
    out.data = [[[[0.1, 0.2],
                  [0.2, 0.3]],

                 [[0.5, 0.6],
                  [0.6, 0.7]],

                 [[0.3, 0.4],
                  [0.4, 0.5]],

                 [[0.7, 0.8],
                  [0.8, 0.9]]]]
Parameters
  • x (Variable) – The input tensor variable. It should be a 4-D tensor with shape [N, C, H, W]

  • group (int) – Indicating the counts of subgroups, It should divide the number of channels.

Returns

the channels shuffling result is a tensor variable with the same shape and same type as the input.

Return type

out(Variable)

Raises

ValueError – If group is not an int type variable.

Examples

import paddle
import paddle.fluid as fluid
paddle.enable_static()
input = fluid.data(name='input', shape=[None,4,2,2], dtype='float32')
out = fluid.layers.shuffle_channel(x=input, group=2)