From 54db6cf0be174599eb2926c35bce1a1a7d4fae46 Mon Sep 17 00:00:00 2001 From: Aurelius84 Date: Thu, 26 Mar 2020 10:25:03 +0800 Subject: [PATCH] Add learning_rate in NoamDecay (#1940) * Add learning_rate in NoamDecay test=develop * Update sample code test=develop --- doc/fluid/api_cn/dygraph_cn/NoamDecay_cn.rst | 9 ++++++--- doc/fluid/api_cn/layers_cn/noam_decay_cn.rst | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/doc/fluid/api_cn/dygraph_cn/NoamDecay_cn.rst b/doc/fluid/api_cn/dygraph_cn/NoamDecay_cn.rst index 1b58aefb9..9f94a3f51 100644 --- a/doc/fluid/api_cn/dygraph_cn/NoamDecay_cn.rst +++ b/doc/fluid/api_cn/dygraph_cn/NoamDecay_cn.rst @@ -5,7 +5,7 @@ NoamDecay **注意:该API仅支持【动态图】模式** -.. py:class:: paddle.fluid.dygraph.NoamDecay(d_model, warmup_steps, begin=1, step=1, dtype='float32') +.. py:class:: paddle.fluid.dygraph.NoamDecay(d_model, warmup_steps, begin=1, step=1, dtype='float32', learning_rate=1.0) 该接口提供Noam衰减学习率的功能。 @@ -13,7 +13,7 @@ Noam衰减的计算方式如下。 .. math:: - decayed\_learning\_rate = d_{model}^{-0.5} * min(global\_steps^{-0.5}, global\_steps * warmup\_steps^{-1.5}) + decayed\_learning\_rate = learning\_rate * d_{model}^{-0.5} * min(global\_steps^{-0.5}, global\_steps * warmup\_steps^{-1.5}) 关于Noam衰减的更多细节请参考 `attention is all you need `_ @@ -28,6 +28,7 @@ Noam衰减的计算方式如下。 - **begin** (int,可选) – 起始步。即以上运算式子中global_steps的初始值。默认值为0。 - **step** (int,可选) – 步大小。即以上运算式子中global_steps的递增值。默认值为1。 - **dtype** (str,可选) – 学习率值的数据类型,可以为"float32", "float64"。默认值为"float32"。 + - **learning_rate** (Variable|float|int,可选) - 初始学习率。如果类型为Variable,则为shape为[1]的Tensor,数据类型为float32或float64;也可以是python的int类型。默认值为1.0。 返回: 无 @@ -39,7 +40,9 @@ Noam衰减的计算方式如下。 warmup_steps = 100 learning_rate = 0.01 with fluid.dygraph.guard(): + emb = fluid.dygraph.Embedding([10, 10]) optimizer = fluid.optimizer.SGD( learning_rate = fluid.dygraph.NoamDecay( 1/(warmup_steps *(learning_rate ** 2)), - warmup_steps) ) + warmup_steps), + parameter_list = emb.parameters()) diff --git a/doc/fluid/api_cn/layers_cn/noam_decay_cn.rst b/doc/fluid/api_cn/layers_cn/noam_decay_cn.rst index 4769b6dd7..9c5717bdd 100644 --- a/doc/fluid/api_cn/layers_cn/noam_decay_cn.rst +++ b/doc/fluid/api_cn/layers_cn/noam_decay_cn.rst @@ -3,7 +3,7 @@ noam_decay ------------------------------- -.. py:function:: paddle.fluid.layers.noam_decay(d_model,warmup_steps) +.. py:function:: paddle.fluid.layers.noam_decay(d_model, warmup_steps) Noam衰减方法 @@ -14,11 +14,12 @@ noam衰减的numpy实现如下: import paddle.fluid as fluid import numpy as np # 设置超参数 + base_lr = 0.01 d_model = 2 current_steps = 20 warmup_steps = 200 # 计算 - lr_value = np.power(d_model, -0.5) * np.min([ + lr_value = base_lr * np.power(d_model, -0.5) * np.min([ np.power(current_steps, -0.5), np.power(warmup_steps, -1.5) * current_steps]) @@ -27,6 +28,7 @@ noam衰减的numpy实现如下: 参数: - **d_model** (Variable|int) - 模型的输入、输出向量特征维度。类型可设置为标量Tensor,或int值。 - **warmup_steps** (Variable|int) - 预热步数,类型可设置为标量Tensor,或int值。 + - **learning_rate** (Variable|float|int,可选) - 初始学习率。如果类型为Variable,则为shape为[1]的Tensor,数据类型为float32或float64;也可以是python的int类型。默认值为1.0。 返回:衰减的学习率 @@ -41,7 +43,8 @@ noam衰减的numpy实现如下: learning_rate = 0.01 lr = fluid.layers.learning_rate_scheduler.noam_decay( 1/(warmup_steps *(learning_rate ** 2)), - warmup_steps) + warmup_steps, + learning_rate) -- GitLab