在梯度更新的时候,使用了一个clear_grad函数,当时在想,如果没有清空梯度会怎么样(其实我主要是想了解损失函数是怎么backforward的,但是那个代码调试到
core.dygraph_run_backward([self], [grad_tensor],
retain_graph,
framework._dygraph_tracer())
就不知道后面说的啥了,不过在这个文件里面有对清空梯度的解释:
The new gradient will accumulat on previous gradient.
You can clear gradient by ``Tensor.clear_grad()`` .
这里面就是说如果不把之前的清空就会一直累加
顺便还有例子,体会一下:
Examples:
.. code-block:: python
import paddle
x = paddle.to_tensor(5., stop_gradient=False)
for i in range(5):
y = paddle.pow(x, 4.0)
y.backward()
print("{}: {}".format(i, x.grad))
# 0: [500.]
# 1: [1000.]
# 2: [1500.]
# 3: [2000.]
# 4: [2500.]
x.clear_grad()
print("{}".format(x.grad))
# 0.
grad_tensor=paddle.to_tensor(2.)
for i in range(5):
y = paddle.pow(x, 4.0)
y.backward(grad_tensor)
print("{}: {}".format(i, x.grad))
# 0: [1000.]
# 1: [2000.]
# 2: [3000.]
# 3: [4000.]
# 4: [5000.]
"""