Skip to content

Commit ef45bca

Browse files
haowang101779990xsrobin
authored andcommitted
update optimizer cn to 1.5 en official (PaddlePaddle#1062)
1 parent f84af2f commit ef45bca

13 files changed

+1883
-58
lines changed

doc/fluid/api_cn/layers_cn/StaticRNN_cn.rst

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ StaticRNN
77
88
StaticRNN可以处理一批序列数据。每个样本序列的长度必须相等。StaticRNN将拥有自己的参数,如输入、输出和存储器等。请注意,输入的第一个维度表示序列长度,且输入的所有序列长度必须相同。并且输入和输出的每个轴的含义是相同的。
99

10-
**代码示例**
10+
**代码示例**
1111

1212
.. code-block:: python
1313
@@ -42,88 +42,88 @@ StaticRNN可以将多个变量标记为其输出。使用rnn()获取输出序列
4242

4343
.. py:method:: step()
4444
45-
用户在该代码块中定义RNN中的operators。
45+
用户在该代码块中定义RNN中的operators。
4646

4747

4848
.. py:method:: memory(init=None, shape=None, batch_ref=None, init_value=0.0, init_batch_dim_idx=0, ref_batch_dim_idx=1)
4949
50-
为静态RNN创建一个内存变量。
51-
如果init不为None,则此变量将初始化内存。 如果init为None,则必须设置shape和batch_ref,并且此函数将初始化init变量。
50+
为静态RNN创建一个内存变量。
51+
如果init不为None,则此变量将初始化内存。 如果init为None,则必须设置shape和batch_ref,并且此函数将初始化init变量。
5252

53-
参数:
54-
- **init** (Variable|None) - 初始化过的变量,如果没有设置,则必须提供shape和batch_ref,默认值None
55-
- **shape** (list|tuple) - boot memory的形状,注意其不包括batch_size,默认值None
56-
- **batch_ref** (Variable|None) - batch引用变量,默认值None
57-
- **init_value** (float) - boot memory的初始化值,默认值0.0
58-
- **init_batch_dim_idx** (int) - init变量的batch_size轴,默认值0
59-
- **ref_batch_dim_idx** (int) - batch_ref变量的batch_size轴
53+
参数:
54+
- **init** (Variable|None) - 初始化过的变量,如果没有设置,则必须提供shape和batch_ref,默认值None
55+
- **shape** (list|tuple) - boot memory的形状,注意其不包括batch_size,默认值None
56+
- **batch_ref** (Variable|None) - batch引用变量,默认值None
57+
- **init_value** (float) - boot memory的初始化值,默认值0.0
58+
- **init_batch_dim_idx** (int) - init变量的batch_size轴,默认值0
59+
- **ref_batch_dim_idx** (int) - batch_ref变量的batch_size轴
6060

61-
返回:内存变量
61+
返回:内存变量
6262

6363

64-
**代码示例**
64+
**代码示例**
6565

66-
.. code-block:: python
67-
68-
import paddle.fluid as fluid
69-
import paddle.fluid.layers as layers
70-
71-
vocab_size, hidden_size=10000, 200
72-
x = layers.data(name="x", shape=[-1, 1, 1], dtype='int64')
73-
x_emb = layers.embedding(
74-
input=x,
75-
size=[vocab_size, hidden_size],
76-
dtype='float32',
77-
is_sparse=False)
78-
x_emb = layers.transpose(x_emb, perm=[1, 0, 2])
66+
.. code-block:: python
7967
80-
rnn = fluid.layers.StaticRNN()
81-
with rnn.step():
82-
word = rnn.step_input(x_emb)
83-
prev = rnn.memory(shape=[-1, hidden_size], batch_ref = word)
84-
hidden = fluid.layers.fc(input=[word, prev], size=hidden_size, act='relu')
85-
rnn.update_memory(prev, hidden)
68+
import paddle.fluid as fluid
69+
import paddle.fluid.layers as layers
70+
71+
vocab_size, hidden_size=10000, 200
72+
x = layers.data(name="x", shape=[-1, 1, 1], dtype='int64')
73+
x_emb = layers.embedding(
74+
input=x,
75+
size=[vocab_size, hidden_size],
76+
dtype='float32',
77+
is_sparse=False)
78+
x_emb = layers.transpose(x_emb, perm=[1, 0, 2])
79+
80+
rnn = fluid.layers.StaticRNN()
81+
with rnn.step():
82+
word = rnn.step_input(x_emb)
83+
prev = rnn.memory(shape=[-1, hidden_size], batch_ref = word)
84+
hidden = fluid.layers.fc(input=[word, prev], size=hidden_size, act='relu')
85+
rnn.update_memory(prev, hidden)
8686
8787
.. py:method:: step_input(x)
8888
89-
标记作为StaticRNN输入的序列。
89+
标记作为StaticRNN输入的序列。
9090

91-
参数:
92-
- **x** (Variable) – 输入序列,x的形状应为[seq_len, ...]。
91+
参数:
92+
- **x** (Variable) – 输入序列,x的形状应为[seq_len, ...]。
9393

94-
返回:输入序列中的当前时间步长。
94+
返回:输入序列中的当前时间步长。
9595

9696

9797

9898
.. py:method:: step_output(o)
9999
100-
标记作为StaticRNN输出的序列。
100+
标记作为StaticRNN输出的序列。
101101

102-
参数:
103-
-**o** (Variable) – 输出序列
102+
参数:
103+
-**o** (Variable) – 输出序列
104104

105-
返回:None
105+
返回:None
106106

107107

108108
.. py:method:: output(*outputs)
109109
110-
标记StaticRNN输出变量。
110+
标记StaticRNN输出变量。
111111

112-
参数:
113-
-**outputs** – 输出变量
112+
参数:
113+
-**outputs** – 输出变量
114114

115-
返回:None
115+
返回:None
116116

117117

118118
.. py:method:: update_memory(mem, var)
119119
120-
将内存从ex_mem更新为new_mem。请注意,ex_mem和new_mem的形状和数据类型必须相同。
120+
将内存从ex_mem更新为new_mem。请注意,ex_mem和new_mem的形状和数据类型必须相同。
121121

122-
参数:
123-
- **mem** (Variable) – 内存变量
124-
- **var** (Variable) – RNN块中产生的普通变量
122+
参数:
123+
- **mem** (Variable) – 内存变量
124+
- **var** (Variable) – RNN块中产生的普通变量
125125

126-
返回:None
126+
返回:None
127127

128128

129129

doc/fluid/api_cn/optimizer_cn/AdagradOptimizer_cn.rst

Lines changed: 157 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ http://cs231n.github.io/neural-networks-3/#ada 用于维持数值稳定性,避
2424
- **name** - 名称前缀(可选)
2525
- **initial_accumulator_value** (float) - moment累加器的初始值。
2626

27-
**代码示例**
27+
**代码示例**
2828

29-
.. code-block:: python:
29+
.. code-block:: python
3030
3131
import paddle.fluid as fluid
3232
import numpy as np
@@ -45,6 +45,161 @@ http://cs231n.github.io/neural-networks-3/#ada 用于维持数值稳定性,避
4545
feed={"inp": np_inp},
4646
fetch_list=[out.name])
4747
48+
.. py:method:: apply_gradients(params_grads)
49+
50+
为给定的params_grads对附加优化算子,为minimize过程的第二步
51+
52+
参数:
53+
- **params_grads** (list)- 用于优化的(param, grad)对组成的列表
54+
55+
返回: 附加在当前Program的算子组成的列表
56+
57+
返回类型: list
58+
59+
**代码示例**
60+
61+
.. code-block:: python
62+
63+
import paddle.fluid as fluid
64+
loss = network()
65+
optimizer = fluid.optimizer.SGD(learning_rate=0.1)
66+
params_grads = optimizer.backward(loss)
67+
# you may append operations for params_grads here
68+
# ...
69+
optimizer.apply_gradients(params_grads)
70+
71+
72+
.. py:method:: apply_optimize(loss, startup_program, params_grads)
73+
74+
为给定的params_grads对附加优化算子,为minimize过程的第二步。
75+
76+
参数:
77+
- **loss** (Variable) – 用于优化过程的损失值变量
78+
- **startup_program** (Program) – 用于初始化在parameter_list中参数的startup_program
79+
- **params_grads** (list)- 用于优化的(param, grad)对组成的列表
80+
81+
返回: 附加在当前Program的算子组成的列表
82+
83+
返回类型: list
84+
85+
.. py:method:: backward(loss, startup_program=None, parameter_list=None, no_grad_set=None, callbacks=None)
86+
87+
自动做diff来向当前program附加反向算子,为minimize过程的第一步。
88+
89+
参数:
90+
- **loss** (Variable) – 用于优化过程的损失值变量
91+
- **startup_program** (Program) – 用于初始化在parameter_list中参数的startup_program
92+
- **parameter_list** (list) – 待更新的Variables组成的列表
93+
- **no_grad_set** (set|None) – 应该被无视的Variables集合
94+
- **callbacks** (list|None) – 当为某参数附加反向算子时所要运行的callables组成的列表
95+
96+
返回: 附加在当前Program的算子组成的列表
97+
98+
返回类型: list
99+
100+
**代码示例**
101+
102+
详见apply_gradients的示例
103+
104+
105+
.. py:method:: load(stat_dict)
106+
107+
在dygraph模式下,附带学习率衰减来加载优化器。
108+
109+
参数:
110+
- **stat_dict** – load_persistable方法加载的dict
111+
112+
**代码示例**
113+
114+
.. code-block:: python
115+
116+
from __future__ import print_function
117+
import numpy as np
118+
import paddle
119+
import paddle.fluid as fluid
120+
from paddle.fluid.optimizer import SGDOptimizer
121+
from paddle.fluid.dygraph.nn import FC
122+
from paddle.fluid.dygraph.base import to_variable
123+
124+
class MLP(fluid.Layer):
125+
def __init__(self, name_scope):
126+
super(MLP, self).__init__(name_scope)
127+
128+
self._fc1 = FC(self.full_name(), 10)
129+
self._fc2 = FC(self.full_name(), 10)
130+
131+
def forward(self, inputs):
132+
y = self._fc1(inputs)
133+
y = self._fc2(y)
134+
return y
135+
136+
with fluid.dygraph.guard():
137+
mlp = MLP('mlp')
138+
optimizer2 = SGDOptimizer(
139+
learning_rate=fluid.layers.natural_exp_decay(
140+
learning_rate=0.1,
141+
decay_steps=10000,
142+
decay_rate=0.5,
143+
staircase=True))
144+
145+
train_reader = paddle.batch(
146+
paddle.dataset.mnist.train(), batch_size=128, drop_last=True)
147+
148+
for batch_id, data in enumerate(train_reader()):
149+
dy_x_data = np.array(
150+
[x[0].reshape(1, 28, 28) for x in data]).astype('float32')
151+
152+
y_data = np.array([x[1] for x in data]).astype('int64').reshape(
153+
128, 1)
154+
155+
img = to_variable(dy_x_data)
156+
label = to_variable(y_data)
157+
label._stop_gradient = True
158+
cost = mlp(img)
159+
avg_loss = fluid.layers.reduce_mean(cost)
160+
avg_loss.backward()
161+
optimizer.minimize(avg_loss)
162+
mlp.clear_gradients()
163+
fluid.dygraph.save_persistables(
164+
mlp.state_dict(), [optimizer, optimizer2], "save_dir_2")
165+
if batch_id == 2:
166+
break
167+
168+
with fluid.dygraph.guard():
169+
mlp_load = MLP('mlp')
170+
optimizer_load2 = SGDOptimizer(
171+
learning_rate=fluid.layers.natural_exp_decay(
172+
learning_rate=0.1,
173+
decay_steps=10000,
174+
decay_rate=0.5,
175+
staircase=True))
176+
parameters, optimizers = fluid.dygraph.load_persistables(
177+
"save_dir_2")
178+
mlp_load.load_dict(parameters)
179+
optimizer_load2.load(optimizers)
180+
self.assertTrue(optimizer2._learning_rate.__dict__ == optimizer_load2._learning_rate.__dict__)
181+
182+
183+
.. py:method:: minimize(loss, startup_program=None, parameter_list=None, no_grad_set=None, grad_clip=None)
184+
185+
186+
通过更新parameter_list来添加操作,进而使损失最小化。
187+
188+
该算子相当于backward()和apply_gradients()功能的合体。
189+
190+
参数:
191+
- **loss** (Variable) – 用于优化过程的损失值变量
192+
- **startup_program** (Program) – 用于初始化在parameter_list中参数的startup_program
193+
- **parameter_list** (list) – 待更新的Variables组成的列表
194+
- **no_grad_set** (set|None) – 应该被无视的Variables集合
195+
- **grad_clip** (GradClipBase|None) – 梯度裁剪的策略
196+
197+
返回: (optimize_ops, params_grads),分别为附加的算子列表;一个由(param, grad) 变量对组成的列表,用于优化
198+
199+
返回类型: tuple
200+
201+
202+
48203

49204

50205

0 commit comments

Comments
 (0)