################# fluid.nets ################# .. _cn_api_fluid_nets_glu: glu ------------------------------- .. py:function:: paddle.fluid.nets.glu(input, dim=-1) T he Gated Linear Units(GLU)由切分(split),sigmoid激活函数和按元素相乘组成。沿着给定维将input拆分成两个大小相同的部分,a和b,计算如下: .. math:: GLU(a,b) = a\bigotimes \sigma (b) 参考论文: `Language Modeling with Gated Convolutional Networks `_ 参数: - **input** (Variable) - 输入变量,张量或者LoDTensor - **dim** (int) - 拆分的维度。如果 :math:`dim<0`,拆分的维为 :math:`rank(input)+dim`。默认为-1 返回:变量 —— 变量的大小为输入的一半 返回类型:变量(Variable) **代码示例:** .. code-block:: python data = fluid.layers.data(name="words", shape=[3, 6, 9], dtype="float32") output = fluid.nets.glu(input=data, dim=1) # shape of output: [3, 3, 9] .. _cn_api_fluid_nets_img_conv_group: img_conv_group ------------------------------- .. py:function:: paddle.fluid.nets.img_conv_group(input, conv_num_filter, pool_size, conv_padding=1, conv_filter_size=3, conv_act=None, param_attr=None, conv_with_batchnorm=False, conv_batchnorm_drop_rate=0.0, pool_stride=1, pool_type='max', use_cudnn=True) Image Convolution Group由Convolution2d,BatchNorm,DropOut和Pool2d组成。根据输入参数,img_conv_group将使用Convolution2d,BatchNorm,DropOut对Input进行连续计算,并将最后一个结果传递给Pool2d。 参数: - **input** (Variable) - 具有[N,C,H,W]格式的输入图像。 - **conv_num_filter** (list | tuple) - 表示该组的过滤器数。 - **pool_size** (int | list | tuple) - ``Pool2d Layer`` 池的大小。如果pool_size是列表或元组,则它必须包含两个整数(pool_size_H,pool_size_W)。否则,pool_size_H = pool_size_W = pool_size。 - **conv_padding** (int | list | tuple) - Conv2d Layer的 ``padding`` 大小。如果 ``padding`` 是列表或元组,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有Conv2d图层的 ``conv_padding`` 都是相同的。默认1。 - **conv_filter_size** (int | list | tuple) - 过滤器大小。如果filter_size是列表或元组,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有Conv2d图层的 ``conv_filter_size`` 都是相同的。默认3。 - **conv_act** (str) - ``Conv2d Layer`` 的激活类型, ``BatchNorm`` 后面没有。默认值:无。 - **param_attr** (ParamAttr) - Conv2d层的参数。默认值:无 - **conv_with_batchnorm** (bool | list) - 表示在 ``Conv2d Layer`` 之后是否使用 ``BatchNorm`` 。如果 ``conv_with_batchnorm`` 是一个列表,则其长度必须等于 ``conv_num_filter`` 的长度。否则, ``conv_with_batchnorm`` 指示是否所有Conv2d层都遵循 ``BatchNorm``。默认为False。 - **conv_batchnorm_drop_rate** (float | list) - 表示 ``BatchNorm`` 之后的 ``Dropout Layer`` 的 ``rop_rate`` 。如果 ``conv_batchnorm_drop_rate`` 是一个列表,则其长度必须等于 ``conv_num_filter`` 的长度。否则,所有 ``Dropout Layers`` 的 ``drop_rate`` 都是 ``conv_batchnorm_drop_rate`` 。默认值为0.0。 - **pool_stride** (int | list | tuple) - ``Pool2d`` 层的汇集步幅。如果 ``pool_stride`` 是列表或元组,则它必须包含两个整数(pooling_stride_H,pooling_stride_W)。否则,pooling_stride_H = pooling_stride_W = pool_stride。默认1。 - **pool_type** (str) - 池化类型可以是最大池化的 ``max`` 和平均池化的 ``avg`` 。默认max。 - **use_cudnn** (bool) - 是否使用cudnn内核,仅在安装cudnn库时才有效。默认值:True 返回: 使用Convolution2d进行串行计算后的最终结果,BatchNorm,DropOut和Pool2d。 返回类型: 变量(Variable)。 **代码示例** .. code-block:: python img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32') conv_pool = fluid.nets.img_conv_group(input=img, num_channels=3, conv_padding=1, conv_num_filter=[3, 3], conv_filter_size=3, conv_act="relu", pool_size=2, pool_stride=2) .. _cn_api_fluid_nets_scaled_dot_product_attention: scaled_dot_product_attention ------------------------------- .. py:function:: paddle.fluid.nets.scaled_dot_product_attention(queries, keys, values, num_heads=1, dropout_rate=0.0) 点乘attention运算。 attention运算机制可以被视为将查询和一组键值对映射到输出。 将输出计算为值的加权和,其中分配给每个值的权重由查询的兼容性函数(此处的点积)与对应的密钥计算。 可以通过(batch)矩阵乘法实现点积attention运算,如下所示: .. math:: Attention(Q, K, V)= softmax(QK^\mathrm{T})V 请参阅 `Attention Is All You Need `_ 参数: - **queries** (Variable) - 输入变量,应为3-D Tensor。 - **keys** (Variable) - 输入变量,应为3-D Tensor。 - **values** (Variable) - 输入变量,应为3-D Tensor。 - **num_heads** (int) - 计算缩放点积attention运算的head数。默认值:1。 - **dropout_rate** (float) - 降低attention的dropout率。默认值:0.0。 返回: 通过multi-head来缩放点积attention运算的三维张量。 返回类型: 变量(Variable)。 抛出异常: - ``ValueError`` - 如果输入查询键,值不是3-D Tensor会报错。 .. note:: 当num_heads> 1时,分别学习三个线性投影,以将输入查询,键和值映射到查询',键'和值'。 查询',键'和值'与查询,键和值具有相同的形状。 当num_heads == 1时,scaled_dot_product_attention没有可学习的参数。 **代码示例** .. code-block:: python queries = fluid.layers.data(name="queries", shape=[3, 5, 9], dtype="float32", append_batch_size=False) queries.stop_gradient = False keys = fluid.layers.data(name="keys", shape=[3, 6, 9], dtype="float32", append_batch_size=False) keys.stop_gradient = False values = fluid.layers.data(name="values", shape=[3, 6, 10], dtype="float32", append_batch_size=False) values.stop_gradient = False contexts = fluid.nets.scaled_dot_product_attention(queries, keys, values) contexts.shape # [3, 5, 10] .. _cn_api_fluid_nets_sequence_conv_pool: sequence_conv_pool ------------------------------- .. py:function:: paddle.fluid.nets.sequence_conv_pool(input, num_filters, filter_size, param_attr=None, act='sigmoid', pool_type='max') sequence_conv_pool由序列卷积和池化组成 参数: - **input** (Variable) - sequence_conv的输入,支持变量时间长度输入序列。当前输入为shape为(T,N)的矩阵,T是mini-batch中的总时间步数,N是input_hidden_size - **num_filters** (int)- 滤波器数 - **filter_size** (int)- 滤波器大小 - **param_attr** (ParamAttr) - Sequence_conv层的参数。默认:None - **act** (str) - Sequence_conv层的激活函数类型。默认:sigmoid - **pool_type** (str)- 池化类型。可以是max-pooling的max,average-pooling的average,sum-pooling的sum,sqrt-pooling的sqrt。默认max 返回:序列卷积(Sequence Convolution)和池化(Pooling)的结果 返回类型:变量(Variable) **代码示例**: .. code-block:: python input_dim = len(word_dict) emb_dim = 128 hid_dim = 512 data = fluid.layers.data( ame="words", shape=[1], dtype="int64", lod_level=1) emb = fluid.layers.embedding(input=data, size=[input_dim, emb_dim], is_sparse=True) seq_conv = fluid.nets.sequence_conv_pool(input=emb, num_filters=hid_dim, filter_size=3, act="tanh", pool_type="sqrt") .. _cn_api_fluid_nets_simple_img_conv_pool: simple_img_conv_pool ------------------------------- .. py:function:: paddle.fluid.nets.simple_img_conv_pool(input, num_filters, filter_size, pool_size, pool_stride, pool_padding=0, pool_type='max', global_pooling=False, conv_stride=1, conv_padding=0, conv_dilation=1, conv_groups=1, param_attr=None, bias_attr=None, act=None, use_cudnn=True) ``simple_img_conv_pool`` 由一个Convolution2d和一个Pool2d组成。 参数: - **input** (Variable) - 输入图像的格式为[N,C,H,W]。 - **num_filters** (int) - ``filter`` 的数量。它与输出的通道相同。 - **filter_size** (int | list | tuple) - 过滤器大小。如果 ``filter_size`` 是列表或元组,则它必须包含两个整数(filter_size_H,filter_size_W)。否则,filter_size_H = filter_size_W = filter_size。 - **pool_size** (int | list | tuple) - Pool2d池化层大小。如果pool_size是列表或元组,则它必须包含两个整数(pool_size_H,pool_size_W)。否则,pool_size_H = pool_size_W = pool_size。 - **pool_stride** (int | list | tuple) - Pool2d池化层步长。如果pool_stride是列表或元组,则它必须包含两个整数(pooling_stride_H,pooling_stride_W)。否则,pooling_stride_H = pooling_stride_W = pool_stride。 - **pool_padding** (int | list | tuple) - Pool2d池化层的padding。如果pool_padding是列表或元组,则它必须包含两个整数(pool_padding_H,pool_padding_W)。否则,pool_padding_H = pool_padding_W = pool_padding。默认值为0。 - **pool_type** (str) - 池化类型可以是 ``max-pooling`` 的 ``max`` 和平均池的 ``avg`` 。默认 ``max`` 。 - **global_pooling** (bool)- 是否使用全局池。如果global_pooling = true,则忽略pool_size和pool_padding。默认为False - **conv_stride** (int | list | tuple) - conv2d Layer的步长。如果stride是列表或元组,则它必须包含两个整数,(conv_stride_H,conv_stride_W)。否则,conv_stride_H = conv_stride_W = conv_stride。默认值:conv_stride = 1。 - **conv_padding** (int | list | tuple) - conv2d Layer的padding大小。如果padding是列表或元组,则它必须包含两个整数(conv_padding_H,conv_padding_W)。否则,conv_padding_H = conv_padding_W = conv_padding。默认值:conv_padding = 0。 - **conv_dilation** (int | list | tuple) - conv2d Layer的dilation大小。如果dilation是列表或元组,则它必须包含两个整数(conv_dilation_H,conv_dilation_W)。否则,conv_dilation_H = conv_dilation_W = conv_dilation。默认值:conv_dilation = 1。 - **conv_groups** (int) - conv2d Layer的组数。根据Alex Krizhevsky的Deep CNN论文中的分组卷积:当group = 2时,前半部分滤波器仅连接到输入通道的前半部分,而后半部分滤波器仅连接到后半部分输入通道。默认值:groups = 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 - **bias_attr** (ParamAttr | bool | None) - conv2d的bias参数属性。如果设置为False,则不会向输出单元添加bias。如果将其设置为None或ParamAttr的一个属性,则conv2d将创建ParamAttr作为bias_attr。如果未设置bias_attr的初始化程序,则将偏差初始化为零。默认值:None - **act** (str) - conv2d的激活类型,如果设置为None,则不附加激活。默认值:无。 - **use_cudnn** (bool) - 是否使用cudnn内核,仅在安装cudnn库时才有效。默认值:True。 返回: Convolution2d和Pool2d之后输入的结果。 返回类型: 变量(Variable) **示例代码** .. code-block:: python img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32') conv_pool = fluid.nets.simple_img_conv_pool(input=img, filter_size=5, num_filters=20, pool_size=2, pool_stride=2, act="relu")