线性回归的从零开始实现 讨论区

请问老师,我这个d2lzh不见在前面章节有保存啊

不知怎么操作

后面那个 In:是怎么回事啊?

原地修改:直接修改param的内容,param指向原对象
而一般的操作是生成新内容,再用param引用,param指向新对象

你好我也遇到这个错误,请问你的问题解决了吗?

解决了,我系统中安装了python2和python3,安装库的时候,环境没切换,所以他找不到库,你把这个库,安装在对应的环境下就好了

是进入gluon环境之后在进行安装是吧,谢谢了我也解决了

labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
请问这里为什么要这样写, 这个结果就是矩阵相乘的结果吧?

def squared_loss(y_hat, y): # 本函数已保存在d2lzh包中方便以后使用
return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2
这里是一次小批量的总误差吗?一次挑了10个数据

param[:] = param - lr * param.grad / batch_size
梯度是不是可以理解为 一个函数的导函数?
如果一个函数固定,那么他的导函数就是固定的.
那么在X轴上的导数值也是固定的
这个平均的含义是什么?

我肯定哪里理解错误,请大神救赎

第四步的散点图有时候能显示,有时候报错

AttributeError Traceback (most recent call last)
in
8 plt.rcParams[‘figure.figsize’] = figsize
9
—> 10 set_figsize()
11 plt.scatter(features[:, 1].asnumpy(), labels.asnumpy(), 1); # 加分号只显示图

in set_figsize(figsize)
4
5 def set_figsize(figsize=(3.5, 2.5)):
----> 6 use_svg_display()
7 # 设置图的尺寸
8 plt.rcParams[‘figure.figsize’] = figsize

in use_svg_display()
1 def use_svg_display():
2 # 用矢量图显示
----> 3 display.set_matplotlib_formats(‘svg’)
4
5 def set_figsize(figsize=(3.5, 2.5)):

AttributeError: ‘function’ object has no attribute ‘set_matplotlib_formats’

应该怎么解决?

想问下这里 l.backward() 就是对 image 这个函数求偏导,也就是梯度。那下面的param.grad 是对这个求出来的每个偏导进行引用?

你这个不是沿着梯度方向减少loss了,w1,w2,b构成的loss函数,他们的lr要一样,才是梯度,如果不一样,就相当于沿着别的方向下降,当然不收敛了,取不到局部最小值。

有大神能帮忙解惑么?
features = nd.random.normal(scale=1, shape=(num_examples, num_inputs))
labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
labels += nd.random.normal(scale=0.01, shape=labels.shape)
这个代码应该是生成随机的features和labels,但是为什么features[0]和labels[0]每次运行打印的结果都一样涅?而且和教程的值是一样的,难道不是随机的么?

1赞

请问这个错误怎么解决
MXNetError: [17:14:01] C:\Jenkins\workspace\mxnet-tag\mxnet\src\imperative\imperative.cc:203: Check failed: AGInfo::IsNone(*output): Assigning to NDArrays that are already in a computational graph will cause undefined behavior when evaluating gradients. Please call backward first to clear the graph or do this out side of a record section. Also note that you cannot use inplace operations like +=, *=, relu(x, out=x), y[idx]=x, etc inside a record section.

电脑生成的随机数都是通过随机数算法生成的伪随机数,这一般需要一个基数,一般用现在电脑的时间作为基数。我试了一下,在一次里生成的数值是一样的,如果重新启动程序的话会生成不同的数值,那大概是启动程序时基数就被固定好了,重新启动程序时会生成一个新的基数吧(个人推断,仅供参考)

请问书中小批量梯度下降中,需要进行|B|次累加后再除以|B|以得到平均值, 代码中我怎么没看到有累加这个操作?只有除以batch_size的操作。param[:] = param - lr * param.grad / batch_size。谢谢大家。

好吧,我看到了3.2.7章说了:由于变量l并不是一个标量,运行l.backward()将对l中元素求和得到的新变量,再求该变量有关模型的参数的梯度。

w = nd.random.normal(scale=0.01, shape=(num_inputs, 1))
这个w不是有两个参数吗?为为什么初始化shape是shape=(num_inputs, 1),而不是shape=(num_inputs, 2)

你这个‘range’少个e,输入都错了

1赞