题目:
使f(x)=sin(x),绘制f(x)和df(x)/dx的图像,其中后者不使用f′(x)=cos(x)
import torch
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x=np.linspace(-3*np.pi,3*np.pi,256) #创建x轴
x1=torch.tensor(x,requires_grad=True) #根据x坐标取点组成一个向量
y1=torch.sin(x1) #注意函数的格式
u=y1.detach() #u是用于后面绘制sin(x)图像的
y1.sum().backward()
x1.grad #常规求梯度
这里使用绘图命令的时候要注意,由于y1是求过梯度的,因此使用plt.plot(x,y1)会报错的,应该使用下方的命令
个人理解,x1.grad其实表示的是对于x1求梯度的意思,而之前定义变量的时候,已经标注好了x1与y1的关系。
plt.plot(x,u,color='red',linewidth=1.5)
plt.plot(x,x1.grad,color='blue',linewidth=1.5)
plt.show()
最后绘图结果:
参考了其他人的作业代码:自动求导 - #7 by hc_Tu - pytorch - D2L Discussion