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

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

6 7
**注意:该API仅支持【动态图】模式**

8
.. py:method:: paddle.fluid.dygraph.no_grad(func=None)
Z
zq19 已提交
9

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

12
也可以用作一个装饰器(确保不要用括号来初始化)。
Z
zq19 已提交
13 14 15 16 17 18 19 20 21

**代码示例**

..  code-block:: python


    import numpy as np
    import paddle.fluid as fluid

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
    # 用作生成器
    data = np.array([[2, 3], [4, 5]]).astype('float32')
    with fluid.dygraph.guard():
        l0 = fluid.Linear(2, 2)  # l0.weight.gradient() is None
        l1 = fluid.Linear(2, 2)
        with fluid.dygraph.no_grad():
            # l1.weight.stop_gradient is False
            tmp = l1.weight * 2  # tmp.stop_gradient is True
        x = fluid.dygraph.to_variable(data)
        y = l0(x) + tmp
        o = l1(y)
        o.backward()
        print(tmp.gradient() is None)  # True
        print(l0.weight.gradient() is None)  # False
    
    # 用作装饰器
Z
zq19 已提交
38 39 40
    @fluid.dygraph.no_grad
    def test_layer():
        with fluid.dygraph.guard():
41
            inp = np.ones([3, 1024], dtype='float32')
Z
zq19 已提交
42
            t = fluid.dygraph.base.to_variable(inp)
43 44 45 46
            linear1 = fluid.Linear(1024, 4, bias_attr=False)
            linear2 = fluid.Linear(4, 4)
            ret = linear1(t)
            dy_ret = linear2(ret)
Z
zq19 已提交
47

48
    test_layer()