no_grad

查看属性与别名

API属性:命令式编程模式(动态图)

paddle.fluid.dygraph.no_grad ( func=None ) [源代码]

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

也可以用作一个装饰器(确保不要用括号来初始化)。

代码示例

  1. import numpy as np
  2. import paddle.fluid as fluid
  3. # 用作生成器
  4. data = np.array([[2, 3], [4, 5]]).astype('float32')
  5. with fluid.dygraph.guard():
  6. l0 = fluid.Linear(2, 2) # l0.weight.gradient() is None
  7. l1 = fluid.Linear(2, 2)
  8. with fluid.dygraph.no_grad():
  9. # l1.weight.stop_gradient is False
  10. tmp = l1.weight * 2 # tmp.stop_gradient is True
  11. x = fluid.dygraph.to_variable(data)
  12. y = l0(x) + tmp
  13. o = l1(y)
  14. o.backward()
  15. print(tmp.gradient() is None) # True
  16. print(l0.weight.gradient() is None) # False
  17. # 用作装饰器
  18. @fluid.dygraph.no_grad
  19. def test_layer():
  20. with fluid.dygraph.guard():
  21. inp = np.ones([3, 1024], dtype='float32')
  22. t = fluid.dygraph.base.to_variable(inp)
  23. linear1 = fluid.Linear(1024, 4, bias_attr=False)
  24. linear2 = fluid.Linear(4, 4)
  25. ret = linear1(t)
  26. dy_ret = linear2(ret)
  27. test_layer()