模型参数¶
模型参数为模型中的weight和bias统称,在fluid中对应fluid.Parameter类,继承自fluid.Variable,是一种可持久化的variable。模型的训练就是不断学习更新模型参数的过程。模型参数相关的属性可以通过 ParamAttr 来配置,可配置内容有:
- 初始化方式
- 正则化
- 梯度剪切
- 模型平均
初始化方式¶
fluid通过设置 ParamAttr
的 initializer
属性为单个parameter设置初始化方式。
示例如下:
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支持的初始化方式:
5. TruncatedNormalInitializer¶
随机截断高斯分布初始化方法。
可用别名:TruncatedNormal
API请参考:TruncatedNormalInitializer
7. XavierInitializer¶
该初始化方式参考论文: http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
可用别名:Xavier
API请参考:XavierInitializer
正则化方式¶
fluid通过设置 ParamAttr
的 regularizer
属性为单个parameter设置正则化。
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支持的正则化方式:
- L1DecayRegularizer (别名:L1Decay)
- L2DecayRegularizer (别名:L2Decay)
Clipping¶
fluid通过设置 ParamAttr
的 gradient_clip
属性为单个parameter设置clipping方式。
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方式:
2. GradientClipByGlobalNorm¶
用来将多个Tensor的global-norm限制在 clip_norm
以内。
API请参考:GradientClipByGlobalNorm
3. GradientClipByNorm¶
将Tensor的l2-norm限制在 max_norm
以内。如果Tensor的l2-norm超过了 max_norm
,
会将计算出一个 scale
,该Tensor的所有值乘上计算出来的 scale
.
API请参考:GradientClipByNorm
模型平均¶
fluid通过 ParamAttr
的 do_model_average
属性设置单个parameter是否进行平均优化。
示例如下:
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请参考:ModelAverage