fluid.nets

SourceEnglish

glu

SourceEnglish

  • paddle.fluid.nets.glu(input, dim=-1)
  • The Gated Linear Units(GLU)由切分(split),sigmoid激活函数和按元素相乘组成。沿着给定维将input拆分成两个大小相同的部分,a和b,计算如下:

fluid.nets - 图1

参考论文: Language Modeling with Gated Convolutional Networks

  • 参数:
    • input (Variable) - 输入变量,张量或者LoDTensor
    • dim (int) - 拆分的维度。如果fluid.nets - 图2,拆分的维为fluid.nets - 图3。默认为-1返回:变量 —— 变量的大小为输入的一半

返回类型:变量(Variable)

代码示例:

  1. import paddle.fluid as fluid
  2. data = fluid.layers.data(
  3. name="words", shape=[-1, 6, 3, 9], dtype="float32")
  4. # 输出的形状为[-1, 3, 3, 9]
  5. output = fluid.nets.glu(input=data, dim=1)

img_conv_group

SourceEnglish

  • paddle.fluid.nets.imgconv_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 Layerrop_rate 。如果 conv_batchnorm_drop_rate 是一个列表,则其长度必须等于 conv_num_filter 的长度。否则,所有 Dropout Layersdrop_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)。

代码示例

  1. import paddle.fluid as fluid
  2. img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32')
  3. conv_pool = fluid.nets.img_conv_group(input=img,
  4. conv_padding=1,
  5. conv_num_filter=[3, 3],
  6. conv_filter_size=3,
  7. conv_act="relu",
  8. pool_size=2,
  9. pool_stride=2)

scaled_dot_product_attention

SourceEnglish

  • paddle.fluid.nets.scaleddot_product_attention(_queries, keys, values, num_heads=1, dropout_rate=0.0)
  • 点乘attention运算。

attention运算机制可以被视为将查询和一组键值对映射到输出。 将输出计算为值的加权和,其中分配给每个值的权重由查询的兼容性函数(此处的点积)与对应的密钥计算。

可以通过(batch)矩阵乘法实现点积attention运算,如下所示:

fluid.nets - 图4

请参阅 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会报错。

注解

当num_heads> 1时,分别学习三个线性投影,以将输入查询,键和值映射到查询’,键’和值’。 查询’,键’和值’与查询,键和值具有相同的形状。当num_heads == 1时,scaled_dot_product_attention没有可学习的参数。

代码示例

  1. import paddle.fluid as fluid
  2.  
  3. queries = fluid.layers.data(name="queries",
  4. shape=[3, 5, 9],
  5. dtype="float32",
  6. append_batch_size=False)
  7. queries.stop_gradient = False
  8. keys = fluid.layers.data(name="keys",
  9. shape=[3, 6, 9],
  10. dtype="float32",
  11. append_batch_size=False)
  12. keys.stop_gradient = False
  13. values = fluid.layers.data(name="values",
  14. shape=[3, 6, 10],
  15. dtype="float32",
  16. append_batch_size=False)
  17. values.stop_gradient = False
  18. contexts = fluid.nets.scaled_dot_product_attention(queries, keys, values)
  19. contexts.shape # [3, 5, 10]

sequence_conv_pool

SourceEnglish

  • paddle.fluid.nets.sequenceconv_pool(_input, num_filters, filter_size, param_attr=None, act='sigmoid', pool_type='max', bias_attr=None)
  • 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
    • bias_attr (ParamAttr|bool|None) – sequence_conv偏置的参数属性。如果设置为False,则不会向输出单元添加偏置。如果将参数设置为ParamAttr的None或one属性,sequence_conv将创建ParamAttr作为bias_attr。如果未设置bias_attr的初始化器,则初始化偏差为零。默认值:None。返回:序列卷积(Sequence Convolution)和池化(Pooling)的结果

返回类型:变量(Variable)

代码示例

  1. import paddle.fluid as fluid
  2. input_dim = 100 #len(word_dict)
  3. emb_dim = 128
  4. hid_dim = 512
  5. data = fluid.layers.data( name="words", shape=[1], dtype="int64", lod_level=1)
  6. emb = fluid.layers.embedding(input=data, size=[input_dim, emb_dim], is_sparse=True)
  7. seq_conv = fluid.nets.sequence_conv_pool(input=emb,
  8. num_filters=hid_dim,
  9. filter_size=3,
  10. act="tanh",
  11. pool_type="sqrt")

simple_img_conv_pool

SourceEnglish

  • paddle.fluid.nets.simpleimg_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-poolingmax 和平均池的 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的初始化,则使用fluid.nets - 图5初始化参数,并且 stdfluid.nets - 图6。默认值: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)

示例代码

  1. import paddle.fluid as fluid
  2. img = fluid.layers.data(name='img', shape=[1, 28, 28], dtype='float32')
  3. conv_pool = fluid.nets.simple_img_conv_pool(input=img,
  4. filter_size=5,
  5. num_filters=20,
  6. pool_size=2,
  7. pool_stride=2,
  8. act="relu")