From 93dcb889cf8b97975a4f02ea27e77366be9e5c87 Mon Sep 17 00:00:00 2001 From: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Date: Thu, 17 Mar 2022 12:09:08 +0800 Subject: [PATCH 1/5] Create docs for channel shuffle --- docs/api/paddle/nn/ChannelShuffle_cn.rst | 46 +++++++++++++++++++ .../nn/functional/channel_shuffle_cn.rst | 45 ++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 docs/api/paddle/nn/ChannelShuffle_cn.rst create mode 100644 docs/api/paddle/nn/functional/channel_shuffle_cn.rst diff --git a/docs/api/paddle/nn/ChannelShuffle_cn.rst b/docs/api/paddle/nn/ChannelShuffle_cn.rst new file mode 100644 index 00000000000..bae2c525070 --- /dev/null +++ b/docs/api/paddle/nn/ChannelShuffle_cn.rst @@ -0,0 +1,46 @@ +.. _cn_api_nn_ChannelShuffle: + +ChannelShuffle +------------------------------- + +.. py:function:: paddle.nn.ChannelShuffle(groups, data_format="NCHW", name=None) +该算子将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor按通道分成g组,得到形为[N, g, C/g, H, W]或[N, H, W, g, C/g]的Tensor,然后转置为[N, C/g, g, H, W]或[N, H, W, C/g, g]的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在2017年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 + + +参数 +::::::::: + - **groups** (int):要把通道分成的组数 + - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认:"NCHW" + - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + +形状 +::::::::: + - **x** (Tensor): 默认形状为(批大小,通道数,高度,宽度),即NCHW格式的4-D Tensor或NHWC格式的4-D Tensor。 其数据类型为float32, float64. + - **output** (Tensor): 其形状与数据类型均与输入相同。 + +返回 +::::::::: +计算ChannelShuffle的可调用对象 + +代码示例 +::::::::: +.. code-block:: python + + import paddle + import paddle.nn as nn + x = paddle.arange(0, 0.6, 0.1, 'float32') + x = paddle.reshape(x, [1, 6, 1, 1]) + # [[[[0. ]], + # [[0.10000000]], + # [[0.20000000]], + # [[0.30000001]], + # [[0.40000001]], + # [[0.50000000]]]] + channel_shuffle = nn.ChannelShuffle(3) + y = channel_shuffle(x) + # [[[[0. ]], + # [[0.20000000]], + # [[0.40000001]], + # [[0.10000000]], + # [[0.30000001]], + # [[0.50000000]]]] diff --git a/docs/api/paddle/nn/functional/channel_shuffle_cn.rst b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst new file mode 100644 index 00000000000..1c024fd6d2f --- /dev/null +++ b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst @@ -0,0 +1,45 @@ +.. _cn_api_nn_functional_channel_shuffle: + + +channel_shuffle +------------------------------- + +.. py:function:: paddle.nn.functional.channel_shuffle(x, groups, data_format="NCHW", name=None) +该算子将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor按通道分成g组,得到形为[N, g, C/g, H, W]或[N, H, W, g, C/g]的Tensor,然后转置为[N, C/g, g, H, W]或[N, H, W, C/g, g]的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在2017年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 + +.. note:: + 详细请参考对应的 `Class` 请参考: :ref:`cn_api_nn_ChannelShuffle` 。 + +参数 +::::::::: + - **x** (Tensor): 当前算子的输入, 其是一个形状为 `[N, C, H, W]` 的4-D Tensor。其中 `N` 是batch size, `C` 是通道数, `H` 是输入特征的高度, `W` 是输入特征的宽度。 其数据类型为float32或者float64。 + - **groups** (int):要把通道分成的组数 + - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认:"NCHW" + - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + +返回 +::::::::: +``Tensor``, 输出Tensor, 其数据类型与输入相同。 + +代码示例 +::::::::: + +.. code-block:: python + + import paddle + import paddle.nn.functional as F + x = paddle.arange(0, 0.6, 0.1, 'float32') + x = paddle.reshape(x, [1, 6, 1, 1]) + # [[[[0. ]], + # [[0.10000000]], + # [[0.20000000]], + # [[0.30000001]], + # [[0.40000001]], + # [[0.50000000]]]] + y = F.channel_shuffle(x, 3) + # [[[[0. ]], + # [[0.20000000]], + # [[0.40000001]], + # [[0.10000000]], + # [[0.30000001]], + # [[0.50000000]]]] From d276a0503e44eaeabd197066f79f8b7241427415 Mon Sep 17 00:00:00 2001 From: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Date: Thu, 17 Mar 2022 12:51:55 +0800 Subject: [PATCH 2/5] Update docs for channel shuffle --- docs/api/paddle/nn/ChannelShuffle_cn.rst | 12 ++++++------ docs/api/paddle/nn/functional/channel_shuffle_cn.rst | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/api/paddle/nn/ChannelShuffle_cn.rst b/docs/api/paddle/nn/ChannelShuffle_cn.rst index bae2c525070..d8da0c7a2e5 100644 --- a/docs/api/paddle/nn/ChannelShuffle_cn.rst +++ b/docs/api/paddle/nn/ChannelShuffle_cn.rst @@ -9,18 +9,18 @@ ChannelShuffle 参数 ::::::::: - - **groups** (int):要把通道分成的组数 - - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认:"NCHW" - - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + - **groups** (int): 要把通道分成的组数; + - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认: "NCHW"; + - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 形状 ::::::::: - - **x** (Tensor): 默认形状为(批大小,通道数,高度,宽度),即NCHW格式的4-D Tensor或NHWC格式的4-D Tensor。 其数据类型为float32, float64. - - **output** (Tensor): 其形状与数据类型均与输入相同。 + - **x** (Tensor): 默认形状为 (批大小,通道数,高度,宽度),即NCHW格式的4-D Tensor。其数据类型为float32, float64; + - **output** (Tensor): 其形状与数据类型均和输入相同。 返回 ::::::::: -计算ChannelShuffle的可调用对象 +计算ChannelShuffle的可调用对象。 代码示例 ::::::::: diff --git a/docs/api/paddle/nn/functional/channel_shuffle_cn.rst b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst index 1c024fd6d2f..92433ca7699 100644 --- a/docs/api/paddle/nn/functional/channel_shuffle_cn.rst +++ b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst @@ -12,14 +12,14 @@ channel_shuffle 参数 ::::::::: - - **x** (Tensor): 当前算子的输入, 其是一个形状为 `[N, C, H, W]` 的4-D Tensor。其中 `N` 是batch size, `C` 是通道数, `H` 是输入特征的高度, `W` 是输入特征的宽度。 其数据类型为float32或者float64。 - - **groups** (int):要把通道分成的组数 - - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认:"NCHW" - - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + - **x** (Tensor): 当前算子的输入,其是一个形状为 `[N, C, H, W]` 的4-D Tensor。其中 `N` 是batch size,`C` 是通道数,`H` 是输入特征的高度,`W` 是输入特征的宽度。其数据类型为float32或者float64; + - **groups** (int): 要把通道分成的组数; + - **data_format** (str,可选): 数据格式,可选: "NCHW"或"NHWC",默认: "NCHW"; + - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 返回 ::::::::: -``Tensor``, 输出Tensor, 其数据类型与输入相同。 +``Tensor``,输出Tensor,其数据类型与输入相同。 代码示例 ::::::::: From 02bfe29903619c5b0fe151a4f0039a85f3e40b27 Mon Sep 17 00:00:00 2001 From: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Date: Fri, 8 Apr 2022 12:26:19 +0800 Subject: [PATCH 3/5] add ChannelShuffle --- docs/api/paddle/nn/Overview_cn.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api/paddle/nn/Overview_cn.rst b/docs/api/paddle/nn/Overview_cn.rst index 33d5c77c358..9fff8513c5f 100644 --- a/docs/api/paddle/nn/Overview_cn.rst +++ b/docs/api/paddle/nn/Overview_cn.rst @@ -266,6 +266,7 @@ Vision层 :header: "API名称", "API功能" + " :ref:`paddle.nn.ChannelShuffle ` ", "将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor按通道分成g组,得到形为[N, g, C/g, H, W]或[N, H, W, g, C/g]的Tensor,然后转置为[N, C/g, g, H, W]或[N, H, W, C/g, g]的形状,最后重新排列为原来的形状" " :ref:`paddle.nn.PixelShuffle ` ", "将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor重新排列成形为 [N, C/r**2, H*r, W*r]或 [N, H*r, W*r, C/r**2] 的Tensor" " :ref:`paddle.nn.Upsample ` ", "用于调整一个batch中图片的大小" " :ref:`paddle.nn.UpsamplingBilinear2D ` ", "用于调整一个batch中图片的大小(使用双线性插值方法)" From b2c69af9eabacad69ea7627edb82658a0ec65937 Mon Sep 17 00:00:00 2001 From: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Date: Tue, 19 Apr 2022 13:10:27 +0800 Subject: [PATCH 4/5] Update ChannelShuffle_cn.rst --- docs/api/paddle/nn/ChannelShuffle_cn.rst | 35 ++++++------------------ 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/docs/api/paddle/nn/ChannelShuffle_cn.rst b/docs/api/paddle/nn/ChannelShuffle_cn.rst index d8da0c7a2e5..cfd9c5fe4f2 100644 --- a/docs/api/paddle/nn/ChannelShuffle_cn.rst +++ b/docs/api/paddle/nn/ChannelShuffle_cn.rst @@ -4,43 +4,24 @@ ChannelShuffle ------------------------------- .. py:function:: paddle.nn.ChannelShuffle(groups, data_format="NCHW", name=None) -该算子将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor按通道分成g组,得到形为[N, g, C/g, H, W]或[N, H, W, g, C/g]的Tensor,然后转置为[N, C/g, g, H, W]或[N, H, W, C/g, g]的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在2017年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 +该算子将一个形为 [N, C, H, W] 或是 [N, H, W, C] 的 Tensor 按通道分成 g 组,得到形为 [N, g, C/g, H, W] 或 [N, H, W, g, C/g] 的 Tensor,然后转置为 [N, C/g, g, H, W] 或 [N, H, W, C/g, g] 的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在 2017 年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 参数 ::::::::: - - **groups** (int): 要把通道分成的组数; - - **data_format** (str,可选): 数据格式,可选:"NCHW"或"NHWC",默认: "NCHW"; - - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + - **groups** (int) – 要把通道分成的组数。 + - **data_format** (str,可选) – 数据格式,可选:NCHW 或 NHWC,默认为 NCHW,即(批大小,通道数,高度,宽度)的格式。 + - **name** (str,可选) – 操作的名称(可选,默认值为 None),大多数情况下不需要设置此属性。更多信息请参见 :ref:`api_guide_Name`。 形状 ::::::::: - - **x** (Tensor): 默认形状为 (批大小,通道数,高度,宽度),即NCHW格式的4-D Tensor。其数据类型为float32, float64; - - **output** (Tensor): 其形状与数据类型均和输入相同。 + - **x** (Tensor) – 默认形状为(批大小,通道数,高度,宽度),即 NCHW 格式的 4-D Tensor。其数据类型为 float32 或 float64。 + - **out** (Tensor) – 其形状与数据类型均和输入相同。 返回 ::::::::: -计算ChannelShuffle的可调用对象。 +计算 ChannelShuffle 的可调用对象。 代码示例 ::::::::: -.. code-block:: python - - import paddle - import paddle.nn as nn - x = paddle.arange(0, 0.6, 0.1, 'float32') - x = paddle.reshape(x, [1, 6, 1, 1]) - # [[[[0. ]], - # [[0.10000000]], - # [[0.20000000]], - # [[0.30000001]], - # [[0.40000001]], - # [[0.50000000]]]] - channel_shuffle = nn.ChannelShuffle(3) - y = channel_shuffle(x) - # [[[[0. ]], - # [[0.20000000]], - # [[0.40000001]], - # [[0.10000000]], - # [[0.30000001]], - # [[0.50000000]]]] +COPY-FROM: paddle.nn.ChannelShuffle:ChannelShuffle-example From 16ca92ebe61d7873ba242b91cbb6e2d060f37e2b Mon Sep 17 00:00:00 2001 From: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Date: Tue, 19 Apr 2022 13:10:31 +0800 Subject: [PATCH 5/5] Update channel_shuffle_cn.rst --- .../nn/functional/channel_shuffle_cn.rst | 35 +++++-------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/docs/api/paddle/nn/functional/channel_shuffle_cn.rst b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst index 92433ca7699..4f90a67227c 100644 --- a/docs/api/paddle/nn/functional/channel_shuffle_cn.rst +++ b/docs/api/paddle/nn/functional/channel_shuffle_cn.rst @@ -5,41 +5,22 @@ channel_shuffle ------------------------------- .. py:function:: paddle.nn.functional.channel_shuffle(x, groups, data_format="NCHW", name=None) -该算子将一个形为[N, C, H, W]或是[N, H, W, C]的Tensor按通道分成g组,得到形为[N, g, C/g, H, W]或[N, H, W, g, C/g]的Tensor,然后转置为[N, C/g, g, H, W]或[N, H, W, C/g, g]的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在2017年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 +该算子将一个形为 [N, C, H, W] 或是 [N, H, W, C] 的 Tensor 按通道分成 g 组,得到形为 [N, g, C/g, H, W] 或 [N, H, W, g, C/g] 的 Tensor,然后转置为 [N, C/g, g, H, W] 或 [N, H, W, C/g, g] 的形状,最后重塑为原来的形状。这样做可以增加通道间的信息流动,提高特征的重用率。详见张祥雨等人在 2017 年发表的论文 `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices `_ 。 .. note:: - 详细请参考对应的 `Class` 请参考: :ref:`cn_api_nn_ChannelShuffle` 。 + 详细请参考对应的 `Class` 请参考: :ref:`cn_api_nn_ChannelShuffle`。 参数 ::::::::: - - **x** (Tensor): 当前算子的输入,其是一个形状为 `[N, C, H, W]` 的4-D Tensor。其中 `N` 是batch size,`C` 是通道数,`H` 是输入特征的高度,`W` 是输入特征的宽度。其数据类型为float32或者float64; - - **groups** (int): 要把通道分成的组数; - - **data_format** (str,可选): 数据格式,可选: "NCHW"或"NHWC",默认: "NCHW"; - - **name** (str,可选): 操作的名称(可选,默认值为None)。更多信息请参见 :ref:`api_guide_Name`。 + - **x** (Tensor) – 当前算子的输入,其是一个形状为 [N, C, H, W] 的 4-D Tensor。其中 N 是批大小,C 是通道数,H 是输入特征的高度,W 是输入特征的宽度。其数据类型为 float32 或 float64。 + - **groups** (int) – 要把通道分成的组数; + - **data_format** (str,可选) – 数据格式,可选:NCHW 或 NHWC,默认为 NCHW,即(批大小,通道数,高度,宽度)的格式。 + - **name** (str,可选) – 操作的名称(可选,默认值为 None),大多数情况下不需要设置此属性。更多信息请参见 :ref:`api_guide_Name`。 返回 ::::::::: -``Tensor``,输出Tensor,其数据类型与输入相同。 +``Tensor``,调整过通道顺序的 Tensor,其数据类型与输入相同。 代码示例 ::::::::: - -.. code-block:: python - - import paddle - import paddle.nn.functional as F - x = paddle.arange(0, 0.6, 0.1, 'float32') - x = paddle.reshape(x, [1, 6, 1, 1]) - # [[[[0. ]], - # [[0.10000000]], - # [[0.20000000]], - # [[0.30000001]], - # [[0.40000001]], - # [[0.50000000]]]] - y = F.channel_shuffle(x, 3) - # [[[[0. ]], - # [[0.20000000]], - # [[0.40000001]], - # [[0.10000000]], - # [[0.30000001]], - # [[0.50000000]]]] +COPY-FROM: paddle.nn.functional.channel_shuffle:channel_shuffle-example