公式
y ( z ) = x 2 e x , . y(z) = x^{2}e^{x},. y(z)=x2ex,.
y
′
=
2
x
e
x
+
x
2
e
x
,
.
y^{'}= 2xe^{x}+x^{2}e^{x},.
y′=2xex+x2ex,.
一般可以手动计算出导数的可导函数,可以手动求导。
学习torch,掌握tensor,autograd,Variable,nn,nn.Module,loss,optim,Dataset是关键。自动微分是深度学习得以实现的关键。下面将模拟实现函数的求导功能。
- 定义函数;
- 定义导函数。
code实现
import torch as t
from torch.autograd import Variable as V
def fn(x):
y = x**2*t.exp(x)
return y
def grad_fn(x):
"""手动求导"""
dx = 2*x*t.exp(x) + x**2*t.exp(x)
return dx
# 测试
x = V(t.randn(3,4),requires_grad=True)
y = fn(x)
# 输出求导结果
print(grad_fn(x))
"""
tensor([[ 0.1414, 0.1452, 11.5258, -0.2398],
[ 1.0525, 10.6380, 3.0432, -0.3667],
[-0.3050, -0.0358, -0.3827, -0.4155]], grad_fn=<AddBackward0>)
"""
# torch.autograd自动求导时,执行
y.backward(t.ones(y.size()))
print(x.grad)
"""
tensor([[ 0.1414, 0.1452, 11.5258, -0.2398],
[ 1.0525, 10.6380, 3.0432, -0.3667],
[-0.3050, -0.0358, -0.3827, -0.4155]])
"""
参考书:《深度学习框架PyTorch:入门与实践 》_陈云(著)