未验证 提交 44306155 编写于 作者: Z zhongpu 提交者: GitHub

update conv, pool, fc op for dygraph (#1235)

* update Conv2D_cn.rst, test=develop

* update conv and pool op, test=develop

* fix Conv2DTranspose_cn.rst, Conv2D_cn.rst, test=develop

* add comment for class Layer, test=develop

* add comment for class Layer, test=develop

* add comment for dygraph layer, test=develop

* add comment for dygraph layer, test=develop

* add comment for name, test=develop
上级 51321981
...@@ -5,93 +5,81 @@ Conv2DTranspose ...@@ -5,93 +5,81 @@ Conv2DTranspose
.. py:class:: paddle.fluid.dygraph.Conv2DTranspose(name_scope, num_filters, output_size=None, filter_size=None, padding=0, stride=1, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None) .. py:class:: paddle.fluid.dygraph.Conv2DTranspose(name_scope, num_filters, output_size=None, filter_size=None, padding=0, stride=1, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None)
该接口用于构建 ``Conv2DTranspose`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其将在神经网络中构建一个二维卷积转置层(Convlution2D Transpose Layer),其根据输入(input)、滤波器参数(num_filters、filter_size)、步长(stride)、填充(padding)、膨胀系数(dilation)、组数(groups)来计算得到输出特征图。输入和输出是 ``NCHW`` 格式,N是批数据大小,C是特征图个数,H是特征图高度,W是特征图宽度。滤波器的维度是 [M, C, H, W] ,M是输出特征图个数,C是输入特征图个数,H是滤波器高度,W是滤波器宽度。如果组数大于1,C等于输入特征图个数除以组数的结果。如果提供了偏移属性和激活函数类型,卷积的结果会和偏移相加,激活函数会作用在最终结果上。转置卷积的计算过程相当于卷积的反向计算,转置卷积又被称为反卷积(但其实并不是真正的反卷积)。详情请参考: `Conv2DTranspose <http://www.matthewzeiler.com/wp-content/uploads/2017/07/cvpr2010.pdf>`_ 。
2-D卷积转置层(Convlution2D transpose layer) 输入 ``X`` 和输出 ``Out`` 的函数关系如下:
该层根据 输入(input)、滤波器(filter)和卷积核膨胀(dilations)、步长(stride)、填充(padding)来计算输出。输入(Input)和输出(Output)为NCHW格式,其中 ``N`` 为batch大小, ``C`` 为通道数(channel),``H`` 为特征高度, ``W`` 为特征宽度。参数(膨胀、步长、填充)分别都包含两个元素。这两个元素分别表示高度和宽度。欲了解卷积转置层细节,请参考下面的说明和 参考文献_ 。如果参数 ``bias_attr`` 和 ``act`` 不为 ``None``,则在卷积的输出中加入偏置,并对最终结果应用相应的激活函数。
.. _参考文献: http://www.matthewzeiler.com/wp-content/uploads/2017/07/cvpr2010.pdf
输入 :math:`X` 和输出 :math:`Out` 函数关系如下:
.. math:: .. math::
Out=\sigma (W*X+b)\\ Out=\sigma (W*X+b)\\
其中: 其中:
- :math:`X` : 输入张量,具有 ``NCHW`` 格式 - :math:`X` :输入特征图, ``NCHW`` 格式的 ``Tensor``
- :math:`W` :滤波器,维度为 [M, C, H, W] 的 ``Tensor``
- :math:`W` : 滤波器张量,具有 ``NCHW`` 格式 - :math:`*` :卷积操作
- :math:`b` :偏移值,2-D ``Tensor`` ,维度为 ``[M,1]``
- :math:`*` : 卷积操作 - :math:`\sigma` :激活函数
- :math:`Out` :输出值, ``Out`` 和 ``X`` 的维度可能不同
- :math:`b` : 偏置(bias),二维张量,shape为 ``[M,1]``
- :math:`σ` : 激活函数
- :math:`Out` : 输出值,Out和 ``X`` 的 ``shape`` 可能不一样
**样例**:
输入: **输出维度计算示例**
.. math:: - 输入:
输入张量的shape : (N,C_{in}, H_{in}, W_{in}) 输入维度: :math:`(N,C_{in},H_{in},W_{in})`
滤波器(filter)shape : (C_{in}, C_{out}, H_f, W_f) 滤波器维度: :math:`(C_{out},C_{in},H_{f},W_{f})`
输出: - 输出:
.. math:: 输出维度: :math:`(N,C_{out},H_{out},W_{out})`
输出张量的 shape : (N,C_{out}, H_{out}, W_{out})
其中 - 其中
.. math:: .. math::
& H'_{out} = (H_{in}-1)*strides[0]-2*paddings[0]+dilations[0]*(H_f-1)+1\\ & H'_{out} = (H_{in}-1)*strides[0]-2*paddings[0]+dilations[0]*(H_f-1)+1
& W'_{out} = (W_{in}-1)*strides[1]-2*paddings[1]+dilations[1]*(W_f-1)+1 \\
& H_{out}\in[H'_{out},H'_{out} + strides[0])\\ & W'_{out} = (W_{in}-1)*strides[1]-2*paddings[1]+dilations[1]*(W_f-1)+1
& W_{out}\in[W'_{out},W'_{out} + strides[1])\\
& H_{out}\in[H'_{out},H'_{out} + strides[0])
& W_{out}\in[W'_{out},W'_{out} + strides[1])
参数:
- **name_scope** (str) - 该类的名称 参数:
- **num_filters** (int) - 滤波器(卷积核)的个数,与输出的图片的通道数( channel )相同 - **name_scope** (str) - 类的名称。
- **output_size** (int|tuple|None) - 输出图片的大小。如果output_size是一个元组(tuple),则该元形式为(image_H,image_W),这两个值必须为整型。如果output_size=None,则内部会使用filter_size、padding和stride来计算output_size。如果output_size和filter_size是同时指定的,那么它们应满足上面的公式。默认为None。 - **num_filters** (int) - 滤波器的个数,和输出特征图个数相同。
- **filter_size** (int|tuple|None) - 滤波器大小。如果filter_size是一个tuple,则形式为(filter_size_H, filter_size_W)。否则,滤波器将是一个方阵。如果filter_size=None,则内部会计算输出大小。默认为None。 - **output_size** (int|tuple, 可选) - 输出特征图的大小。如果 ``output_size`` 是一个元组,则必须包含两个整型数,分别表示特征图高度和宽度。如果 ``output_size`` 是整型,表示特征图高度和宽度均为 ``output_size`` 。如果 ``output_size`` 为None,则会根据 ``filter_size`` 、 ``padding`` 和 ``stride`` 来计算 ``output_size`` 。如果 ``output_size`` 和 ``filter_size`` 同时指定,那么它们应满足上面的公式。默认值:None。
- **padding** (int|tuple) - 填充大小。如果padding是一个元组,它必须包含两个整数(padding_H、padding_W)。否则,padding_H = padding_W = padding。默认:padding = 0。 - **filter_size** (int|tuple, 可选) - 滤波器大小。如果 ``filter_size`` 是一个元组,则必须包含两个整型数,分别表示滤波器高度和宽度。否则,表示滤波器高度和宽度均为 ``filter_size`` 。如果 ``filter_size`` 为None,则会根据 ``output_size`` 、 ``padding`` 和 ``stride`` 来计算 ``filter_size`` 。默认值:None。
- **stride** (int|tuple) - 步长大小。如果stride是一个元组,那么元组的形式为(stride_H、stride_W)。否则,stride_H = stride_W = stride。默认:stride = 1。 - **padding** (int|tuple, 可选) - 填充大小。如果 ``padding`` 为元组,则必须包含两个整型数,分别表示竖直和水平边界填充大小。否则,表示竖直和水平边界填充大小均为 ``padding`` 。默认值:0。
- **dilation** (int|元组) - 膨胀(dilation)大小。如果dilation是一个元组,那么元组的形式为(dilation_H, dilation_W)。否则,dilation_H = dilation_W = dilation_W。默认:dilation= 1。 - **stride** (int|tuple, 可选) - 步长大小。如果 ``stride`` 为元组,则必须包含两个整型数,分别表示垂直和水平滑动步长。否则,表示垂直和水平滑动步长均为 ``stride`` 。默认值:1。
- **groups** (int) - Conv2d转置层的groups个数。从Alex Krizhevsky的CNN Deep论文中的群卷积中受到启发,当group=2时,前半部分滤波器只连接到输入通道的前半部分,而后半部分滤波器只连接到输入通道的后半部分。默认值:group = 1。 - **dilation** (int|tuple, 可选) - 膨胀系数大小。如果 ``dialation`` 为元组,则必须包含两个整型数,分别表示垂直和水平膨胀系数。否则,表示垂直和水平膨胀系数均为 ``dialation`` 。默认值:1。
- **param_attr** (ParamAttr|None) - conv2d_transfer中可学习参数/权重的属性。如果param_attr值为None或ParamAttr的一个属性,conv2d_transfer使用ParamAttrs作为param_attr的值。如果没有设置的param_attr初始化器,那么使用Xavier初始化。默认值:None。 - **groups** (int, 可选) - 二维卷积层的组数。根据Alex Krizhevsky的深度卷积神经网络(CNN)论文中的分组卷积:当group=2,滤波器的前一半仅和输入特征图的前一半连接。滤波器的后一半仅和输入特征图的后一半连接。默认值:1。
- **bias_attr** (ParamAttr|bool|None) - conv2d_tran_bias中的bias属性。如果设置为False,则不会向输出单元添加偏置。如果param_attr值为None或ParamAttr的一个属性,将conv2d_transfer使用ParamAttrs作为,bias_attr。如果没有设置bias_attr的初始化器,bias将初始化为零。默认值:None。 - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **use_cudnn** (bool) - 是否使用cudnn内核,只有已安装cudnn库时才有效。默认值:True。 - **bias_attr** (ParamAttr|bool, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **act** (str) - 激活函数类型,如果设置为None,则不使用激活函数。默认值:None。 - **use_cudnn** (bool, 可选) - 是否使用cudnn内核,只有已安装cudnn库时才有效。默认值:True。
- **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值:None。
返回: 存储卷积转置结果的张量。 返回:无
返回类型: 变量(variable)
抛出异常:
- ``ValueError`` : 如果输入的shape、filter_size、stride、padding和groups不匹配,抛出ValueError
**代码示例** **代码示例**
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle.fluid as fluid
import numpy import numpy as np
with fluid.dygraph.guard(): with fluid.dygraph.guard():
data = numpy.random.random((3, 32, 32)).astype('float32') data = np.random.random((3, 32, 32, 5)).astype('float32')
conv2DTranspose = fluid.dygraph.nn.Conv2DTranspose( conv2DTranspose = fluid.dygraph.nn.Conv2DTranspose(
'Conv2DTranspose', num_filters=2, filter_size=3) 'Conv2DTranspose', num_filters=2, filter_size=3)
ret = conv2DTranspose(fluid.dygraph.base.to_variable(data)) ret = conv2DTranspose(fluid.dygraph.base.to_variable(data))
属性
::::::::::::
.. py:attribute:: weight
本层的可学习参数,类型为 ``Parameter``
.. py:attribute:: bias
本层的可学习偏置,类型为 ``Parameter``
...@@ -5,35 +5,35 @@ Conv2D ...@@ -5,35 +5,35 @@ Conv2D
.. py:class:: paddle.fluid.dygraph.Conv2D(name_scope, num_filters, filter_size, stride=1, padding=0, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, dtype='float32') .. py:class:: paddle.fluid.dygraph.Conv2D(name_scope, num_filters, filter_size, stride=1, padding=0, dilation=1, groups=None, param_attr=None, bias_attr=None, use_cudnn=True, act=None, dtype='float32')
卷积二维层(convolution2D layer)根据输入、滤波器(filter)、步长(stride)、填充(padding)、dilations、一组参数计算输出。输入和输出是NCHW格式,N是批尺寸,C是通道数,H是特征高度,W是特征宽度。滤波器是MCHW格式,M是输出图像通道数,C是输入图像通道数,H是滤波器高度,W是滤波器宽度。如果组数大于1,C等于输入图像通道数除以组数的结果。详情请参考UFLDL's : `卷积 <http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/>`_ 。如果提供了bias属性和激活函数类型,bias会添加到卷积(convolution)的结果中相应的激活函数会作用在最终结果上 该接口用于构建 ``Conv2D`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其将在神经网络中构建一个二维卷积层(Convolution2D Layer),其根据输入、滤波器参数(num_filters、filter_size)、步长(stride)、填充(padding)、膨胀系数(dilation)、组数(groups)参数来计算得到输出特征图。输入和输出是 ``NCHW`` 格式,N是批数据大小,C是特征图个数,H是特征图高度,W是特征图宽度。滤波器的维度是 [M, C, H, W] ,M是输出特征图个数,C是输入特征图个数,H是滤波器高度,W是滤波器宽度。如果组数大于1,C等于输入特征图个数除以组数的结果。如果提供了偏移属性和激活函数类型,卷积的结果会和偏移相加,激活函数会作用在最终结果上。详情请参考: `卷积 <http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/>`_
对每个输入X,有等式: 对每个输入 ``X`` ,有等式:
.. math:: .. math::
Out = \sigma \left ( W * X + b \right ) Out = \sigma \left ( W * X + b \right )
其中: 其中:
- :math:`X` :输入值,NCHW格式的张量(Tensor) - :math:`X` :输入特征图, ``NCHW`` 格式的 ``Tensor``
- :math:`W` :滤波器值,MCHW格式的张量(Tensor) - :math:`W` :滤波器,维度为 [M, C, H, W] 的 ``Tensor``
- :math:`*` : 卷积操作 - :math:`*` :卷积操作
- :math:`b` :Bias值,二维张量(Tensor),shape为 ``[M,1]`` - :math:`b` :偏移值,2-D ``Tensor`` ,维度为 ``[M,1]``
- :math:`\sigma` :激活函数 - :math:`\sigma` :激活函数
- :math:`Out` :输出值,``Out`` 和 ``X`` 的shape可能不同 - :math:`Out` :输出值, ``Out`` 和 ``X`` 的维度可能不同
**示例** **输出维度计算示例**
- 输入: - 输入:
输入shape::math:`( N,C_{in},H_{in},W_{in} )` 输入维度: :math:`(N,C_{in},H_{in},W_{in})`
滤波器shape: :math:`( C_{out},C_{in},H_{f},W_{f} )` 滤波器维度: :math:`(C_{out},C_{in},H_{f},W_{f})`
- 输出: - 输出:
输出shape: :math:`( N,C_{out},H_{out},W_{out} )` 输出维度: :math:`(N,C_{out},H_{out},W_{out})`
其中 - 其中
.. math:: .. math::
...@@ -42,22 +42,23 @@ Conv2D ...@@ -42,22 +42,23 @@ Conv2D
W_{out} = \frac{\left ( W_{in}+2*paddings[1]-\left ( dilations[1]*\left ( W_{f}-1 \right )+1 \right ) \right )}{strides[1]}+1 W_{out} = \frac{\left ( W_{in}+2*paddings[1]-\left ( dilations[1]*\left ( W_{f}-1 \right )+1 \right ) \right )}{strides[1]}+1
参数: 参数:
- **name_scope** (str) - 该类的名称 - **name_scope** (str) - 类的名称。
- **num_fliters** (int) - 滤波器数。和输出图像通道相同 - **num_fliters** (int) - 滤波器的个数,和输出特征图个数相同。
- **filter_size** (int|tuple|None) - 滤波器大小。如果filter_size是一个元组,则必须包含两个整型数,(filter_size,filter_size_W)。否则,滤波器为square - **filter_size** (int|tuple) - 滤波器大小。如果 ``filter_size`` 是一个元组,则必须包含两个整型数,分别表示滤波器高度和宽度。否则,表示滤波器高度和宽度均为 ``filter_size`` 。
- **stride** (int|tuple) - 步长(stride)大小。如果步长(stride)为元组,则必须包含两个整型数,(stride_H,stride_W)。否则,stride_H = stride_W = stride。默认:stride = 1 - **stride** (int|tuple, 可选) - 步长大小。如果 ``stride`` 为元组,则必须包含两个整型数,分别表示垂直和水平滑动步长。否则,表示垂直和水平滑动步长均为 ``stride`` 。默认值:1。
- **padding** (int|tuple) - 填充(padding)大小。如果填充(padding)为元组,则必须包含两个整型数,(padding_H,padding_W)。否则,padding_H = padding_W = padding。默认:padding = 0 - **padding** (int|tuple, 可选) - 填充大小。如果 ``padding`` 为元组,则必须包含两个整型数,分别表示竖直和水平边界填充大小。否则,表示竖直和水平边界填充大小均为 ``padding`` 。默认值:0。
- **dilation** (int|tuple) - 膨胀(dilation)大小。如果膨胀(dialation)为元组,则必须包含两个整型数,(dilation_H,dilation_W)。否则,dilation_H = dilation_W = dilation。默认:dilation = 1 - **dilation** (int|tuple, 可选) - 膨胀系数大小。如果 ``dialation`` 为元组,则必须包含两个整型数,分别表示垂直和水平膨胀系数。否则,表示垂直和水平膨胀系数均为 ``dialation`` 。默认值:1。
- **groups** (int) - 卷积二维层(Conv2D Layer)的组数。根据Alex Krizhevsky的深度卷积神经网络(CNN)论文中的成组卷积:当group=2,滤波器的前一半仅和输入通道的前一半连接。滤波器的后一半仅和输入通道的后一半连接。默认:groups = 1 - **groups** (int, 可选) - 二维卷积层的组数。根据Alex Krizhevsky的深度卷积神经网络(CNN)论文中的分组卷积:当group=2,滤波器的前一半仅和输入特征图的前一半连接。滤波器的后一半仅和输入特征图的后一半连接。默认值:1。
- **param_attr** (ParamAttr|None) - conv2d的可学习参数/权重的参数属性。如果设为None或者ParamAttr的一个属性,conv2d创建ParamAttr为param_attr。如果param_attr的初始化函数未设置,参数则初始化为 :math:`Normal(0.0,std)` ,并且std为 :math:`\frac{2.0}{filter\_elem\_num}^{0.5}` 。默认为None - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **bias_attr** (ParamAttr|bool|None) - conv2d bias的参数属性。如果设为False,则没有bias加到输出。如果设为None或者ParamAttr的一个属性,conv2d创建ParamAttr为bias_attr。如果bias_attr的初始化函数未设置,bias初始化为0.默认为None - **bias_attr** (ParamAttr|bool, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **use_cudnn** (bool) - 是否用cudnn核,仅当下载cudnn库才有效。默认:True - **use_cudnn** (bool, 可选) - 是否用cudnn核,只有已安装cudnn库时才有效。默认值:True。
- **act** (str) - 激活函数类型,如果设为None,则未添加激活函数。默认:None - **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值:None。
- **dtype** (str, 可选) - 数据类型,可以为"float32"或"float64"。默认值:"float32"。
抛出异常: 返回:无
- ``ValueError`` - 如果输入shape和filter_size,stride,padding和groups不匹配。
抛出异常:
- ``ValueError`` - 如果 ``use_cudnn`` 不是bool值
**代码示例** **代码示例**
...@@ -68,16 +69,19 @@ Conv2D ...@@ -68,16 +69,19 @@ Conv2D
from paddle.fluid.dygraph import Conv2D from paddle.fluid.dygraph import Conv2D
import numpy as np import numpy as np
data = np.random.uniform( -1, 1, [10, 3, 32, 32] ).astype('float32') data = np.random.uniform(-1, 1, [10, 3, 32, 32]).astype('float32')
with fluid.dygraph.guard(): with fluid.dygraph.guard():
conv2d = Conv2D( "conv2d", 2, 3) conv2d = Conv2D("conv2d", 2, 3)
data = to_variable( data ) data = to_variable(data)
conv = conv2d( data ) conv = conv2d(data)
属性
::::::::::::
.. py:attribute:: weight
本层的可学习参数,类型为 ``Parameter``
.. py:attribute:: bias
本层的可学习偏置,类型为 ``Parameter``
...@@ -6,13 +6,11 @@ FC ...@@ -6,13 +6,11 @@ FC
.. py:class:: paddle.fluid.dygraph.FC(name_scope, size, num_flatten_dims=1, param_attr=None, bias_attr=None, act=None, is_test=False, dtype='float32') .. py:class:: paddle.fluid.dygraph.FC(name_scope, size, num_flatten_dims=1, param_attr=None, bias_attr=None, act=None, is_test=False, dtype='float32')
**全连接层** **全连接层**
函数在神经网络中建立一个全连接层。 它可以将一个或多个tensor( ``input`` 可以是一个list或者Variable,详见参数说明)作为自己的输入,并为每个输入的tensor创立一个变量,称为“权”(weights),等价于一个从每个输入单元到每个输出单元的全连接权矩阵。FC层用每个tensor和它对应的权相乘得到形状为[M, size]输出tensor,M是批大小。如果有多个输入tensor,那么形状为[M, size]的多个输出张量的结果将会被加起来。如果 ``bias_attr`` 非空,则会新创建一个偏向变量(bias variable),并把它加入到输出结果的运算中。最后,如果 ``act`` 非空,它也会加入最终输出的计算中 接口用于构建 ``FC`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其将在神经网络中构建一个全连接层。其输入可以是一个 ``Tensor`` 或多个 ``Tensor`` 组成的list(详见参数说明),该接口会为每个输入的Tensor创建一个权重(weights)变量,即一个从每个输入单元到每个输出单元的全连接权重矩阵。全连接层将每个输入Tensor和其对应的权重(weights)相乘得到shape为 :math:`[N, size]` 的输出Tensor,其中N为batch_size大小。如果有多个输入Tensor,则多个shape为 :math:`[N, size]` 的Tensor计算结果会被累加起来,作为最终输出。如果 ``bias_attr`` 非空,则会创建一个偏置变量(bias Variable),并把它累加到输出结果中。如果 ``act`` 非空,将会在输出结果上应用相应的激活函数
当输入为单个张量 当输入为单个 ``Tensor``
.. math:: .. math::
...@@ -20,7 +18,7 @@ FC ...@@ -20,7 +18,7 @@ FC
当输入为多个张量 当输入为多个 ``Tensor`` 组成的list时
.. math:: .. math::
...@@ -28,42 +26,56 @@ FC ...@@ -28,42 +26,56 @@ FC
上述等式中: 上述等式中:
- :math:`N` :输入的数目,如果输入是变量列表,N等于len(input) - :math:`N` :输入的数目,如果输入是Tensor列表,N等于len(input)
- :math:`X_i` :第i个输入的tensor - :math:`X_i` :第i个输入的Tensor
- :math:`W_i` :对应第i个输入张量的第i个权重矩阵 - :math:`W_i` :对应第i个输入张量的第i个权重矩阵
- :math:`b` :该层创的bias参数 - :math:`b` :该层创的bias参数
- :math:`Act` :activation function(激励函数) - :math:`Act` :激活函数
- :math:`Out` :输出tensor - :math:`Out` :输出Tensor
:: ::
Case 1:
给定单个输入Tensor data_1, 且num_flatten_dims = 2:
data_1.data = [[[0.1, 0.2],
[0.3, 0.4]]]
data_1.shape = (1, 2, 2) # 1是batch_size
fc = FC("fc", 1, num_flatten_dims=2)
out = fc(data_1)
则输出为:
out.data = [[0.83234344], [0.34936576]]
out.shape = (1, 2, 1)
Given:
Case 2:
给定多个Tensor组成的list:
data_1.data = [[[0.1, 0.2], data_1.data = [[[0.1, 0.2],
[0.3, 0.4]]] [0.3, 0.4]]]
data_1.shape = (1, 2, 2) # 1 is batch_size data_1.shape = (1, 2, 2) # 1 batch_size
data_2 = [[[0.1, 0.2, 0.3]]] data_2 = [[[0.1, 0.2, 0.3]]]
data_2.shape = (1, 1, 3) data_2.shape = (1, 1, 3)
out = fluid.layers.fc(input=[data_1, data_2], size=2) fc = FC("fc", 2)
out = fc([data_1, data_2])
Then: 则输出为:
out.data = [[0.18669507, 0.1893476]] out.data = [[0.18669507, 0.1893476]]
out.shape = (1, 2) out.shape = (1, 2)
参数: 参数:
- **name_scope** (str) – 该类的名称 - **name_scope** (str) – 类的名称。
- **size** (int) – 该层输出单元的数目 - **size** (int) – 全连接层输出单元的数目,即输出 ``Tensor`` 的特征维度。
- **num_flatten_dims** (int) – fc层可以接受一个维度大于2的tensor。此时, 它首先会被扁平化(flattened)为一个二维矩阵。 参数 ``num_flatten_dims`` 决定了输入tensor的flattened方式: 前 ``num_flatten_dims`` (包含边界,从1开始数) 个维度会被扁平化为最终矩阵的第一维 (维度即为矩阵的高), 剩下的 rank(X) - num_flatten_dims 维被扁平化为最终矩阵的第二维 (即矩阵的宽)。 例如, 假设X是一个五维tensor,其形可描述为[2, 3, 4, 5, 6], 且num_flatten_dims = 3。那么扁平化的矩阵形状将会如此: [2 x 3 x 4, 5 x 6] = [24, 30]。默认为1。 - **num_flatten_dims** (int, 可选) – fc层可以接受一个维度大于2的tensor。此时, 它首先会被扁平化(flattened)为一个二维矩阵。 参数 ``num_flatten_dims`` 决定了输入tensor的flattened方式: 前 ``num_flatten_dims`` (包含边界,从1开始数) 个维度会被扁平化为最终矩阵的第一维 (维度即为矩阵的高), 剩下的 rank(X) - num_flatten_dims 维被扁平化为最终矩阵的第二维 (即矩阵的宽)。 例如, 假设X是一个五维tensor,其形可描述为[2, 3, 4, 5, 6], 且num_flatten_dims = 3。那么扁平化的矩阵形状将会如此: [2 x 3 x 4, 5 x 6] = [24, 30]。默认为1。
- **param_attr** (ParamAttr|list of ParamAttr|None) – 该层可学习的参数/权的参数属性 - **param_attr** (ParamAttr|list of ParamAttr, 可选) – 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **bias_attr** (ParamAttr|list of ParamAttr, default None) – 该层bias变量的参数属性。如果值为False, 则bias变量不参与输出单元运算。 如果值为None,bias变量被初始化为0。默认为 None - **bias_attr** (ParamAttr|list of ParamAttr, 可选) – 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr`
- **act** (str|None) – 应用于输出的Activation(激励函数) - **act** (str, 可选) – 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。
- **is_test** (bool) – 表明当前执行是否处于测试阶段的标志。默认为False。 - **is_test** (bool, 可选) – 表明当前执行是否处于测试阶段的标志。默认为False。
- **dtype** (str) – 权重的数据类型 - **dtype** (str, 可选) – 权重的数据类型,可以为float32或float64。默认为float32。
返回:无
弹出异常:``ValueError`` - 如果输入tensor的维度小于2
**代码示例** **代码示例**
...@@ -77,9 +89,16 @@ FC ...@@ -77,9 +89,16 @@ FC
data = np.random.uniform( -1, 1, [30, 10, 32] ).astype('float32') data = np.random.uniform( -1, 1, [30, 10, 32] ).astype('float32')
with fluid.dygraph.guard(): with fluid.dygraph.guard():
fc = FC( "fc", 64, num_flatten_dims=2) fc = FC( "fc", 64, num_flatten_dims=2)
data = to_variable( data ) data = to_variable(data)
conv = fc( data ) conv = fc(data)
属性
::::::::::::
.. py:attribute:: weight
本层的可学习参数,类型为 ``Parameter``
.. py:attribute:: bias
本层的可学习偏置,类型为 ``Parameter``
...@@ -5,27 +5,65 @@ Pool2D ...@@ -5,27 +5,65 @@ Pool2D
.. py:class:: paddle.fluid.dygraph.Pool2D(name_scope, pool_size=-1, pool_type='max', pool_stride=1, pool_padding=0, global_pooling=False, use_cudnn=True, ceil_mode=False, exclusive=True, dtype=VarType.FP32) .. py:class:: paddle.fluid.dygraph.Pool2D(name_scope, pool_size=-1, pool_type='max', pool_stride=1, pool_padding=0, global_pooling=False, use_cudnn=True, ceil_mode=False, exclusive=True, dtype=VarType.FP32)
pooling2d操作符根据 ``input`` , 池化类型 ``pooling_type`` , 池化核大小 ``ksize`` , 步长 ``strides`` ,填充 ``paddings`` 这些参数得到输出。 该接口用于构建 ``Pool2D`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其将在神经网络中构建一个二维池化层,并使用上述输入参数的池化配置,为二维空间池化操作,根据 ``input`` , 池化类型 ``pool_type`` , 池化核大小 ``pool_size`` , 步长 ``pool_stride`` ,填充 ``pool_padding`` 这些参数得到输出。
输入X和输出Out是NCHW格式,N为batch尺寸,C是通道数,H是特征高度,W是特征宽度 输入X和输出Out是NCHW格式,N为批大小,C是通道数,H是特征高度,W是特征宽度。参数( ``ksize``, ``strides``, ``paddings`` )含有两个整型元素。分别表示高度和宽度上的参数。输入X的大小和输出Out的大小可能不一致
参数(ksize,strides,paddings)含有两个元素。这两个元素分别代表高度和宽度。输入X的大小和输出Out的大小可能不一致。 例如:
输入:
X shape::math:`\left ( N,C,H_{in},W_{in} \right )`
参数: 输出:
- **name_scope** (str) - 该类的名称 Out shape::math:`\left ( N,C,H_{out},W_{out} \right )`
- **pool_size** (int|list|tuple) - 池化核的大小。如果它是一个元组或列表,它必须包含两个整数值, (pool_size_Height, pool_size_Width)。其他情况下,若为一个整数,则它的平方值将作为池化核大小,比如若pool_size=2, 则池化核大小为2x2,默认值为-1。
- **pool_type** (str) - 池化类型,可以是“max”对应max-pooling,“avg”对应average-pooling,默认值为max。 如果 ``ceil_mode`` = false:
- **pool_stride** (int|list|tuple) - 池化层的步长。如果它是一个元组或列表,它将包含两个整数,(pool_stride_Height, pool_stride_Width)。否则它是一个整数的平方值。默认值为1。
- **pool_padding** (int|list|tuple) - 填充大小。如果它是一个元组,它必须包含两个整数值,(pool_padding_on_Height, pool_padding_on_Width)。否则它是一个整数的平方值。默认值为0。 .. math::
- **global_pooling** (bool)- 是否用全局池化。如果global_pooling = true, ``ksize`` 和 ``paddings`` 将被忽略。默认值为false H_{out} = \frac{(H_{in} - ksize[0] + 2 * paddings[0])}{strides[0]} + 1
- **use_cudnn** (bool)- 只在cudnn核中用,需要安装cudnn,默认值为True。
- **ceil_mode** (bool)- 是否用ceil函数计算输出高度和宽度。默认False。如果设为False,则使用floor函数。默认值为false。 .. math::
- **exclusive** (bool) - 是否在平均池化模式忽略填充值。默认为True。 W_{out} = \frac{(W_{in} - ksize[1] + 2 * paddings[1])}{strides[1]} + 1
如果 ``ceil_mode`` = true:
.. math::
H_{out} = \frac{(H_{in} - ksize[0] + 2 * paddings[0] + strides[0] - 1)}{strides[0]} + 1
.. math::
W_{out} = \frac{(W_{in} - ksize[1] + 2 * paddings[1] + strides[1] - 1)}{strides[1]} + 1
如果 ``exclusive`` = false:
返回:池化结果 .. math::
hstart &= i * strides[0] - paddings[0] \\
hend &= hstart + ksize[0] \\
wstart &= j * strides[1] - paddings[1] \\
wend &= wstart + ksize[1] \\
Output(i ,j) &= \frac{sum(Input[hstart:hend, wstart:wend])}{ksize[0] * ksize[1]}
返回类型:变量(Variable) 如果 ``exclusive`` = true:
.. math::
hstart &= max(0, i * strides[0] - paddings[0])\\
hend &= min(H, hstart + ksize[0]) \\
wstart &= max(0, j * strides[1] - paddings[1]) \\
wend & = min(W, wstart + ksize[1]) \\
Output(i ,j) & = \frac{sum(Input[hstart:hend, wstart:wend])}{(hend - hstart) * (wend - wstart)}
参数:
- **name_scope** (str) - 该类的名称。
- **pool_size** (int|list|tuple, 可选) - 池化核的大小。如果它是一个元组或列表,它必须包含两个整数值, (pool_size_Height, pool_size_Width)。若为一个整数,则它的平方值将作为池化核大小,比如若pool_size=2, 则池化核大小为2x2。默认值:-1。
- **pool_type** (str, 可选) - 池化类型,可以是”max“对应max-pooling,“avg”对应average-pooling。默认为”max“。
- **pool_stride** (int|list|tuple, 可选) - 池化层的步长。如果它是一个元组或列表,它将包含两个整数,(pool_stride_Height, pool_stride_Width)。若为一个整数,则表示H和W维度上stride均为该值。默认值为1。
- **pool_padding** (int|list|tuple, 可选) - 填充大小。如果它是一个元组或列表,它必须包含两个整数值,(pool_padding_on_Height, pool_padding_on_Width)。若为一个整数,则表示H和W维度上padding均为该值。默认值为1。
- **global_pooling** (bool, 可选)- 是否用全局池化。如果global_pooling = True, ``pool_size`` 和 ``pool_padding`` 将被忽略,默认False。
- **use_cudnn** (bool, 可选)- 是否用cudnn核,只有已安装cudnn库时才有效。默认True。
- **ceil_mode** (bool, 可选)- 是否用ceil函数计算输出高度和宽度。如果设为False,则使用floor函数。默认为False。
- **exclusive** (bool, 可选) - 是否在平均池化模式忽略填充值。默认为True。
- **dtype** (core.VarDesc.VarType, 可选) - 数据类型,可以为float32或float64。默认为float32。
返回:无
抛出异常: 抛出异常:
- ``ValueError`` - 如果 ``pool_type`` 既不是“max”也不是“avg” - ``ValueError`` - 如果 ``pool_type`` 既不是“max”也不是“avg”
...@@ -36,19 +74,16 @@ pooling2d操作符根据 ``input`` , 池化类型 ``pooling_type`` , 池化 ...@@ -36,19 +74,16 @@ pooling2d操作符根据 ``input`` , 池化类型 ``pooling_type`` , 池化
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle.fluid as fluid
import numpy from paddle.fluid.dygraph.base import to_variable
import numpy as np
with fluid.dygraph.guard():
data = numpy.random.random((3, 32, 32)).astype('float32') with fluid.dygraph.guard():
data = np.random.random((3, 32, 32, 5)).astype('float32')
pool2d = fluid.dygraph.Pool2D("pool2d",pool_size=2, pool2d = fluid.dygraph.Pool2D("pool2d",pool_size=2,
pool_type='max', pool_type='max',
pool_stride=1, pool_stride=1,
global_pooling=False) global_pooling=False)
pool2d_res = pool2d(data) pool2d_res = pool2d(to_variable(data))
...@@ -5,25 +5,20 @@ TreeConv ...@@ -5,25 +5,20 @@ TreeConv
.. py:class:: paddle.fluid.dygraph.TreeConv(name_scope, output_size, num_filters=1, max_depth=2, act='tanh', param_attr=None, bias_attr=None, name=None) .. py:class:: paddle.fluid.dygraph.TreeConv(name_scope, output_size, num_filters=1, max_depth=2, act='tanh', param_attr=None, bias_attr=None, name=None)
基于树结构的卷积Tree-Based Convolution运算。 该接口用于构建 ``TreeConv`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其将在神经网络中构建一个基于树结构的卷积(Tree-Based Convolution)运算。基于树的卷积是基于树的卷积神经网络(TBCNN,Tree-Based Convolution Neural Network)的一部分,它用于对树结构进行分类,例如抽象语法树。 Tree-Based Convolution提出了一种称为连续二叉树的数据结构,它将多路(multiway)树视为二叉树。详情请参考: `基于树的卷积论文 <https://arxiv.org/abs/1409.5718v1>`_ 。
基于树的卷积是基于树的卷积神经网络(TBCNN,Tree-Based Convolution Neural Network)的一部分,它用于对树结构进行分类,例如抽象语法树。 Tree-Based Convolution提出了一种称为连续二叉树的数据结构,它将多路(multiway)树视为二叉树。提出 `基于树的卷积论文 <https://arxiv.org/abs/1409.5718v1>`_
参数: 参数:
- **name_scope** (str) – 该类的名称 - **name_scope** (str) – 类的名称。
- **output_size** (int) – 输出特征宽度 - **output_size** (int) – 输出特征宽度。
- **num_filters** (int) – filter数量,默认值1 - **num_filters** (int, 可选) – 滤波器的数量,默认值为1。
- **max_depth** (int) – filter的最大深度,默认值2 - **max_depth** (int, 可选) – 滤波器的最大深度,默认值为2。
- **act** (str) – 激活函数,默认 tanh - **act** (str, 可选) – 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。
- **param_attr** (ParamAttr) – filter的参数属性,默认None - **param_attr** (ParamAttr, 可选) – 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **bias_attr** (ParamAttr) – 此层bias的参数属性,默认None - **bias_attr** (ParamAttr, 可选) – 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。
- **name** (str) – 此层的名称(可选)。如果设置为None,则将自动命名层,默认为None - **name** (str, 可选) – 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。
返回: (Tensor)子树的特征向量。输出张量的形状是[max_tree_node_size,output_size,num_filters]。输出张量可以是下一个树卷积层的新特征向量
返回类型:out(Variable) 返回:无
**代码示例**: **代码示例**:
...@@ -39,9 +34,13 @@ TreeConv ...@@ -39,9 +34,13 @@ TreeConv
'TreeConv', output_size=6, num_filters=1, max_depth=2) 'TreeConv', output_size=6, num_filters=1, max_depth=2)
ret = treeConv(fluid.dygraph.base.to_variable(nodes_vector), fluid.dygraph.base.to_variable(edge_set)) ret = treeConv(fluid.dygraph.base.to_variable(nodes_vector), fluid.dygraph.base.to_variable(edge_set))
属性
::::::::::::
.. py:attribute:: weight
本层的可学习参数,类型为 ``Parameter``
.. py:attribute:: bias
本层的可学习偏置,类型为 ``Parameter``
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册