parameter.rst 4.7 KB
Newer Older
T
Tink_Y 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
..  _api_guide_parameter:

#########
模型参数
#########

模型参数为模型中的weight和bias统称,在fluid中对应fluid.Parameter类,继承自fluid.Variable,是一种可持久化的variable。模型的训练就是不断学习更新模型参数的过程。模型参数相关的属性可以通过 :ref:`api_fluid_param_attr_ParamAttr` 来配置,可配置内容有:

- 初始化方式
- 正则化
- 梯度剪切
- 模型平均

初始化方式
=================

fluid通过设置 :code:`ParamAttr` 的 :code:`initializer` 属性为单个parameter设置初始化方式。
示例如下:

  .. code-block:: python

      param_attrs = fluid.ParamAttr(name="fc_weight",
                                initializer=fluid.initializer.ConstantInitializer(1.0))
      y_predict = fluid.layers.fc(input=x, size=10, param_attr=param_attrs)


以下为fluid支持的初始化方式:

1. BilinearInitializer
-----------------------

线性初始化方法。用该方法初始化的反卷积操作可当做线性插值操作使用。

可用别名:Bilinear

API请参考::ref:`api_fluid_initializer_BilinearInitializer`

2. ConstantInitializer
----------------------

常数初始化方式,将parameter初始化为指定的数值。

可用别名:Constant

API请参考::ref:`api_fluid_initializer_ConstantInitializer`

3. MSRAInitializer
------------------

该初始化方法参考论文: https://arxiv.org/abs/1502.01852

可用别名:MSRA

API请参考::ref:`api_fluid_initializer_MSRAInitializer`

4. NormalInitializer
---------------------

随机高斯分布初始化方法。

可用别名:Normal

API请参考::ref:`api_fluid_initializer_NormalInitializer`

5. TruncatedNormalInitializer
-----------------------------

随机截断高斯分布初始化方法。

可用别名:TruncatedNormal

API请参考::ref:`api_fluid_initializer_TruncatedNormalInitializer`

6. UniformInitializer
--------------------

随机均匀分布初始化方式。

可用别名:Uniform

API请参考::ref:`api_fluid_initializer_UniformInitializer`

7. XavierInitializer
--------------------

该初始化方式参考论文: http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

可用别名:Xavier

API请参考::ref:`api_fluid_initializer_XavierInitializer`

正则化方式
=============

fluid通过设置 :code:`ParamAttr` 的 :code:`regularizer` 属性为单个parameter设置正则化。

  .. code-block:: python

      param_attrs = fluid.ParamAttr(name="fc_weight",
                                regularizer=fluid.regularizer.L1DecayRegularizer(0.1))
      y_predict = fluid.layers.fc(input=x, size=10, param_attr=param_attrs)

以下为fluid支持的正则化方式:

- :ref:`api_fluid_regularizer_L1DecayRegularizer` (别名:L1Decay)
- :ref:`api_fluid_regularizer_L2DecayRegularizer` (别名:L2Decay)

Clipping
==========

fluid通过设置 :code:`ParamAttr` 的 :code:`gradient_clip` 属性为单个parameter设置clipping方式。

  .. code-block:: python

      param_attrs = fluid.ParamAttr(name="fc_weight",
                                regularizer=fluid.regularizer.L1DecayRegularizer(0.1))
      y_predict = fluid.layers.fc(input=x, size=10, param_attr=param_attrs)


以下为fluid支持的clipping方式:

1. ErrorClipByValue
-------------------

用来将一个tensor的值clipping到指定范围。

API请参考::ref:`api_fluid_clip_ErrorClipByValue`

2. GradientClipByGlobalNorm
---------------------------

用来将多个Tensor的global-norm限制在 :code:`clip_norm` 以内。

API请参考::ref:`api_fluid_clip_GradientClipByGlobalNorm`

3. GradientClipByNorm
---------------------

将Tensor的l2-norm限制在 :code:`max_norm` 以内。如果Tensor的l2-norm超过了 :code:`max_norm` ,
会将计算出一个 :code:`scale` ,该Tensor的所有值乘上计算出来的 :code:`scale` .

API请参考::ref:`api_fluid_clip_GradientClipByNorm`

4. GradientClipByValue
----------------------

将parameter对应的gradient的值限制在[min, max]范围内。

API请参考::ref:`api_fluid_clip_GradientClipByValue`

模型平均
========

fluid通过 :code:`ParamAttr` 的 :code:`do_model_average` 属性设置单个parameter是否进行平均优化。
示例如下:

  .. code-block:: python

      param_attrs = fluid.ParamAttr(name="fc_weight",
                                do_model_average=true)
      y_predict = fluid.layers.fc(input=x, size=10, param_attr=param_attrs)

在miniBatch训练过程中,每个batch过后,都会更新一次parameters,模型平均做的就是平均最近k次更新产生的parameters。

平均后的parameters只是被用来进行测试和预测,其并不参与实际的训练过程。

具体API请参考::ref:`api_fluid_optimizer_ModelAverage`