未验证 提交 c037d625 编写于 作者: Z Zhen Wang 提交者: GitHub

Update the demo of paddle.grad (#26498)

* update the demo codes of paddle.grad.
上级 c11c83fb
...@@ -375,47 +375,46 @@ def grad(outputs, ...@@ -375,47 +375,46 @@ def grad(outputs,
Examples 1: Examples 1:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
paddle.disable_static()
def test_dygraph_grad(create_graph): def test_dygraph_grad(create_graph):
with fluid.dygraph.guard(): x = paddle.ones(shape=[1], dtype='float32')
x = fluid.layers.ones(shape=[1], dtype='float32') x.stop_gradient = False
x.stop_gradient = False y = x * x
y = x * x
# Since y = x * x, dx = 2 * x
# Since y = x * x, dx = 2 * x dx = paddle.grad(
dx = fluid.dygraph.grad( outputs=[y],
outputs=[y], inputs=[x],
inputs=[x], create_graph=create_graph,
create_graph=create_graph, retain_graph=True)[0]
retain_graph=True)[0]
z = y + dx
z = y + dx
# If create_graph = False, the gradient of dx
# If create_graph = False, the gradient of dx # would not be backpropagated. Therefore,
# would not be backpropagated. Therefore, # z = x * x + dx, and x.gradient() = 2 * x = 2.0
# z = x * x + dx, and x.gradient() = 2 * x = 2.0
# If create_graph = True, the gradient of dx
# If create_graph = True, the gradient of dx # would be backpropagated. Therefore,
# would be backpropagated. Therefore, # z = x * x + dx = x * x + 2 * x, and
# z = x * x + dx = x * x + 2 * x, and # x.gradient() = 2 * x + 2 = 4.0
# x.gradient() = 2 * x + 2 = 4.0
z.backward()
z.backward() return x.gradient()
return x.gradient()
print(test_dygraph_grad(create_graph=False)) # [2.]
print(test_dygraph_grad(create_graph=False)) # [2.]
print(test_dygraph_grad(create_graph=True)) # [4.] print(test_dygraph_grad(create_graph=True)) # [4.]
Examples 2: Examples 2:
.. code-block:: python .. code-block:: python
import paddle.fluid as fluid import paddle
paddle.disable_static()
fluid.enable_dygraph()
def test_dygraph_grad(grad_outputs=None): def test_dygraph_grad(grad_outputs=None):
x = fluid.layers.fill_constant(shape=[1], value=2.0, dtype='float32') x = paddle.fill_constant(shape=[1], value=2.0, dtype='float32')
x.stop_gradient = False x.stop_gradient = False
y1 = x * x y1 = x * x
...@@ -431,27 +430,27 @@ def grad(outputs, ...@@ -431,27 +430,27 @@ def grad(outputs,
# Therefore, the final result would be: # Therefore, the final result would be:
# dx = 2 * x * dy1 + 3 * dy2 = 4 * dy1 + 3 * dy2. # dx = 2 * x * dy1 + 3 * dy2 = 4 * dy1 + 3 * dy2.
dx = fluid.dygraph.grad( dx = paddle.grad(
outputs=[y1, y2], outputs=[y1, y2],
inputs=[x], inputs=[x],
grad_outputs=grad_outputs)[0] grad_outputs=grad_outputs)[0]
return dx.numpy() return dx.numpy()
THREE = fluid.layers.fill_constant(shape=[1], value=3.0, dtype='float32') grad_value = paddle.fill_constant(shape=[1], value=4.0, dtype='float32')
FOUR = fluid.layers.fill_constant(shape=[1], value=4.0, dtype='float32')
# dy1 = [1], dy2 = [1] # dy1 = [1], dy2 = [1]
print(test_dygraph_grad(None)) # [7.] print(test_dygraph_grad(None)) # [7.]
# dy1 = [1], dy2 = [4] # dy1 = [1], dy2 = [4]
print(test_dygraph_grad([None, FOUR])) # [16.] print(test_dygraph_grad([None, grad_value])) # [16.]
# dy1 = [4], dy2 = [1] # dy1 = [4], dy2 = [1]
print(test_dygraph_grad([FOUR, None])) # [19.] print(test_dygraph_grad([grad_value, None])) # [19.]
# dy1 = [3], dy2 = [4] # dy1 = [3], dy2 = [4]
print(test_dygraph_grad([THREE, FOUR])) # [24.] grad_y1 = paddle.fill_constant(shape=[1], value=3.0, dtype='float32')
print(test_dygraph_grad([grad_y1, grad_value])) # [24.]
''' '''
def check_in_out(in_out_list, name): def check_in_out(in_out_list, name):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册