parameter.rst 4.7 KB
Newer Older
C
Cheerego 已提交
1 2 3 4 5 6
..  _api_guide_parameter:

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

C
Cheerego 已提交
7
模型参数为模型中的weight和bias统称,在fluid中对应fluid.Parameter类,继承自fluid.Variable,是一种可持久化的variable。模型的训练就是不断学习更新模型参数的过程。模型参数相关的属性可以通过 :ref:`cn_api_fluid_param_attr_ParamAttr` 来配置,可配置内容有:
C
Cheerego 已提交
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

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

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

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

C
Cheerego 已提交
36
API请参考::ref:`cn_api_fluid_initializer_BilinearInitializer`
C
Cheerego 已提交
37 38 39 40 41 42 43 44

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

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

可用别名:Constant

C
Cheerego 已提交
45
API请参考::ref:`cn_api_fluid_initializer_ConstantInitializer`
C
Cheerego 已提交
46 47 48 49 50 51 52 53

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

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

可用别名:MSRA

C
Cheerego 已提交
54
API请参考::ref:`cn_api_fluid_initializer_MSRAInitializer`
C
Cheerego 已提交
55 56 57 58 59 60 61 62

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

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

可用别名:Normal

C
Cheerego 已提交
63
API请参考::ref:`cn_api_fluid_initializer_NormalInitializer`
C
Cheerego 已提交
64 65 66 67 68 69 70 71

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

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

可用别名:TruncatedNormal

C
Cheerego 已提交
72
API请参考::ref:`cn_api_fluid_initializer_TruncatedNormalInitializer`
C
Cheerego 已提交
73 74 75 76 77 78 79 80

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

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

可用别名:Uniform

C
Cheerego 已提交
81
API请参考::ref:`cn_api_fluid_initializer_UniformInitializer`
C
Cheerego 已提交
82 83 84 85 86 87 88 89

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

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

可用别名:Xavier

C
Cheerego 已提交
90
API请参考::ref:`cn_api_fluid_initializer_XavierInitializer`
C
Cheerego 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103 104

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

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支持的正则化方式:

C
Cheerego 已提交
105 106
- :ref:`cn_api_fluid_regularizer_L1DecayRegularizer` (别名:L1Decay)
- :ref:`cn_api_fluid_regularizer_L2DecayRegularizer` (别名:L2Decay)
C
Cheerego 已提交
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

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到指定范围。

C
Cheerego 已提交
127
API请参考::ref:`cn_api_fluid_clip_ErrorClipByValue`
C
Cheerego 已提交
128 129 130 131 132 133

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

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

C
Cheerego 已提交
134
API请参考::ref:`cn_api_fluid_clip_GradientClipByGlobalNorm`
C
Cheerego 已提交
135 136 137 138 139 140 141

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

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

C
Cheerego 已提交
142
API请参考::ref:`cn_api_fluid_clip_GradientClipByNorm`
C
Cheerego 已提交
143 144 145 146 147 148

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

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

C
Cheerego 已提交
149
API请参考::ref:`cn_api_fluid_clip_GradientClipByValue`
C
Cheerego 已提交
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

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

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只是被用来进行测试和预测,其并不参与实际的训练过程。

C
Cheerego 已提交
167
具体API请参考::ref:`cn_api_fluid_optimizer_ModelAverage`