fluid.optimizer

Adadelta

paddle.fluid.optimizer.Adadelta

AdadeltaOptimizer 的别名

Adagrad

paddle.fluid.optimizer.Adagrad

AdagradOptimizer 的别名

AdagradOptimizer

class paddle.fluid.optimizer.AdagradOptimizer(learning_rate, epsilon=1e-06, regularization=None, name=None, initial_accumulator_value=0.0)[源代码]

Adaptive Gradient Algorithm(Adagrad)

更新如下:

\[\begin{split}moment\_out &= moment + grad * grad\\param\_out &= param - \frac{learning\_rate * grad}{\sqrt{moment\_out} + \epsilon}\end{split}\]

原始论文(http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)没有epsilon属性。在我们的实现中也作了如下更新: http://cs231n.github.io/neural-networks-3/#ada 用于维持数值稳定性,避免除数为0的错误发生。

参数:
  • learning_rate (float|Variable)-学习率,用于更新参数。作为数据参数,可以是一个浮点类型值或者有一个浮点类型值的变量
  • epsilon (float) - 维持数值稳定性的短浮点型值
  • regularization - 规则化函数,例如fluid.regularizer.L2DecayRegularizer
  • name - 名称前缀(可选)
  • initial_accumulator_value (float) - moment累加器的初始值。

代码示例

import paddle.fluid as fluid
import numpy as np

np_inp = np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float32)
inp = fluid.layers.data(
    name="inp", shape=[2, 2], append_batch_size=False)
out = fluid.layers.fc(inp, size=3)
out = fluid.layers.reduce_sum(out)
optimizer = fluid.optimizer.Adagrad(learning_rate=0.2)
optimizer.minimize(out)

exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
exe.run(
    feed={"inp": np_inp},
    fetch_list=[out.name])
apply_gradients(params_grads)

为给定的params_grads对附加优化算子,为minimize过程的第二步

参数:
  • params_grads (list)- 用于优化的(param, grad)对组成的列表

返回: 附加在当前Program的算子组成的列表

返回类型: list

代码示例

import paddle.fluid as fluid
loss = network()
optimizer = fluid.optimizer.SGD(learning_rate=0.1)
params_grads = optimizer.backward(loss)
# you may append operations for params_grads here
# ...
optimizer.apply_gradients(params_grads)
apply_optimize(loss, startup_program, params_grads)

为给定的params_grads对附加优化算子,为minimize过程的第二步。

参数:
  • loss (Variable) – 用于优化过程的损失值变量
  • startup_program (Program) – 用于初始化在parameter_list中参数的startup_program
  • params_grads (list)- 用于优化的(param, grad)对组成的列表

返回: 附加在当前Program的算子组成的列表

返回类型: list

backward(loss, startup_program=None, parameter_list=None, no_grad_set=None, callbacks=None)

自动做diff来向当前program附加反向算子,为minimize过程的第一步。

参数:
  • loss (Variable) – 用于优化过程的损失值变量
  • startup_program (Program) – 用于初始化在parameter_list中参数的startup_program
  • parameter_list (list) – 待更新的Variables组成的列表
  • no_grad_set (set|None) – 应该被无视的Variables集合
  • callbacks (list|None) – 当为某参数附加反向算子时所要运行的callables组成的列表

返回: 附加在当前Program的算子组成的列表

返回类型: list

代码示例

详见apply_gradients的示例

load(stat_dict)

在dygraph模式下,附带学习率衰减来加载优化器。

参数:
  • stat_dict – load_persistable方法加载的dict

代码示例

from __future__ import print_function
import numpy as np
import paddle
import paddle.fluid as fluid
from paddle.fluid.optimizer import SGDOptimizer
from paddle.fluid.dygraph.nn import FC
from paddle.fluid.dygraph.base import to_variable

class MLP(fluid.Layer):
    def __init__(self, name_scope):
        super(MLP, self).__init__(name_scope)

        self._fc1 = FC(self.full_name(), 10)
        self._fc2 = FC(self.full_name(), 10)

    def forward(self, inputs):
        y = self._fc1(inputs)
        y = self._fc2(y)
        return y

with fluid.dygraph.guard():
    mlp = MLP('mlp')
    optimizer2 = SGDOptimizer(
        learning_rate=fluid.layers.natural_exp_decay(
        learning_rate=0.1,
        decay_steps=10000,
        decay_rate=0.5,
        staircase=True))

    train_reader = paddle.batch(
            paddle.dataset.mnist.train(), batch_size=128, drop_last=True)

    for batch_id, data in enumerate(train_reader()):
        dy_x_data = np.array(
                [x[0].reshape(1, 28, 28) for x in data]).astype('float32'