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


#112

谢谢 原来还有这种情况。 第二个没研究下去,我觉得会不会到数据量大的时候用take()速度会快点。


#113

请问我为何运行完没有图啊?3.2.1 生成数据集那部分


#114

param[:] = param - lr * param.grad / batch_size
请问这个 param[:] 的 [:] 是为了什么呢


#115

这个应该是为了在param上原地修改,而不是在新的内存上搞。否则它attach_grad就挂了。
不过我想知道为什么不写成 -= 呢,实践中应该是可以的?


#116

重建一个新的


#117
def sgd(params, lr, batch_size):  # 本函数已保存在d2lzh包中方便以后使用
    for param in params:
        param[:] = param - lr * param.grad / batch_size

求问为什么 这个 gradient update的 step size 要除 batch_size
可以详细解释一下这么写背后的逻辑吗?

同一数据集 同一模型
gradient的大小和batch_size的大小的是否有关系 ?


#118

我运行代码的时候出现了以下错误,请问是什么原因?感谢!

raise MXNetError(py_str(_LIB.MXGetLastError()))
MXNetError: [10:49:16] C:\ci\libmxnet_1533398173145\work\src\imperative\imperative.cc:373: Check failed: !AGInfo::IsNone(*i) Cannot differentiate node because it is not in a computational graph. You need to set is_recording to true or use autograd.record() to save computational graphs for backward. If you want to differentiate the same graph twice, you need to pass retain_graph=True to backward.


#119

你可以看一下linear-regression的理论部分
其中批量梯度下降时,param更新方式如下
image
它先是把梯度相加,所以需要除以个batch_size


#120

Screenshot%20from%202019-07-23%2022-51-23
请问权重和bias是如何返回到原函数继续训练的,表示没看懂


#121

这个函数只是更新所有的参数用的;在训练模型的过程中,每个batch都会前向传播一下(尽管这里只有一层),每次向前传播(即计算题y_hat)时,都会用到参数(这里是w和b),这个w,b也就是上一组更新过之后的参数;具体的话还是好好联系模型训练那部分代码结合看一下


#122

导入:
%matplotlib inline
from IPython import display
from matplotlib import pyplot as plt
from mxnet import autograd, nd
import random
报错:
ImportError Traceback (most recent call last)
in ()
----> 1 get_ipython().magic(u’matplotlib inline’)
2 from IPython import display
3 from matplotlib import pyplot as plt
4 from mxnet import autograd, nd
5 import random

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\interactiveshell.pyc in magic(self, arg_s)
2158 magic_name, _, magic_arg_s = arg_s.partition(’ ')
2159 magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2160 return self.run_line_magic(magic_name, magic_arg_s)
2161
2162 #-------------------------------------------------------------------------

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\interactiveshell.pyc in run_line_magic(self, magic_name, line)
2079 kwargs[‘local_ns’] = sys._getframe(stack_depth).f_locals
2080 with self.builtin_trap:
-> 2081 result = fn(*args,**kwargs)
2082 return result
2083

in matplotlib(self, line)

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\magic.pyc in (f, *a, **k)
186 # but it’s overkill for just that one bit of state.
187 def magic_deco(arg):
–> 188 call = lambda f, *a, **k: f(*a, **k)
189
190 if callable(arg):

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\magics\pylab.pyc in matplotlib(self, line)
98 print(“Available matplotlib backends: %s” % backends_list)
99 else:
–> 100 gui, backend = self.shell.enable_matplotlib(args.gui)
101 self._show_matplotlib_backend(args.gui, backend)
102

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\interactiveshell.pyc in enable_matplotlib(self, gui)
2952 “”"
2953 from IPython.core import pylabtools as pt
-> 2954 gui, backend = pt.find_gui_and_backend(gui, self.pylab_gui_select)
2955
2956 if gui != ‘inline’:

C:\ProgramData\Anaconda2\lib\site-packages\IPython\core\pylabtools.pyc in find_gui_and_backend(gui, gui_select)
277 “”"
278
–> 279 import matplotlib
280
281 if gui and gui != ‘auto’:

ImportError: No module named matplotlib
我是按照之前说明配置的,此处为什么还这种报错?请教各位


#123

大佬,我也对这个有疑问,这个例子是懂了,但是后面lstm里面batchsize为什么等于1,如果您知道希望能指教一下。


#124

应该是因为前面 l = loss(xx).mean()有一个mean的原因吧?求平均的时候就除过batch_size了,所以后面不用再除batch_size了。


#125

在求损失函数的时候,有两个疑问:

  1. 为什么要写成 (y_hat - y.reshape(y_hat.shape)) ,numpy的广播运算机制不是可以保证一个数组和一个标量的减法能够自动将标量补充到和数组一样的形状吗?
    2.y_hat是batch_size个数组成的向量,那么最后算损失函数的时候按照定义应该要除以batch_size,否则就是n个误差之和了?

#126

1、其实广播机制生效有一定的前提,首先是两者在其中一个维度上是相同大小的,其次是那个用来广播的矩阵,另一个维度一定是1。之前我做过实验确认过。
2、train_l计算的的确是你说的“n个误差之和”,但没有关系,因为打印出来的时候使用了.mean().asnumpy(),就取了平均值了啊。


#127

谢谢答疑,第二个问题自己没看仔细,不好意思


#128

在 3.2.7. 训练模型的代码中,为什么可以不事先申请存储梯度所需要的内存即attach_grad(),也不会报错呢?

    for X, y in data_iter(batch_size, features, labels):
        with autograd.record():
            l = loss(net(X, w, b), y)  # l是有关小批量X和y的损失
        l.backward()  # 小批量的损失对模型参数求梯度

#129

你再仔细看清楚重新试验下吧。之前申请过了的。


#130

问题的关键在这
min[i:min(i+batch_size,num_examples]

和yield()


#131

这个一直报错