From a812d018c3b20cbc1514fefb440d260c63f02a72 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Fri, 18 Mar 2022 16:25:05 +0800 Subject: [PATCH 01/11] add docs of CyclicLR --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 92 +++++++++++++++++++ .../layers/learning_rate_scheduler.rst | 5 +- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 docs/api/paddle/optimizer/lr/CyclicLR_cn.rst diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst new file mode 100644 index 00000000000..031f157f470 --- /dev/null +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -0,0 +1,92 @@ +.. _cn_api_paddle_optimizer_lr_CyclicLR: + +CyclicLR +----------------------------------- + +.. py:class:: paddle.optimizer.lr.CyclicLR(base_learning_rate, max_learning_rate, step_size_up, step_size_down, mode, gamma, scale_fn, scale_mode, last_epoch, verbose) + +该接口提供一种学习率按固定频率在两个边界之间循环的策略。 + +内置了三种学习率缩放策略,分别如下: + - **triangular**: 没有任何缩放的三角循环 + - **triangular2**:每个三角循环里将初始幅度缩放一半。 + - **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{cycle iterations}`。 + +初始幅度由`max_learning_rate - base_learning_rate`定义,:math:`gamma`为一个常量,:math:`cycle iterations`表示`cycle`数或'iterations'数。 +cycle定义为:math:`cycle = floor(1 + epoch / (step_size_up + step_size_down)), 需要注意的是,CyclicLR应在每个批次的训练后调用step,因此这里的epoch表示当前实际迭代数,iterations则表示从训练开始时到当前时刻的迭代数量。 + +参数: + - **base_learning_rate** (float) - 初始学习率,也是学习率变化的下边界。 + - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由``base_learning_rate``与初始幅度的缩放求和而来,因此实际学习率可能达不到``max_learning_rate``。 + - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。 + - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于``step_size_up``。 + - **mode** (str) - 可以是'triangular'、'triangular2'或者'exp_range',对应策略已在上文描述,当`scale_fn`被指定时时,该参数将被忽略。默认值:'triangular'。 + - **gamma** (float) - 'exp_range'缩放函数中的常量。 + - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 <= scale_fn(x) <= 1;如果该参数被指定,则会忽略`mode`参数。 + - **scale_mode** (str) - 'cycle'或者'iterations',表示缩放函数使用`cycle`数或`iterations`数作为输入。 + - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 + - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 + +返回:用于调整学习率的``CyclicLR``实例对象。 + +**代码示例** + +.. code-block:: python + + import paddle + import numpy as np + + # train on default dynamic graph mode + linear = paddle.nn.Linear(10, 10) + scheduler = paddle.optimizer.lr.CyclicLR(learning_rate=0.5, T_max=10, verbose=True) + sgd = paddle.optimizer.SGD(learning_rate=scheduler, parameters=linear.parameters()) + for epoch in range(20): + for batch_id in range(5): + x = paddle.uniform([10, 10]) + out = linear(x) + loss = paddle.mean(out) + loss.backward() + sgd.step() + sgd.clear_gradients() + scheduler.step() # you should update learning rate each step + + + # train on static graph mode + paddle.enable_static() + main_prog = paddle.static.Program() + start_prog = paddle.static.Program() + with paddle.static.program_guard(main_prog, start_prog): + x = paddle.static.data(name='x', shape=[None, 4, 5]) + y = paddle.static.data(name='y', shape=[None, 4, 5]) + z = paddle.static.nn.fc(x, 100) + loss = paddle.mean(z) + scheduler = paddle.optimizer.lr.CyclicLR(learning_rate=0.5, T_max=10, verbose=True) + sgd = paddle.optimizer.SGD(learning_rate=scheduler) + sgd.minimize(loss) + + exe = paddle.static.Executor() + exe.run(start_prog) + for epoch in range(20): + for batch_id in range(5): + out = exe.run( + main_prog, + feed={ + 'x': np.random.randn(3, 4, 5).astype('float32'), + 'y': np.random.randn(3, 4, 5).astype('float32') + }, + fetch_list=loss.name) + scheduler.step() # you should update learning rate each step + +.. py:method:: step(epoch=None) + +step函数需要在优化器的 `optimizer.step()` 函数之后调用,调用之后将会根据epoch数来更新学习率,更新之后的学习率将会在优化器下一轮更新参数时使用。 + +参数: + - **epoch** (int,可选)- 指定具体的epoch数。默认值None,此时将会从-1自动累加 ``epoch`` 数。 + +返回: + 无。 + +**代码示例** : + + 参照上述示例代码。 \ No newline at end of file diff --git a/docs/api_guides/low_level/layers/learning_rate_scheduler.rst b/docs/api_guides/low_level/layers/learning_rate_scheduler.rst index 49a1fbf7f97..3a02b22021f 100644 --- a/docs/api_guides/low_level/layers/learning_rate_scheduler.rst +++ b/docs/api_guides/low_level/layers/learning_rate_scheduler.rst @@ -54,4 +54,7 @@ 相关API Reference请参考 :ref:`cn_api_paddle_optimizer_lr_ReduceOnPlateau` * :code:`MultiplicativeDecay`: 每次将当前学习率乘以lambda函数得到下一个学习率。 - 相关API Reference请参考 :ref:`cn_api_paddle_optimizer_lr_MultiplicativeDecay` \ No newline at end of file + 相关API Reference请参考 :ref:`cn_api_paddle_optimizer_lr_MultiplicativeDecay` + +* :code:`CyclicLR`: 学习率根据固定频率在两个边界之间进行循环。 + 相关API Reference请参考 :ref:`_cn_api_paddle_optimizer_lr_CyclicLR` \ No newline at end of file From e5497cfed0b4d1f69f3de887a5fcb567413c1e14 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Fri, 18 Mar 2022 18:29:25 +0800 Subject: [PATCH 02/11] fix typo --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index 031f157f470..4f297d837da 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -38,7 +38,7 @@ cycle定义为:math:`cycle = floor(1 + epoch / (step_size_up + step_size_down)), # train on default dynamic graph mode linear = paddle.nn.Linear(10, 10) - scheduler = paddle.optimizer.lr.CyclicLR(learning_rate=0.5, T_max=10, verbose=True) + scheduler = paddle.optimizer.lr.CyclicLR(base_learning_rate=0.5, max_learning_rate=1.0, step_size_up=15, step_size_down=5, verbose=True) sgd = paddle.optimizer.SGD(learning_rate=scheduler, parameters=linear.parameters()) for epoch in range(20): for batch_id in range(5): @@ -60,7 +60,7 @@ cycle定义为:math:`cycle = floor(1 + epoch / (step_size_up + step_size_down)), y = paddle.static.data(name='y', shape=[None, 4, 5]) z = paddle.static.nn.fc(x, 100) loss = paddle.mean(z) - scheduler = paddle.optimizer.lr.CyclicLR(learning_rate=0.5, T_max=10, verbose=True) + scheduler = paddle.optimizer.lr.CyclicLR(base_learning_rate=0.5, max_learning_rate=1.0, step_size_up=15, step_size_down=5, verbose=True) sgd = paddle.optimizer.SGD(learning_rate=scheduler) sgd.minimize(loss) From d25b134303c38c4880dfb5105737648df4c3cbb6 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Thu, 19 May 2022 09:28:34 +0800 Subject: [PATCH 03/11] update --- docs/api/api_label | 3 +- docs/api/paddle/optimizer/Overview_cn.rst | 1 + docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 100 ++++++------------ .../paddle/optimizer/lr/LRScheduler_cn.rst | 4 +- .../api/paddle/optimizer/lr/OneCycleLR_cn.rst | 21 +++- .../layers/learning_rate_scheduler.rst | 4 +- .../layers/learning_rate_scheduler_en.rst | 3 + 7 files changed, 66 insertions(+), 70 deletions(-) diff --git a/docs/api/api_label b/docs/api/api_label index d7caa2748c7..206f6240a94 100644 --- a/docs/api/api_label +++ b/docs/api/api_label @@ -1010,7 +1010,8 @@ paddle.optimizer.lr.ReduceOnPlateau .. _api_paddle_optimizer_lr_ReduceOnPlateau: paddle.optimizer.lr.StepDecay .. _api_paddle_optimizer_lr_StepDecay: paddle.optimizer.lr.PolynomialDecay .. _api_paddle_optimizer_lr_PolynomialDecay: paddle.optimizer.lr.NaturalExpDecay .. _api_paddle_optimizer_lr_NaturalExpDecay: -paddle.optimizer.lr.OneCycleLR .. _cn_api_paddle_optimizer_lr_OneCycleLR: +paddle.optimizer.lr.OneCycleLR .. _api_paddle_optimizer_lr_OneCycleLR: +paddle.optimizer.lr.CyclicLR .. _api_paddle_optimizer_lr_CyclicLR: paddle.regularizer.L1Decay .. _api_paddle_regularizer_L1Decay: paddle.regularizer.L2Decay .. _api_paddle_regularizer_L2Decay: paddle.static.InputSpec .. _api_paddle_static_InputSpec: diff --git a/docs/api/paddle/optimizer/Overview_cn.rst b/docs/api/paddle/optimizer/Overview_cn.rst index 8cec5fdd478..8ea67d8dd52 100644 --- a/docs/api/paddle/optimizer/Overview_cn.rst +++ b/docs/api/paddle/optimizer/Overview_cn.rst @@ -54,3 +54,4 @@ paddle.optimizer 目录下包含飞桨框架支持的优化器算法相关的API " :ref:`StepDecay ` ", "按指定间隔轮数学习率衰减" " :ref:`MultiplicativeDecay ` ", "根据lambda函数进行学习率衰减" " :ref:`OneCycleLR ` ", "One Cycle学习率衰减" + " :ref:`CyclicLR ` ", "Cyclic学习率衰减" diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index 4f297d837da..1767a52882b 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -7,86 +7,56 @@ CyclicLR 该接口提供一种学习率按固定频率在两个边界之间循环的策略。 +该策略将学习率调整的过程视为一个又一个的循环,学习率根据指定的缩放策略以固定的频率在最大和最小学习率之间变化。 + +相关论文: `Cyclic Learning Rates for Training Neural Networks `_ + 内置了三种学习率缩放策略,分别如下: - - **triangular**: 没有任何缩放的三角循环 + - **triangular**: 没有任何缩放的三角循环。 - **triangular2**:每个三角循环里将初始幅度缩放一半。 - **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{cycle iterations}`。 -初始幅度由`max_learning_rate - base_learning_rate`定义,:math:`gamma`为一个常量,:math:`cycle iterations`表示`cycle`数或'iterations'数。 -cycle定义为:math:`cycle = floor(1 + epoch / (step_size_up + step_size_down)), 需要注意的是,CyclicLR应在每个批次的训练后调用step,因此这里的epoch表示当前实际迭代数,iterations则表示从训练开始时到当前时刻的迭代数量。 +初始幅度由`max_learning_rate - base_learning_rate`定义,:math:`gamma` 为一个常量,:math:`cycle iterations` 表示`cycle`数或'iterations'数。 +cycle定义为:math:`cycle = 1 + floor(epoch / (step_size_up + step_size_down))` , 需要注意的是,CyclicLR应在每个批次的训练后调用step,因此这里的epoch等同于iterations,都表示当前实际迭代数。 + +参数 +:::::::::::: -参数: - **base_learning_rate** (float) - 初始学习率,也是学习率变化的下边界。 - - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由``base_learning_rate``与初始幅度的缩放求和而来,因此实际学习率可能达不到``max_learning_rate``。 + - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由 ``base_learning_rate`` 与初始幅度的缩放求和而来,因此实际学习率可能达不到 ``max_learning_rate`` 。 - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。 - - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于``step_size_up``。 - - **mode** (str) - 可以是'triangular'、'triangular2'或者'exp_range',对应策略已在上文描述,当`scale_fn`被指定时时,该参数将被忽略。默认值:'triangular'。 - - **gamma** (float) - 'exp_range'缩放函数中的常量。 - - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 <= scale_fn(x) <= 1;如果该参数被指定,则会忽略`mode`参数。 - - **scale_mode** (str) - 'cycle'或者'iterations',表示缩放函数使用`cycle`数或`iterations`数作为输入。 + - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 + - **mode** (str,可选) - 可以是'triangular'、'triangular2'或者'exp_range',对应策略已在上文描述,当`scale_fn`被指定时时,该参数将被忽略。默认值:'triangular'。 + - **exp_gamma** (float,可选) - 'exp_range'缩放函数中的常量。默认值:1,0。 + - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 <= scale_fn(x) <= 1;如果该参数被指定,则会忽略`mode`参数。默认值: ``False`` 。 + - **scale_mode** (str,可选) - 'cycle'或者'iterations',表示缩放函数使用`cycle`数或`iterations`数作为输入。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 -返回:用于调整学习率的``CyclicLR``实例对象。 +返回: +:::::::::::: +用于调整学习率的``CyclicLR``实例对象。 -**代码示例** +代码示例 +:::::::::::: -.. code-block:: python - - import paddle - import numpy as np - - # train on default dynamic graph mode - linear = paddle.nn.Linear(10, 10) - scheduler = paddle.optimizer.lr.CyclicLR(base_learning_rate=0.5, max_learning_rate=1.0, step_size_up=15, step_size_down=5, verbose=True) - sgd = paddle.optimizer.SGD(learning_rate=scheduler, parameters=linear.parameters()) - for epoch in range(20): - for batch_id in range(5): - x = paddle.uniform([10, 10]) - out = linear(x) - loss = paddle.mean(out) - loss.backward() - sgd.step() - sgd.clear_gradients() - scheduler.step() # you should update learning rate each step - - - # train on static graph mode - paddle.enable_static() - main_prog = paddle.static.Program() - start_prog = paddle.static.Program() - with paddle.static.program_guard(main_prog, start_prog): - x = paddle.static.data(name='x', shape=[None, 4, 5]) - y = paddle.static.data(name='y', shape=[None, 4, 5]) - z = paddle.static.nn.fc(x, 100) - loss = paddle.mean(z) - scheduler = paddle.optimizer.lr.CyclicLR(base_learning_rate=0.5, max_learning_rate=1.0, step_size_up=15, step_size_down=5, verbose=True) - sgd = paddle.optimizer.SGD(learning_rate=scheduler) - sgd.minimize(loss) - - exe = paddle.static.Executor() - exe.run(start_prog) - for epoch in range(20): - for batch_id in range(5): - out = exe.run( - main_prog, - feed={ - 'x': np.random.randn(3, 4, 5).astype('float32'), - 'y': np.random.randn(3, 4, 5).astype('float32') - }, - fetch_list=loss.name) - scheduler.step() # you should update learning rate each step - -.. py:method:: step(epoch=None) +COPY-FROM: paddle.optimizer.lr.CyclicLR + +方法 +:::::::::::: +step(epoch=None) +''''''''' step函数需要在优化器的 `optimizer.step()` 函数之后调用,调用之后将会根据epoch数来更新学习率,更新之后的学习率将会在优化器下一轮更新参数时使用。 -参数: - - **epoch** (int,可选)- 指定具体的epoch数。默认值None,此时将会从-1自动累加 ``epoch`` 数。 +**参数** -返回: - 无。 + - **epoch** (int,可选) - 指定具体的epoch数。默认值None,此时将会从-1自动累加 ``epoch`` 数。 + +**返回** -**代码示例** : +无。 + +**代码示例** - 参照上述示例代码。 \ No newline at end of file +参照上述示例代码。 \ No newline at end of file diff --git a/docs/api/paddle/optimizer/lr/LRScheduler_cn.rst b/docs/api/paddle/optimizer/lr/LRScheduler_cn.rst index 3e99a408ccc..b66fb9ec4dd 100644 --- a/docs/api/paddle/optimizer/lr/LRScheduler_cn.rst +++ b/docs/api/paddle/optimizer/lr/LRScheduler_cn.rst @@ -7,7 +7,7 @@ LRScheduler 学习率策略的基类。定义了所有学习率调整策略的公共接口。 -目前在paddle中基于该基类,已经实现了13种策略,分别为: +目前在paddle中基于该基类,已经实现了14种策略,分别为: * :code:`NoamDecay`: 诺姆衰减,相关算法请参考 `《Attention Is All You Need》 `_ 。请参考 :ref:`cn_api_paddle_optimizer_lr_NoamDecay`。 @@ -37,6 +37,8 @@ LRScheduler * :code:`OneCycleLR`: One Cycle衰减,学习率上升至最大,再下降至最小。请参考 :ref:`cn_api_paddle_optimizer_lr_OneCycleLR`。 +* :code:`CyclicLR`: Cyclic学习率衰减,其将学习率变化的过程视为一个又一个循环,学习率根据固定的频率在最小和最大学习率之间不停变化。请参考 :ref:`cn_api_paddle_optimizer_lr_CyclicLR`。 + 你可以继承该基类实现任意的学习率策略,导出基类的方法为 ``form paddle.optimizer.lr import LRScheduler`` , 必须要重写该基类的 ``get_lr()`` 函数,否则会抛出 ``NotImplementedError`` 异常。 diff --git a/docs/api/paddle/optimizer/lr/OneCycleLR_cn.rst b/docs/api/paddle/optimizer/lr/OneCycleLR_cn.rst index 7cc326e72f6..502a3140c86 100644 --- a/docs/api/paddle/optimizer/lr/OneCycleLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/OneCycleLR_cn.rst @@ -35,4 +35,23 @@ OneCycleLR 代码示例 :::::::::::: -COPY-FROM: paddle.optimizer.lr.OneCycleLR \ No newline at end of file +COPY-FROM: paddle.optimizer.lr.OneCycleLR + +方法 +:::::::::::: +step(epoch=None) +''''''''' + +step函数需要在优化器的 `optimizer.step()` 函数之后调用,调用之后将会根据epoch数来更新学习率,更新之后的学习率将会在优化器下一轮更新参数时使用。 + +**参数** + + - **epoch** (int,可选) - 指定具体的epoch数。默认值None,此时将会从-1自动累加 ``epoch`` 数。 + +**返回** + +无。 + +**代码示例** + +参照上述示例代码。 diff --git a/docs/api_guides/low_level/layers/learning_rate_scheduler.rst b/docs/api_guides/low_level/layers/learning_rate_scheduler.rst index f85fdd7a2c5..a222609581b 100644 --- a/docs/api_guides/low_level/layers/learning_rate_scheduler.rst +++ b/docs/api_guides/low_level/layers/learning_rate_scheduler.rst @@ -59,5 +59,5 @@ * :code:`OneCycleLR`: One Cycle衰减,学习率上升至最大,再下降至最小. 相关API Reference请参考 :ref:`cn_api_paddle_optimizer_lr_OneCycleLR` -* :code:`CyclicLR`: 学习率根据固定频率在两个边界之间进行循环。 - 相关API Reference请参考 :ref:`_cn_api_paddle_optimizer_lr_CyclicLR` +* :code:`CyclicLR`: 学习率根据指定的缩放策略以固定频率在最小和最大学习率之间进行循环。 + 相关API Reference请参考 :ref:`_cn_api_paddle_optimizer_lr_CyclicLR` \ No newline at end of file diff --git a/docs/api_guides/low_level/layers/learning_rate_scheduler_en.rst b/docs/api_guides/low_level/layers/learning_rate_scheduler_en.rst index 4e267fccdc5..f6937851aac 100755 --- a/docs/api_guides/low_level/layers/learning_rate_scheduler_en.rst +++ b/docs/api_guides/low_level/layers/learning_rate_scheduler_en.rst @@ -41,3 +41,6 @@ The following content describes the APIs related to the learning rate scheduler: * :code:`ReduceOnPlateau`: Adjuge the learning rate according to monitoring index(In general, it's loss), and decay the learning rate when monitoring index becomes stable. For related API Reference please refer to :ref:`api_paddle_optimizer_lr_ReduceOnPlateau` +* :code:`OneCycleLR`: One cycle decay. That is, the initial learning rate first increases to maximum learning rate, and then it decreases to minimum learning rate which is much less than initial learning rate. For related API Reference please refer to :ref:`cn_api_paddle_optimizer_lr_OneCycleLR` + +* :code:`CyclicLR`: Cyclic decay. That is, the learning rate cycles between minimum and maximum learning rate with a constant frequency in specified a sacle method. For related API Reference please refer to :ref:`api_paddle_optimizer_lr_CyclicLR` \ No newline at end of file From 5e6d334fff0156a9234032d2682ec925e720ef97 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Fri, 20 May 2022 17:56:09 +0800 Subject: [PATCH 04/11] update --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index 1767a52882b..e73eb3f1f00 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -3,9 +3,9 @@ CyclicLR ----------------------------------- -.. py:class:: paddle.optimizer.lr.CyclicLR(base_learning_rate, max_learning_rate, step_size_up, step_size_down, mode, gamma, scale_fn, scale_mode, last_epoch, verbose) +.. py:class:: paddle.optimizer.lr.CyclicLR(base_learning_rate, max_learning_rate, step_size_up, step_size_down, mode, exp_gamma, scale_fn, scale_mode, last_epoch, verbose) -该接口提供一种学习率按固定频率在两个边界之间循环的策略。 +提供一种学习率按固定频率在两个边界之间循环的策略。 该策略将学习率调整的过程视为一个又一个的循环,学习率根据指定的缩放策略以固定的频率在最大和最小学习率之间变化。 @@ -14,20 +14,19 @@ CyclicLR 内置了三种学习率缩放策略,分别如下: - **triangular**: 没有任何缩放的三角循环。 - **triangular2**:每个三角循环里将初始幅度缩放一半。 - - **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{cycle iterations}`。 + - **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 -初始幅度由`max_learning_rate - base_learning_rate`定义,:math:`gamma` 为一个常量,:math:`cycle iterations` 表示`cycle`数或'iterations'数。 -cycle定义为:math:`cycle = 1 + floor(epoch / (step_size_up + step_size_down))` , 需要注意的是,CyclicLR应在每个批次的训练后调用step,因此这里的epoch等同于iterations,都表示当前实际迭代数。 +初始幅度由 `max_learning_rate - base_learning_rate` 定义。同时需要注意CyclicLR应在每次迭代后调用 ``step`` 方法。 参数 :::::::::::: - - **base_learning_rate** (float) - 初始学习率,也是学习率变化的下边界。 + - **base_learning_rate** (float) - 初始学习率,也是学习率变化的下边界。论文中建议将其设置为最大学习率的三分之一或四分之一。 - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由 ``base_learning_rate`` 与初始幅度的缩放求和而来,因此实际学习率可能达不到 ``max_learning_rate`` 。 - - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。 + - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。每个循环总的步长 ``step_size`` 由 ``step_size_up + step_size_down`` 定义,论文中建议将 ``step_size`` 设置为单个epoch中步长的3或4倍。 - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 - **mode** (str,可选) - 可以是'triangular'、'triangular2'或者'exp_range',对应策略已在上文描述,当`scale_fn`被指定时时,该参数将被忽略。默认值:'triangular'。 - - **exp_gamma** (float,可选) - 'exp_range'缩放函数中的常量。默认值:1,0。 + - **exp_gamma** (float,可选) - 'exp_range'缩放函数中的常量。默认值:1.0。 - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 <= scale_fn(x) <= 1;如果该参数被指定,则会忽略`mode`参数。默认值: ``False`` 。 - **scale_mode** (str,可选) - 'cycle'或者'iterations',表示缩放函数使用`cycle`数或`iterations`数作为输入。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 From 55042c7fcb2ab16ffd60bc0cbdd3d20fc5fe4b16 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Mon, 30 May 2022 17:36:46 +0800 Subject: [PATCH 05/11] test --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index e73eb3f1f00..ae1cbb630ea 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -9,12 +9,12 @@ CyclicLR 该策略将学习率调整的过程视为一个又一个的循环,学习率根据指定的缩放策略以固定的频率在最大和最小学习率之间变化。 -相关论文: `Cyclic Learning Rates for Training Neural Networks `_ +相关论文: `Cyclic Learning Rates for Training Neural Networks `_ -内置了三种学习率缩放策略,分别如下: - - **triangular**: 没有任何缩放的三角循环。 - - **triangular2**:每个三角循环里将初始幅度缩放一半。 - - **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 + 内置了三种学习率缩放策略,分别如下: + 1. **triangular**: 没有任何缩放的三角循环。 + 2. **triangular2**:每个三角循环里将初始幅度缩放一半。 + 3. **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 初始幅度由 `max_learning_rate - base_learning_rate` 定义。同时需要注意CyclicLR应在每次迭代后调用 ``step`` 方法。 @@ -25,10 +25,10 @@ CyclicLR - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由 ``base_learning_rate`` 与初始幅度的缩放求和而来,因此实际学习率可能达不到 ``max_learning_rate`` 。 - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。每个循环总的步长 ``step_size`` 由 ``step_size_up + step_size_down`` 定义,论文中建议将 ``step_size`` 设置为单个epoch中步长的3或4倍。 - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 - - **mode** (str,可选) - 可以是'triangular'、'triangular2'或者'exp_range',对应策略已在上文描述,当`scale_fn`被指定时时,该参数将被忽略。默认值:'triangular'。 - - **exp_gamma** (float,可选) - 'exp_range'缩放函数中的常量。默认值:1.0。 - - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 <= scale_fn(x) <= 1;如果该参数被指定,则会忽略`mode`参数。默认值: ``False`` 。 - - **scale_mode** (str,可选) - 'cycle'或者'iterations',表示缩放函数使用`cycle`数或`iterations`数作为输入。 + - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值:triangular。 + - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值:1.0。 + - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略`mode`参数。默认值: ``False`` 。 + - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 From 5c535208fda8fbf89071972a74639053e726a0d5 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Mon, 30 May 2022 18:36:12 +0800 Subject: [PATCH 06/11] test --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index ae1cbb630ea..fd04830378f 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -11,10 +11,7 @@ CyclicLR 相关论文: `Cyclic Learning Rates for Training Neural Networks `_ - 内置了三种学习率缩放策略,分别如下: - 1. **triangular**: 没有任何缩放的三角循环。 - 2. **triangular2**:每个三角循环里将初始幅度缩放一半。 - 3. **exp_range**:每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 +内置了三种学习率缩放策略: 1. **triangular**: 没有任何缩放的三角循环。2. **triangular2**: 每个三角循环里将初始幅度缩放一半。3. **exp_range**: 每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 初始幅度由 `max_learning_rate - base_learning_rate` 定义。同时需要注意CyclicLR应在每次迭代后调用 ``step`` 方法。 From 0ee880e8fa4d3d48b2560d90e07be39745b6b2e9 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Mon, 30 May 2022 20:35:28 +0800 Subject: [PATCH 07/11] test --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index fd04830378f..9e7462bc73d 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -11,7 +11,7 @@ CyclicLR 相关论文: `Cyclic Learning Rates for Training Neural Networks `_ -内置了三种学习率缩放策略: 1. **triangular**: 没有任何缩放的三角循环。2. **triangular2**: 每个三角循环里将初始幅度缩放一半。3. **exp_range**: 每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 +内置了三种学习率缩放策略: **triangular**: 没有任何缩放的三角循环。 **triangular2**: 每个三角循环里将初始幅度缩放一半。 **exp_range**: 每个循环中将初始幅度按照指数函数进行缩放,公式为 :math:`gamma^{iterations}`。 初始幅度由 `max_learning_rate - base_learning_rate` 定义。同时需要注意CyclicLR应在每次迭代后调用 ``step`` 方法。 @@ -24,7 +24,7 @@ CyclicLR - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值:triangular。 - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值:1.0。 - - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略`mode`参数。默认值: ``False`` 。 + - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值: ``False`` 。 - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 From 373d2e8c4b597522bb07f1a5d4211ea5e00f7023 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Wed, 1 Jun 2022 13:45:46 +0800 Subject: [PATCH 08/11] add default value --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index 9e7462bc73d..c00b4a45056 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -3,7 +3,7 @@ CyclicLR ----------------------------------- -.. py:class:: paddle.optimizer.lr.CyclicLR(base_learning_rate, max_learning_rate, step_size_up, step_size_down, mode, exp_gamma, scale_fn, scale_mode, last_epoch, verbose) +.. py:class:: paddle.optimizer.lr.CyclicLR(base_learning_rate, max_learning_rate, step_size_up, step_size_down=None, mode='triangular', exp_gamma=1., scale_fn=None, scale_mode='cycle', last_epoch=-1, verbose=False) 提供一种学习率按固定频率在两个边界之间循环的策略。 @@ -25,13 +25,13 @@ CyclicLR - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值:triangular。 - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值:1.0。 - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值: ``False`` 。 - - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入。 + - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入,。默认值为:cycle。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 返回: :::::::::::: -用于调整学习率的``CyclicLR``实例对象。 +用于调整学习率的 ``CyclicLR`` 实例对象。 代码示例 :::::::::::: From 69e8968e397c05b539dab3b3214f45eb073586a6 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Thu, 2 Jun 2022 08:29:09 +0800 Subject: [PATCH 09/11] change style --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index c00b4a45056..ca139af89db 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -22,10 +22,10 @@ CyclicLR - **max_learning_rate** (float) - 最大学习率,需要注意的是,实际的学习率由 ``base_learning_rate`` 与初始幅度的缩放求和而来,因此实际学习率可能达不到 ``max_learning_rate`` 。 - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。每个循环总的步长 ``step_size`` 由 ``step_size_up + step_size_down`` 定义,论文中建议将 ``step_size`` 设置为单个epoch中步长的3或4倍。 - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 - - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值:triangular。 + - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值为triangular。 - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值:1.0。 - - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值: ``False`` 。 - - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入,。默认值为:cycle。 + - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值为 ``False`` 。 + - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入,。默认值为cycle。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。 From 895636e996854872ead5127a22f7338f73c00e66 Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Thu, 2 Jun 2022 08:31:05 +0800 Subject: [PATCH 10/11] change more --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index ca139af89db..8975779157f 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -23,7 +23,7 @@ CyclicLR - **step_size_up** (int) - 学习率从初始学习率增长到最大学习率所需步数。每个循环总的步长 ``step_size`` 由 ``step_size_up + step_size_down`` 定义,论文中建议将 ``step_size`` 设置为单个epoch中步长的3或4倍。 - **step_size_down** (int,可选) - 学习率从最大学习率下降到初始学习率所需步数。若未指定,则其值默认等于 ``step_size_up`` 。 - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值为triangular。 - - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值:1.0。 + - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值为1.0。 - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值为 ``False`` 。 - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入,。默认值为cycle。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 From 4de27fa45b5768f169b6166bf749e09ff95fec9c Mon Sep 17 00:00:00 2001 From: Asthestarsfalll <1186454801@qq.com> Date: Thu, 2 Jun 2022 08:34:04 +0800 Subject: [PATCH 11/11] fix punctuation error --- docs/api/paddle/optimizer/lr/CyclicLR_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst index 8975779157f..e85b3491f3c 100644 --- a/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst +++ b/docs/api/paddle/optimizer/lr/CyclicLR_cn.rst @@ -25,7 +25,7 @@ CyclicLR - **mode** (str,可选) - 可以是triangular、triangular2或者exp_range,对应策略已在上文描述,当scale_fn被指定时时,该参数将被忽略。默认值为triangular。 - **exp_gamma** (float,可选) - exp_range缩放函数中的常量。默认值为1.0。 - **sacle_fn** (function, 可选) - 一个有且仅有单个参数的函数,且对于任意的输入x,都必须满足0 ≤ scale_fn(x) ≤ 1;如果该参数被指定,则会忽略mode参数。默认值为 ``False`` 。 - - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入,。默认值为cycle。 + - **scale_mode** (str,可选) - cycle或者iterations,表示缩放函数使用cycle数或iterations数作为输入。默认值为cycle。 - **last_epoch** (int,可选) - 上一轮的轮数,重启训练时设置为上一轮的epoch数。默认值为 -1,则为初始学习率。 - **verbose** (bool,可选) - 如果是 ``True`` ,则在每一轮更新时在标准输出 `stdout` 输出一条信息。默认值为 ``False`` 。