PaddlePaddle自动求导如何成?

摘要:自动求导 在 PaddlePaddle 中使用自动求导来计算导数。 要求:$ f(x)=sin{x} $,绘制 $f(x)$ 和 $dfrac{mathrm{d}f(x)}{mathrm{d}x}$ 的图像,不能使用 $ f&
自动求导 在 PaddlePaddle 中使用自动求导来计算导数。 要求:$ f(x)=\sin{x} $,绘制 \(f(x)\) 和 \(\dfrac{\mathrm{d}f(x)}{\mathrm{d}x}\) 的图像,不能使用 $ f'(x)=\cos{x}$ in[1] import paddle import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = paddle.to_tensor(np.arange(-5, 5, 0.01), dtype="float32", stop_gradient=False) y = paddle.sin(x) paddle.autograd.backward(y) dydx = x.grad x, y, dydx plt.plot(x, y) plt.plot(x, dydx) plt.show() output[1] API backward paddle.autograd.backward(tensors, grad_tensors=None, retain_graph=False) 计算给定的 Tensors 的反向梯度。 参数 tensors (list[Tensor]) – 将要计算梯度的 Tensors 列表。Tensors 中不能包含有相同的 Tensor。 grad_tensors (None|list[Tensor|None],可选) – tensors 的初始梯度值。如果非 None,必须和 tensors 有相同的长度,并且如果其中某一 Tensor 元素为 None,则该初始梯度值为填充 1.0 的默认值;如果是 None,所有的 tensors 的初始梯度值为填充 1.0 的默认值。默认值:None。 retain_graph (bool,可选) – 如果为 False,反向计算图将被释放。如果在 backward()之后继续添加 OP,需要设置为 True,此时之前的反向计算图会保留。将其设置为 False 会更加节省内存。默认值:False。 返回 None 代码示例 import paddle x = paddle.to_tensor([[1, 2], [3, 4]], dtype='float32', stop_gradient=False) y = paddle.to_tensor([[3, 2], [3, 4]], dtype='float32') grad_tensor1 = paddle.to_tensor([[1,2], [2, 3]], dtype='float32') grad_tensor2 = paddle.to_tensor([[1,1], [1, 1]], dtype='float32') z1 = paddle.matmul(x, y) z2 = paddle.matmul(x, y) paddle.autograd.backward([z1, z2], [grad_tensor1, grad_tensor2], True) print(x.grad) #[[12. 18.] # [17. 25.]] x.clear_grad() paddle.autograd.backward([z1, z2], [grad_tensor1, None], True) print(x.grad) #[[12. 18.] # [17. 25.]] x.clear_grad() paddle.autograd.backward([z1, z2]) print(x.grad) #[[10. 14.] # [10. 14.]] grad paddle.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False, no_grad_vars=None) 对于每个 inputs,计算所有 outputs 相对于其的梯度和。 参数 outputs (Tensor|list(Tensor)|tuple(Tensor)) – 用于计算梯度的图的输出变量,或多个输出变量构成的 list/tuple。 inputs (Tensor|list(Tensor)|tuple(Tensor)) - 用于计算梯度的图的输入变量,或多个输入变量构成的 list/tuple。该 API 的每个返回值对应每个 inputs 的梯度。
阅读全文