微分

3 Likes

!pip install matplotlib_inline

发现一个小问题:2.4.1最后画图的代码需要加上d2l.plt.show()才能正常显示图,不加这一句代码则不会显示图,修改处如下所示:

1 Like

链式法则可以直接写。

本节colab-pytorch链接打开后提示无访问权限,点击跳转到github原文件页面后提示分支不存在重定向到主分支。修改跳转链接

中的master->main后解决,但此节之前的notebook都能直接打开。很奇怪。(环境:WIN10 Chrome,Google Drive账号已登录状态)


换了另一台电脑(MBP Chrome,其他设定一致)不能复现此问题。

确实如此,不加这个不会显示。我是使用PyCharm运行程序的

1.第一题用了自己写的方法实现,代码如下:
import matplotlib.pyplot as plt
import torch
X = torch.arange(0.5,3,0.01)
fig,ax = plt.subplots()
def get_y(x):
** return x3 - 1/x
y1 = get_y(X)
def get_y_grad(x):
** return 4*(x-1)**
y2 = get_y_grad(X)
ax.plot(X,y1,label=“y_function”)
ax.plot(X,y2,label=“y_grad”)
ax.set_xlabel(“x Label”)
ax.set_ylabel(“y Label”)
ax.set_title(“xxxx”)
ax.legend()
plt.show()
2.梯度为[3*(x1)^2,5*e^(x2)]
3.梯度为 (X中的所有元素的平方和)*X
4.链式求导为下图:
pic4

1 Like

第3题应该是 X的L2范数的倒数 * X ;(这里订正一下)

我有一个疑问 2.4.6的第一个练习题中的f(x) = x3 - 1/x 的求导,为什么是 4x - 4 而不是 3x2 + x**(-2)?

对不起我🧠学糊了,明白了

我也觉得求导是 3x 2 + x**(-2),为啥呀

求导没有错的,但是题目问的是切线。
导数算出来目标的斜率值就是4,然后代入(1,1)这个点,进而可以得到 y = 4*x - 4这条切线。

Thank you very very much ! Bro!

他这里给的答案的x_2指的是下标。。。。

基本是对的,你这是梯度的第i个分量,n个这样的分量组成一个向量就是最终要的标量

他这个是用的jupyter notebook,所以这样写,如果用py文件的话显示方式有点区别

第一题plot(x,[f(x),x ** 3 - (x ** -1)],‘x’,‘f(x)’,legend=[‘f(x)’,‘Tangent line (x=1)’])这样写为什么是错的。和范例相比只是改了实现的函数。不能通过该函数直接绘制切线吗,我看有些直接另外把切线方程写出来,再实现切线的绘制。

你应该重新定义f(x),其中[f(x),x ** 3 - (x ** -1)]右侧应为切线函数。

为什么你们的 根号x分之1的导数,不是负的2倍根号下x的立方分之一,没有负号吗

求导是df(x)=3x^2+x^(-2),可以得到x=1时的斜率是4,那么这条切线方程必然是y=4x+b。当x=1时f(x)=0,切线也经过这一点,代入这个坐标0=41+b,b可以得到是4,所以切线方程是y=4x-4。

恩,完整的应该先定义一个新的函数g(x)出来,然后再绘制

def g(x):
  return x**3-1/x

x = np.arange(0.1, 3, 0.1)
plot(x, [g(x), 4x-4], 'x', 'g(x)', legend=['g(x)', 'Tangent line(x=1)'])