From aeb3d8a273aa40d92741eeaf6edeb263fa50f27b Mon Sep 17 00:00:00 2001 From: zhongpu <2013000149@qq.com> Date: Sat, 28 Sep 2019 11:21:39 +0800 Subject: [PATCH] update norm op for dygraph, test=develop (#1291) * update layer_norm_cn.rst, test=develop * update code for layer_norm_cn.rst, test=develop * update LayerNorm_cn.rst layer_norm_cn.rst, test=develop * update BatchNorm_cn.rst, GroupNorm_cn.rst, SpectralNorm_cn.rst, test=develop * fix bug for GroupNorm, test=develop * fix norm op, test=develop * add comment, test=develop * add comment for dygraph layer, test=develop * add comment for dygraph layer, test=develop * add comment for dygraph layer, test=develop * add comment for name, test=develop --- doc/fluid/api_cn/dygraph_cn/BatchNorm_cn.rst | 80 ++++++++++--------- doc/fluid/api_cn/dygraph_cn/GroupNorm_cn.rst | 30 +++---- doc/fluid/api_cn/dygraph_cn/LayerNorm_cn.rst | 58 +++++++------- .../api_cn/dygraph_cn/SpectralNorm_cn.rst | 34 +++----- doc/fluid/api_cn/layers_cn/layer_norm_cn.rst | 72 ++++++++--------- 5 files changed, 128 insertions(+), 146 deletions(-) diff --git a/doc/fluid/api_cn/dygraph_cn/BatchNorm_cn.rst b/doc/fluid/api_cn/dygraph_cn/BatchNorm_cn.rst index 0549db7f0..4ed661c18 100644 --- a/doc/fluid/api_cn/dygraph_cn/BatchNorm_cn.rst +++ b/doc/fluid/api_cn/dygraph_cn/BatchNorm_cn.rst @@ -5,66 +5,68 @@ BatchNorm .. py:class:: paddle.fluid.dygraph.BatchNorm(name_scope, num_channels, act=None, is_test=False, momentum=0.9, epsilon=1e-05, param_attr=None, bias_attr=None, dtype='float32', data_layout='NCHW', in_place=False, moving_mean_name=None, moving_variance_name=None, do_model_average_for_mean_and_var=False, fuse_with_relu=False, use_global_stats=False, trainable_statistics=False) +该接口用于构建 ``BatchNorm`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其中实现了批归一化层(Batch Normalization Layer)的功能,可用作卷积和全连接操作的批归一化函数,根据当前批次数据按通道计算的均值和方差进行归一化。更多详情请参考 : `Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift `_ -批正则化层(Batch Normalization Layer) - -可用作conv2d和全连接操作的正则化函数。该层需要的数据格式如下: - -1.NHWC[batch,in_height,in_width,in_channels] -2.NCHW[batch,in_channels,in_height,in_width] - -更多详情请参考 : `Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift `_ - -``input`` 是mini-batch的输入特征。 +当use_global_stats = False时,:math:`\mu_{\beta}` 和 :math:`\sigma_{\beta}^{2}` 是minibatch的统计数据。计算公式如下: .. math:: \mu_{\beta} &\gets \frac{1}{m} \sum_{i=1}^{m} x_i \quad &// mini-batch-mean \\ \sigma_{\beta}^{2} &\gets \frac{1}{m} \sum_{i=1}^{m}(x_i - \mu_{\beta})^2 \quad &// mini-batch-variance \\ - \hat{x_i} &\gets \frac{x_i - \mu_\beta} {\sqrt{\sigma_{\beta}^{2} + \epsilon}} \quad &// normalize \\ - y_i &\gets \gamma \hat{x_i} + \beta \quad &// scale-and-shift -当use_global_stats = True时, :math:`\mu_{\beta}` 和 :math:`\sigma_{\beta}^{2}` 不是一个minibatch的统计数据。 它们是全局(或运行)统计数据。 (它通常来自预训练模型)。训练和测试(或预测)具有相同的行为: +- :math:`x` : 批输入数据 +- :math:`m` : 当前批次数据的大小 + +当use_global_stats = True时,:math:`\mu_{\beta}` 和 :math:`\sigma_{\beta}^{2}` 是全局(或运行)统计数据(moving_mean和moving_variance),通常来自预先训练好的模型。计算公式如下: .. math:: - \hat{x_i} &\gets \frac{x_i - \mu_\beta} {\sqrt{\ - \sigma_{\beta}^{2} + \epsilon}} \\ - y_i &\gets \gamma \hat{x_i} + \beta + moving\_mean = moving\_mean * momentum + \mu_{\beta} * (1. - momentum) \quad &// global mean \\ + moving\_variance = moving\_variance * momentum + \sigma_{\beta}^{2} * (1. - momentum) \quad &// global variance \\ +归一化函数公式如下: +.. math:: + + \hat{x_i} &\gets \frac{x_i - \mu_\beta} {\sqrt{\sigma_{\beta}^{2} + \epsilon}} \quad &// normalize \\ + y_i &\gets \gamma \hat{x_i} + \beta \quad &// scale-and-shift \\ + +- :math:`\epsilon` : 添加较小的值到方差中以防止除零 +- :math:`\gamma` : 可训练的比例参数 +- :math:`\beta` : 可训练的偏差参数 参数: - - **name_scope** (str) - 该类的名称 - - **act** (str|None)- 激活函数类型,linear|relu|prelu|... - - **is_test** (bool) - 指示它是否在测试阶段。默认False。 - - **momentum** (float)- 此值用于计算 moving_mean and moving_var. 更新公式为: :math:`moving\_mean = moving\_mean * momentum + new\_mean * (1. - momentum` :math:`moving\_var = moving\_var * momentum + new\_var * (1. - momentum` , 默认值0.9. - - **epsilon** (float)- 加在分母上为了数值稳定的值。默认值为1e-5。 - - **param_attr** (ParamAttr|None) - batch_norm参数范围的属性,如果设为None或者是ParamAttr的一个属性,batch_norm创建ParamAttr为param_attr。如果没有设置param_attr的初始化函数,参数初始化为Xavier。默认:None - - **bias_attr** (ParamAttr|None) - batch_norm bias参数的属性,如果设为None或者是ParamAttr的一个属性,batch_norm创建ParamAttr为bias_attr。如果没有设置bias_attr的初始化函数,参数初始化为0。默认:None - - **data_layout** (string) - NCHW|NHWC。默认NCHW - - **in_place** (bool)- 得出batch norm可复用记忆的输入和输出,默认False。 - - **moving_mean_name** (string|None)- moving_mean的名称,存储全局Mean均值。默认为None。 - - **moving_variance_name** (string,默认None)- moving_variance的名称,存储全局方差。 - - **do_model_average_for_mean_and_var** (bool,默认False)- 是否为mean和variance做模型均值 - - **fuse_with_relu** (bool)- 如果为True,batch norm后该操作符执行relu。默认为False。 - - **use_global_stats** (bool) – 是否使用全局均值和方差。 在预测或测试模式下,将use_global_stats设置为true或将is_test设置为true,并且行为是等效的。 在训练模式中,当设置use_global_stats为True时,在训练期间也使用全局均值和方差。默认为False。 - - **trainable_statistics** (bool)- eval模式下是否计算mean均值和var方差。eval模式下,trainable_statistics为True时,由该批数据计算均值和方差。默认为False。 - -返回: 张量,在输入中运用批正则后的结果 - -返回类型:变量(Variable) + - **name_scope** (str) - 该类的名称。 + - **num_channels** (int) - 指明输入 ``Tensor`` 的通道数量。 + - **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。 + - **is_test** (bool, 可选) - 指示是否在测试阶段,非训练阶段使用训练过程中统计到的全局均值和全局方差。默认值:False。 + - **momentum** (float, 可选) - 此值用于计算 ``moving_mean`` 和 ``moving_var`` 。默认值:0.9。更新公式如上所示。 + - **epsilon** (float, 可选) - 为了数值稳定加在分母上的值。默认值:1e-05。 + - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **dtype** (str, 可选) - 指明输入 ``Tensor`` 的数据类型,可以为float32或float64。默认值:float32。 + - **data_layout** (string, 可选) - 指定输入数据格式,数据格式可以为“NCHW”或者“NHWC”。默认值:“NCHW”。 + - **in_place** (bool, 可选) - 指示 ``batch_norm`` 的输出是否可以复用输入内存。默认值:False。 + - **moving_mean_name** (str, 可选) - ``moving_mean`` 的名称,存储全局均值。如果将其设置为None, ``batch_norm`` 将随机命名全局均值;否则, ``batch_norm`` 将命名全局均值为 ``moving_mean_name`` 。默认值:None。 + - **moving_variance_name** (string, 可选) - ``moving_var`` 的名称,存储全局方差。如果将其设置为None, ``batch_norm`` 将随机命名全局方差;否则, ``batch_norm`` 将命名全局方差为 ``moving_variance_name`` 。默认值:None。 + - **do_model_average_for_mean_and_var** (bool, 可选) - 指示是否为mean和variance做模型均值。默认值:False。 + - **fuse_with_relu** (bool, 可选) - 如果为True,将在执行 ``batch_norm`` 后执行 ``relu`` 操作。默认值:False。 + - **use_global_stats** (bool, 可选) – 指示是否使用全局均值和方差。在预测或测试模式下,将 ``use_global_stats`` 设置为true或将 ``is_test`` 设置为true,这两种行为是等效的。在训练模式中,当设置 ``use_global_stats`` 为True时,在训练期间也将使用全局均值和方差。默认值:False。 + - **trainable_statistics** (bool, 可选) - eval模式下是否计算mean均值和var方差。eval模式下,trainable_statistics为True时,由该批数据计算均值和方差。默认值:False。 + +返回:无 **代码示例** .. code-block:: python import paddle.fluid as fluid + from paddle.fluid.dygraph.base import to_variable + import numpy as np + x = np.random.random(size=(3, 10, 3, 7)).astype('float32') with fluid.dygraph.guard(): - fc = fluid.FC('fc', size=200, param_attr='fc1.w') - hidden1 = fc(x) + x = to_variable(x) batch_norm = fluid.BatchNorm("batch_norm", 10) - hidden2 = batch_norm(hidden1) - + hidden1 = batch_norm(x) diff --git a/doc/fluid/api_cn/dygraph_cn/GroupNorm_cn.rst b/doc/fluid/api_cn/dygraph_cn/GroupNorm_cn.rst index 727ed5ea4..038084624 100644 --- a/doc/fluid/api_cn/dygraph_cn/GroupNorm_cn.rst +++ b/doc/fluid/api_cn/dygraph_cn/GroupNorm_cn.rst @@ -7,36 +7,32 @@ GroupNorm **Group Normalization层** -请参考 `Group Normalization `_ 。 +该接口用于构建 ``GroupNorm`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其中实现了组归一化层的功能。更多详情请参考: `Group Normalization `_ 。 参数: - - **name_scope** (str) - 该类名称。 - - **groups** (int) - 从 channel 中分离出来的 group 的数目。 - - **epsilon** (float) - 为防止方差除零,增加一个很小的值,默认为1e-05。 - - **param_attr** (ParamAttr|None) - 可学习标度的参数属性 :math:`g`,如果设置为False,则不会向输出单元添加标度。如果设置为0,偏差初始化为1。默认值:None。 - - **bias_attr** (ParamAttr|None) - 可学习偏置的参数属性 :math:`b ` , 如果设置为False,则不会向输出单元添加偏置量。如果设置为零,偏置初始化为零。默认值:None。 - - **act** (str) - 将激活应用于输出的 group normalizaiton - - **data_layout** (string|NCHW) - 只支持NCHW。 + - **name_scope** (str) - 该类的名称。 + - **groups** (int) - 从通道中分离出来的 ``group`` 的数目。 + - **epsilon** (float, 可选) - 为防止方差除零,增加一个很小的值。默认值:1e-05。 + - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。 + - **data_layout** (str, 可选) - 只支持“NCHW”(num_batches,channels,height,width)格式。默认值:“NCHW”。 -返回: 一个张量变量,它是对输入进行 group normalization 后的结果。 - -返回类型:Variable +返回:无 +抛出异常: + - ValueError - 如果 ``data_layout`` 不是“NCHW”格式。 **代码示例** .. code-block:: python import paddle.fluid as fluid - import numpy + import numpy s np with fluid.dygraph.guard(): - x = numpy.random.random((8, 32, 32)).astype('float32') + x = np.random.random((8, 32, 32)).astype('float32') groupNorm = fluid.dygraph.nn.GroupNorm('GroupNorm', groups=4) ret = groupNorm(fluid.dygraph.base.to_variable(x)) - - - - diff --git a/doc/fluid/api_cn/dygraph_cn/LayerNorm_cn.rst b/doc/fluid/api_cn/dygraph_cn/LayerNorm_cn.rst index d837f5a76..5d6733e25 100644 --- a/doc/fluid/api_cn/dygraph_cn/LayerNorm_cn.rst +++ b/doc/fluid/api_cn/dygraph_cn/LayerNorm_cn.rst @@ -5,53 +5,49 @@ LayerNorm .. py:class:: paddle.fluid.dygraph.LayerNorm(name_scope, scale=True, shift=True, begin_norm_axis=1, epsilon=1e-05, param_attr=None, bias_attr=None, act=None) +该接口用于构建 ``LayerNorm`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其中实现了层归一化层(Layer Normalization Layer)的功能,其可以应用于小批量输入数据。更多详情请参考:`Layer Normalization `_ -假设特征向量存在于维度 ``begin_norm_axis ... rank (input)`` 上,计算大小为 ``H`` 的特征向量a在该维度上的矩统计量,然后使用相应的统计量对每个特征向量进行归一化。 之后,如果设置了 ``scale`` 和 ``shift`` ,则在标准化的张量上应用可学习的增益和偏差以进行缩放和移位。 +计算公式如下 -请参考 `Layer Normalization `_ +.. math:: + \\\mu=\frac{1}{H}\sum_{i=1}^{H}x_i\\ -公式如下 + \\\sigma=\sqrt{\frac{1}{H}\sum_i^H{(x_i-\mu)^2} + \epsilon}\\ -.. math:: - \\\mu=\frac{1}{H}\sum_{i=1}^{H}a_i\\ -.. math:: - \\\sigma=\sqrt{\frac{1}{H}\sum_i^H{(a_i-\mu)^2}}\\ -.. math:: - \\h=f(\frac{g}{\sigma}(a-\mu) + b)\\ + \\y=f(\frac{g}{\sigma}(x-\mu) + b)\\ -- :math:`\alpha` : 该层神经元输入总和的向量表示 -- :math:`H` : 层中隐藏的神经元个数 -- :math:`g` : 可训练的缩放因子参数 -- :math:`b` : 可训练的bias参数 +- :math:`x` : 该层神经元的向量表示 +- :math:`H` : 层中隐藏神经元个数 +- :math:`\epsilon` : 添加较小的值到方差中以防止除零 +- :math:`g` : 可训练的比例参数 +- :math:`b` : 可训练的偏差参数 -参数: - - **name_scope** (str) – 该类的名称 - - **scale** (bool) - 是否在归一化后学习自适应增益g。默认为True。 - - **shift** (bool) - 是否在归一化后学习自适应偏差b。默认为True。 - - **begin_norm_axis** (int) - ``begin_norm_axis`` 到 ``rank(input)`` 的维度执行规范化。默认1。 - - **epsilon** (float) - 添加到方差的很小的值,以防止除零。默认1e-05。 - - **param_attr** (ParamAttr | None) - 可学习增益g的参数属性。如果 ``scale`` 为False,则省略 ``param_attr`` 。如果 ``scale`` 为True且 ``param_attr`` 为None,则默认 ``ParamAttr`` 将作为比例。如果添加了 ``param_attr``, 则将其初始化为1。默认None。 - - **bias_attr** (ParamAttr | None) - 可学习偏差的参数属性b。如果 ``shift`` 为False,则省略 ``bias_attr`` 。如果 ``shift`` 为True且 ``param_attr`` 为None,则默认 ``ParamAttr`` 将作为偏差。如果添加了 ``bias_attr`` ,则将其初始化为0。默认None。 - - **act** (str) - 激活函数。默认 None +参数: + - **name_scope** (str) – 该类的名称。 + - **scale** (bool, 可选) - 指明是否在归一化后学习自适应增益 ``g`` 。默认值:True。 + - **shift** (bool, 可选) - 指明是否在归一化后学习自适应偏差 ``b`` 。默认值:True。 + - **begin_norm_axis** (int, 可选) - 指明归一化将沿着 ``begin_norm_axis`` 到 ``rank(input)`` 的维度执行。默认值:1。 + - **epsilon** (float, 可选) - 指明在计算过程中是否添加较小的值到方差中以防止除零。默认值:1e-05。 + - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。 -返回: 标准化后的结果 +返回:无 **代码示例** -.. code-block:: python +.. code-block:: python import paddle.fluid as fluid + from paddle.fluid.dygraph.base import to_variable import numpy + x = numpy.random.random((3, 32, 32)).astype('float32') with fluid.dygraph.guard(): - x = numpy.random.random((3, 32, 32)).astype('float32') - layerNorm = fluid.dygraph.nn.LayerNorm( - 'LayerNorm', begin_norm_axis=1) - ret = layerNorm(fluid.dygraph.base.to_variable(x)) - - - + x = to_variable(x) + layernorm = fluid.LayerNorm('LayerNorm', begin_norm_axis=1) + ret = layernorm(x) diff --git a/doc/fluid/api_cn/dygraph_cn/SpectralNorm_cn.rst b/doc/fluid/api_cn/dygraph_cn/SpectralNorm_cn.rst index 1d36d52e7..5e0ab2a87 100644 --- a/doc/fluid/api_cn/dygraph_cn/SpectralNorm_cn.rst +++ b/doc/fluid/api_cn/dygraph_cn/SpectralNorm_cn.rst @@ -5,19 +5,18 @@ SpectralNorm .. py:class:: paddle.fluid.dygraph.SpectralNorm(name_scope, dim=0, power_iters=1, eps=1e-12, name=None) +该接口用于构建 ``SpectralNorm`` 类的一个可调用对象,具体用法参照 ``代码示例`` 。其中实现了谱归一化层的功能,用于计算fc、conv1d、conv2d、conv3d层的权重参数的谱正则值,输入权重参数应分别为2-D, 3-D, 4-D, 5-D张量,输出张量与输入张量维度相同。谱特征值计算方式如下: -该层计算了fc、conv1d、conv2d、conv3d层的权重参数的谱正则值,其参数应分别为2-D, 3-D, 4-D, 5-D。计算结果如下。 +步骤1:生成形状为[H]的向量U,以及形状为[W]的向量V,其中H是输入权重张量的第 ``dim`` 个维度,W是剩余维度的乘积。 -步骤1:生成形状为[H]的向量U,以及形状为[W]的向量V,其中H是输入权重的第 ``dim`` 个维度,W是剩余维度的乘积。 - -步骤2: ``power_iters`` 应该是一个正整数,用U和V迭代计算 ``power_iters`` 轮。 +步骤2: ``power_iters`` 应该是一个正整数,用U和V迭代计算 ``power_iters`` 轮,迭代步骤如下。 .. math:: \mathbf{v} &:= \frac{\mathbf{W}^{T} \mathbf{u}}{\|\mathbf{W}^{T} \mathbf{u}\|_2}\\ \mathbf{u} &:= \frac{\mathbf{W}^{T} \mathbf{v}}{\|\mathbf{W}^{T} \mathbf{v}\|_2} -步骤3:计算 \sigma(\mathbf{W}) 并权重值归一化。 +步骤3:计算 :math:`\sigma(\mathbf{W})` 并特征值值归一化。 .. math:: \sigma(\mathbf{W}) &= \mathbf{u}^{T} \mathbf{W} \mathbf{v}\\ @@ -26,32 +25,23 @@ SpectralNorm 可参考: `Spectral Normalization `_ 参数: - - **name_scope** (str)-该类的名称。 - - **dim** (int)-将输入(weight)重塑为矩阵之前应排列到第一个的维度索引,如果input(weight)是fc层的权重,则应设置为0;如果input(weight)是conv层的权重,则应设置为1,默认为0。 - - **power_iters** (int)-将用于计算spectral norm的功率迭代次数,默认值1。 - - **eps** (float)-epsilon用于计算规范中的数值稳定性,默认值为1e-12 - - **name** (str)-此层的名称,可选。 - -返回:谱正则化后权重参数的张量变量 + - **name_scope** (str) - 该类的名称。 + - **dim** (int, 可选) - 将输入(weight)重塑为矩阵之前应排列到第一个的维度索引,如果input(weight)是fc层的权重,则应设置为0;如果input(weight)是conv层的权重,则应设置为1。默认值:0。 + - **power_iters** (int, 可选) - 将用于计算的 ``SpectralNorm`` 功率迭代次数,默认值:1。 + - **eps** (float, 可选) - ``eps`` 用于保证计算规范中的数值稳定性,分母会加上 ``eps`` 防止除零。默认值:1e-12。 + - **name** (str, 可选) - 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。 -返回类型:Variable +返回:无 **代码示例**: .. code-block:: python import paddle.fluid as fluid - import numpy + import numpy as np with fluid.dygraph.guard(): - x = numpy.random.random((2, 8, 32, 32)).astype('float32') + x = np.random.random((2, 8, 32, 32)).astype('float32') spectralNorm = fluid.dygraph.nn.SpectralNorm('SpectralNorm', dim=1, power_iters=2) ret = spectralNorm(fluid.dygraph.base.to_variable(x)) - - - - - - - diff --git a/doc/fluid/api_cn/layers_cn/layer_norm_cn.rst b/doc/fluid/api_cn/layers_cn/layer_norm_cn.rst index b47e8e978..409d95b39 100644 --- a/doc/fluid/api_cn/layers_cn/layer_norm_cn.rst +++ b/doc/fluid/api_cn/layers_cn/layer_norm_cn.rst @@ -5,52 +5,50 @@ layer_norm .. py:function:: paddle.fluid.layers.layer_norm(input, scale=True, shift=True, begin_norm_axis=1, epsilon=1e-05, param_attr=None, bias_attr=None, act=None, name=None) -假设特征向量存在于维度 ``begin_norm_axis ... rank (input)`` 上,计算大小为 ``H`` 的特征向量a在该维度上的矩统计量,然后使用相应的统计量对每个特征向量进行归一化。 之后,如果设置了 ``scale`` 和 ``shift`` ,则在标准化的张量上应用可学习的增益和偏差以进行缩放和移位。 +该OP实现了层归一化层(Layer Normalization Layer),其可以应用于小批量输入数据。更多详情请参考:`Layer Normalization `_ -请参考 `Layer Normalization `_ +计算公式如下 -公式如下 - -.. math:: - \\\mu=\frac{1}{H}\sum_{i=1}^{H}a_i\\ -.. math:: - \\\sigma=\sqrt{\frac{1}{H}\sum_i^H{(a_i-\mu)^2}}\\ .. math:: - \\h=f(\frac{g}{\sigma}(a-\mu) + b)\\ - -- :math:`\alpha` : 该层神经元输入总和的向量表示 -- :math:`H` : 层中隐藏的神经元个数 -- :math:`g` : 可训练的缩放因子参数 -- :math:`b` : 可训练的bias参数 - - -参数: - - **input** (Variable) - 输入张量变量。 - - **scale** (bool) - 是否在归一化后学习自适应增益g。默认为True。 - - **shift** (bool) - 是否在归一化后学习自适应偏差b。默认为True。 - - **begin_norm_axis** (int) - ``begin_norm_axis`` 到 ``rank(input)`` 的维度执行规范化。默认1。 - - **epsilon** (float) - 添加到方差的很小的值,以防止除零。默认1e-05。 - - **param_attr** (ParamAttr | None) - 可学习增益g的参数属性。如果 ``scale`` 为False,则省略 ``param_attr`` 。如果 ``scale`` 为True且 ``param_attr`` 为None,则默认 ``ParamAttr`` 将作为比例。如果添加了 ``param_attr``, 则将其初始化为1。默认None。 - - **bias_attr** (ParamAttr | None) - 可学习偏差的参数属性b。如果 ``shift`` 为False,则省略 ``bias_attr`` 。如果 ``shift`` 为True且 ``param_attr`` 为None,则默认 ``ParamAttr`` 将作为偏差。如果添加了 ``bias_attr`` ,则将其初始化为0。默认None。 - - **act** (str) - 激活函数。默认 None - - **name** (str) - 该层的名称, 可选的。默认为None,将自动生成唯一名称。 - -返回: 标准化后的结果 - -**代码示例** - -.. code-block:: python - - import paddle.fluid as fluid - data = fluid.layers.data(name='data', shape=[3, 32, 32], - dtype='float32') - x = fluid.layers.layer_norm(input=data, begin_norm_axis=1) + \\\mu=\frac{1}{H}\sum_{i=1}^{H}x_i\\ + \\\sigma=\sqrt{\frac{1}{H}\sum_i^H{(x_i-\mu)^2} + \epsilon}\\ + \\y=f(\frac{g}{\sigma}(x-\mu) + b)\\ +- :math:`x` : 该层神经元的向量表示 +- :math:`H` : 层中隐藏神经元个数 +- :math:`\epsilon` : 添加较小的值到方差中以防止除零 +- :math:`g` : 可训练的比例参数 +- :math:`b` : 可训练的偏差参数 +参数: + - **input** (Variable) - 维度为任意维度的多维 ``Tensor`` ,数据类型为float32或float64。 + - **scale** (bool, 可选) - 指明是否在归一化后学习自适应增益 ``g`` 。默认值:True。 + - **shift** (bool, 可选) - 指明是否在归一化后学习自适应偏差 ``b`` 。默认值:True。 + - **begin_norm_axis** (int, 可选) - 指明归一化将沿着 ``begin_norm_axis`` 到 ``rank(input)`` 的维度执行。默认值:1。 + - **epsilon** (float, 可选) - 指明在计算过程中是否添加较小的值到方差中以防止除零。默认值:1e-05。 + - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **act** (str, 可选) - 应用于输出上的激活函数,如tanh、softmax、sigmoid,relu等,支持列表请参考 :ref:`api_guide_activations` ,默认值为None。 + - **name** (str, 可选) - 具体用法请参见 :ref:`api_guide_Name` ,一般无需设置,默认值为None。。 +返回:表示归一化结果的 ``Tensor`` ,数据类型和 ``input`` 一致,返回维度和 ``input`` 一致。 +返回类型:Variable +**代码示例** +.. code-block:: python + + import paddle.fluid as fluid + import numpy as np + x = fluid.layers.data(name='x', shape=[3, 32, 32], dtype='float32') + hidden1 = fluid.layers.layer_norm(input=x, begin_norm_axis=1) + place = fluid.CPUPlace() + exe = fluid.Executor(place) + exe.run(fluid.default_startup_program()) + np_x = np.random.random(size=(8, 3, 32, 32)).astype('float32') + output = exe.run(feed={"x": np_x}, fetch_list = [hidden1]) + print(output) -- GitLab