no_grad_cn.rst 1.3 KB
Newer Older
Z
zq19 已提交
1 2 3 4 5
.. _cn_api_fluid_dygraph_no_grad:

no_grad
-------------------------------

6

Y
Yang Zhang 已提交
7
.. py:class:: paddle.fluid.dygraph.no_grad
Z
zq19 已提交
8

S
swtkiwi 已提交
9
:api_attr: 命令式编程模式(动态图)
Y
Yang Zhang 已提交
10
:old_api: paddle.fluid.dygraph.no_grad
S
swtkiwi 已提交
11 12


13
创建一个上下文来禁用动态图梯度计算。在此模式下,每次计算的结果都将具有stop_gradient=True。
Z
zq19 已提交
14

Y
Yang Zhang 已提交
15
也可以用作一个装饰器(需要创建实例对象作为装饰器)。
Z
zq19 已提交
16 17 18 19 20 21

**代码示例**

..  code-block:: python

    import numpy as np
22
    import paddle.fluid as fluid
Z
zq19 已提交
23

Y
Yang Zhang 已提交
24 25
    paddle.enable_imperative()

26
    # 用作生成器
Y
Yang Zhang 已提交
27

28
    data = np.array([[2, 3], [4, 5]]).astype('float32')
29 30 31
    l0 = fluid.Linear(2, 2)  # l0.weight.gradient() is None
    l1 = fluid.Linear(2, 2)
    with fluid.no_grad():
Y
Yang Zhang 已提交
32 33
        # l1.weight.stop_gradient is False
        tmp = l1.weight * 2  # tmp.stop_gradient is True
34
    x = fluid.dygraph.to_variable(data)
Y
Yang Zhang 已提交
35 36 37 38 39 40
    y = l0(x) + tmp
    o = l1(y)
    o.backward()
    print(tmp.gradient() is None)  # True
    print(l0.weight.gradient() is None)  # False

41
    # 用作装饰器
42 43

    @fluid.no_grad()
Z
zq19 已提交
44
    def test_layer():
Y
Yang Zhang 已提交
45
        inp = np.ones([3, 1024], dtype='float32')
46 47 48
        t = fluid.dygraph.base.to_variable(inp)
        linear1 = fluid.Linear(1024, 4, bias_attr=False)
        linear2 = fluid.Linear(4, 4)
Y
Yang Zhang 已提交
49 50
        ret = linear1(t)
        dy_ret = linear2(ret)
Z
zq19 已提交
51

52
    test_layer()