提交 b18dbc67 编写于 作者: W Wang Huan

modify doc for Layer, test=develop

上级 09f19532
...@@ -62,10 +62,6 @@ class HookRemoveHelper(object): ...@@ -62,10 +62,6 @@ class HookRemoveHelper(object):
class Layer(core.Layer): class Layer(core.Layer):
""" """
:alias_main: paddle.nn.Layer
:alias: paddle.nn.Layer
:old_api: paddle.fluid.dygraph.layers.Layer
Dynamic graph Layer based on OOD, includes the parameters of the layer, the structure of the forward graph and so on. Dynamic graph Layer based on OOD, includes the parameters of the layer, the structure of the forward graph and so on.
Parameters: Parameters:
...@@ -149,9 +145,7 @@ class Layer(core.Layer): ...@@ -149,9 +145,7 @@ class Layer(core.Layer):
import paddle import paddle
import paddle.nn as nn import paddle.nn as nn
paddle.disable_static()
net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2)) net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))
def init_weights(layer): def init_weights(layer):
...@@ -197,34 +191,33 @@ class Layer(core.Layer): ...@@ -197,34 +191,33 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
import numpy as np import numpy as np
# the forward_post_hook change the output of the layer: output = output * 2
def forward_post_hook(layer, input, output):
# user can use layer, input and output for information statistis tasks
# change the output
return output * 2
# the forward_post_hook change the output of the layer: output = output * 2 linear = paddle.nn.Linear(13, 5)
def forward_post_hook(layer, input, output):
# user can use layer, input and output for information statistis tasks
# change the output # register the hook
return output * 2 forward_post_hook_handle = linear.register_forward_post_hook(forward_post_hook)
with fluid.dygraph.guard(): value1 = np.arange(26).reshape(2, 13).astype("float32")
linear = fluid.Linear(13, 5, dtype="float32") in1 = paddle.to_tensor(value1)
# register the hook out0 = linear(in1)
forward_post_hook_handle = linear.register_forward_post_hook(forward_post_hook)
value1 = np.arange(26).reshape(2, 13).astype("float32")
in1 = fluid.dygraph.to_variable(value1)
out0 = linear(in1)
# remove the hook
forward_post_hook_handle.remove()
out1 = linear(in1) # remove the hook
forward_post_hook_handle.remove()
# hook change the linear's output to output * 2, so out0 is equal to out1 * 2. out1 = linear(in1)
assert (out0.numpy() == (out1.numpy()) * 2).any()
# hook change the linear's output to output * 2, so out0 is equal to out1 * 2.
assert (out0.numpy() == (out1.numpy()) * 2).any()
""" """
hook_remove_helper = HookRemoveHelper(self._forward_post_hooks) hook_remove_helper = HookRemoveHelper(self._forward_post_hooks)
self._forward_post_hooks[hook_remove_helper._hook_id] = hook self._forward_post_hooks[hook_remove_helper._hook_id] = hook
...@@ -249,36 +242,35 @@ class Layer(core.Layer): ...@@ -249,36 +242,35 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
import numpy as np import numpy as np
# the forward_post_hook change the input of the layer: input = input * 2 # the forward_post_hook change the input of the layer: input = input * 2
def forward_pre_hook(layer, input): def forward_pre_hook(layer, input):
# user can use layer and input for information statistis tasks # user can use layer and input for information statistis tasks
# change the input # change the input
input_return = (input[0] * 2) input_return = (input[0] * 2)
return input_return return input_return
with fluid.dygraph.guard(): linear = paddle.nn.Linear(13, 5)
linear = fluid.Linear(13, 5, dtype="float32")
# register the hook # register the hook
forward_pre_hook_handle = linear.register_forward_pre_hook(forward_pre_hook) forward_pre_hook_handle = linear.register_forward_pre_hook(forward_pre_hook)
value0 = np.arange(26).reshape(2, 13).astype("float32") value0 = np.arange(26).reshape(2, 13).astype("float32")
in0 = fluid.dygraph.to_variable(value0) in0 = paddle.to_tensor(value0)
out0 = linear(in0) out0 = linear(in0)
# remove the hook # remove the hook
forward_pre_hook_handle.remove() forward_pre_hook_handle.remove()
value1 = value0 * 2 value1 = value0 * 2
in1 = fluid.dygraph.to_variable(value1) in1 = paddle.to_tensor(value1)
out1 = linear(in1) out1 = linear(in1)
# hook change the linear's input to input * 2, so out0 is equal to out1. # hook change the linear's input to input * 2, so out0 is equal to out1.
assert (out0.numpy() == out1.numpy()).any() assert (out0.numpy() == out1.numpy()).any()
""" """
hook_remove_helper = HookRemoveHelper(self._forward_pre_hooks) hook_remove_helper = HookRemoveHelper(self._forward_pre_hooks)
self._forward_pre_hooks[hook_remove_helper._hook_id] = hook self._forward_pre_hooks[hook_remove_helper._hook_id] = hook
...@@ -366,16 +358,15 @@ class Layer(core.Layer): ...@@ -366,16 +358,15 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
fc1 = paddle.nn.Linear(10, 3)
fc2 = paddle.nn.Linear(3, 10, bias_attr=False)
model = paddle.nn.Sequential(fc1, fc2)
with fluid.dygraph.guard(): layer_list = list(model.children())
fc1 = fluid.Linear(10, 3)
fc2 = fluid.Linear(3, 10, bias_attr=False)
model = fluid.dygraph.Sequential(fc1, fc2)
layer_list = list(model.children())
print(layer_list) print(layer_list)
""" """
for _, layer in self.named_children(): for _, layer in self.named_children():
...@@ -391,14 +382,13 @@ class Layer(core.Layer): ...@@ -391,14 +382,13 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard(): fc1 = paddle.nn.Linear(10, 3)
fc1 = fluid.Linear(10, 3) fc2 = paddle.nn.Linear(3, 10, bias_attr=False)
fc2 = fluid.Linear(3, 10, bias_attr=False) model = paddle.nn.Sequential(fc1, fc2)
model = fluid.dygraph.Sequential(fc1, fc2) for prefix, layer in model.named_children():
for prefix, layer in model.named_children(): print(prefix, layer)
print(prefix, layer)
""" """
memo = set() memo = set()
...@@ -438,14 +428,13 @@ class Layer(core.Layer): ...@@ -438,14 +428,13 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard(): fc1 = paddle.nn.Linear(10, 3)
fc1 = fluid.Linear(10, 3) fc2 = paddle.nn.Linear(3, 10, bias_attr=False)
fc2 = fluid.Linear(3, 10, bias_attr=False) model = paddle.nn.Sequential(fc1, fc2)
model = fluid.dygraph.Sequential(fc1, fc2) for name, param in model.named_parameters():
for name, param in model.named_parameters(): print(name, param)
print(name, param)
""" """
params_set = set() params_set = set()
...@@ -483,14 +472,13 @@ class Layer(core.Layer): ...@@ -483,14 +472,13 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard(): fc1 = paddle.nn.Linear(10, 3)
fc1 = fluid.Linear(10, 3) fc2 = paddle.nn.Linear(3, 10, bias_attr=False)
fc2 = fluid.Linear(3, 10, bias_attr=False) model = paddle.nn.Sequential(fc1, fc2)
model = fluid.dygraph.Sequential(fc1, fc2) for prefix, layer in model.named_sublayers():
for prefix, layer in model.named_sublayers(): print(prefix, layer)
print(prefix, layer)
""" """
if layers_set is None: if layers_set is None:
...@@ -536,16 +524,15 @@ class Layer(core.Layer): ...@@ -536,16 +524,15 @@ class Layer(core.Layer):
.. code-block:: python .. code-block:: python
import numpy as np import numpy as np
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard(): linear = paddle.nn.Linear(10, 3)
linear = fluid.Linear(10, 3) value = np.array([0]).astype("float32")
value = np.array([0]).astype("float32") buffer = paddle.to_tensor(value)
buffer = fluid.dygraph.to_variable(value) linear.register_buffer("buf_name", buffer, persistable=True)
linear.register_buffer("buf_name", buffer, persistable=True)
# get the buffer by attribute.
# get the buffer by attribute. print(linear.buf_name)
print(linear.buf_name)
""" """
...@@ -609,25 +596,24 @@ class Layer(core.Layer): ...@@ -609,25 +596,24 @@ class Layer(core.Layer):
.. code-block:: python .. code-block:: python
import numpy as np import numpy as np
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard(): fc1 = paddle.nn.Linear(10, 3)
fc1 = fluid.Linear(10, 3) buffer1 = paddle.to_tensor(np.array([0]).astype("float32"))
buffer1 = fluid.dygraph.to_variable(np.array([0]).astype("float32")) # register a variable as buffer by specific `persistable`
# register a variable as buffer by specific `persistable` fc1.register_buffer("buf_name_1", buffer1, persistable=True)
fc1.register_buffer("buf_name_1", buffer1, persistable=True)
fc2 = fluid.Linear(3, 10) fc2 = paddle.nn.Linear(3, 10)
buffer2 = fluid.dygraph.to_variable(np.array([1]).astype("float32")) buffer2 = paddle.to_tensor(np.array([1]).astype("float32"))
# register a buffer by assigning an attribute with Variable. # register a buffer by assigning an attribute with Variable.
# The `persistable` can only be False by this way. # The `persistable` can only be False by this way.
fc2.buf_name_2 = buffer2 fc2.buf_name_2 = buffer2
model = fluid.dygraph.Sequential(fc1, fc2) model = paddle.nn.Sequential(fc1, fc2)
# get all named buffers # get all named buffers
for name, buffer in model.named_buffers(): for name, buffer in model.named_buffers():
print(name, buffer) print(name, buffer)
""" """
buffers_set = set() buffers_set = set()
...@@ -654,19 +640,18 @@ class Layer(core.Layer): ...@@ -654,19 +640,18 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
import numpy as np import numpy as np
with fluid.dygraph.guard(): value = np.arange(26).reshape(2, 13).astype("float32")
value = np.arange(26).reshape(2, 13).astype("float32") a = paddle.to_tensor(value)
a = fluid.dygraph.to_variable(value) linear = paddle.nn.Linear(13, 5)
linear = fluid.Linear(13, 5, dtype="float32") adam = paddle.optimizer.Adam(learning_rate=0.01,
adam = fluid.optimizer.Adam(learning_rate=0.01, parameters=linear.parameters())
parameter_list=linear.parameters()) out = linear(a)
out = linear(a) out.backward()
out.backward() adam.minimize(out)
adam.minimize(out) linear.clear_gradients()
linear.clear_gradients()
""" """
for p in self.parameters(): for p in self.parameters():
...@@ -918,12 +903,12 @@ class Layer(core.Layer): ...@@ -918,12 +903,12 @@ class Layer(core.Layer):
Examples: Examples:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
with fluid.dygraph.guard():
emb = fluid.dygraph.Embedding([10, 10]) emb = paddle.nn.Embedding(10, 10)
state_dict = emb.state_dict() state_dict = emb.state_dict()
fluid.save_dygraph( state_dict, "paddle_dy") paddle.save( state_dict, "paddle_dy")
''' '''
...@@ -967,16 +952,12 @@ class Layer(core.Layer): ...@@ -967,16 +952,12 @@ class Layer(core.Layer):
.. code-block:: python .. code-block:: python
import paddle import paddle
paddle.disable_static()
emb = paddle.nn.Embedding(10, 10) emb = paddle.nn.Embedding(10, 10)
state_dict = emb.state_dict() state_dict = emb.state_dict()
paddle.save(state_dict, "paddle_dy.pdparams") paddle.save(state_dict, "paddle_dy.pdparams")
para_state_dict = paddle.load("paddle_dy.pdparams") para_state_dict = paddle.load("paddle_dy.pdparams")
emb.set_state_dict(para_state_dict) emb.set_state_dict(para_state_dict)
''' '''
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册