线性回归的简洁实现 讨论区


#61

在每一次迭代epoch中,data_iter是否是固定的?data_iter在每次迭代中再随机排序一下是否会更有效?


#62

虽然不会报错,但越界用take会取出来一批含有重复编号最末数据的样本,这样SGD方向就不对了


#63

请问 loss 是怎么传到优化器的呢,通过net.collect.param 还是自动关联的


#64

同问 我也没明白,这里l怎么和net或者trainer里的参数相关联的
for X, y in data_iter:
with autograd.record():
l = loss(net(X), y)
l.backward()
trainer.step(batch_size)
,我觉得l就是一个看效果的输出啊,如果不打印l,只看最终的w,b,程序这样写为啥不行
for X, y in data_iter:
trainer.step(batch_size)


#65

shuffle=True


#66

新版本的 从零开始 那一章中 sgd也考虑了 batch_size

def sgd(params, lr, batch_size):
for param in params:
param[:] = param - lr* param.grad / batch_size


#67

net.initialize(init.Normal(sigma=0.01)) 这个课程里说随机采样于均值为0、标准差为0.01的正态分布。
1)如果我想修改为均值为12,怎么修改。
2)我在mxnet里查不到init.Normal() 的内容,请问怎么搜相关的关键词。谢谢


#68

好像这个方法的参数只有一个,均值恒为0,


#70

我在pycharm查了下源代码,Normal就是设置均值为0的类,只有一个输入参数sigma,我又查了下initializer.py文件,mxnet没有其他的正态分布函数,要么用Normal,要么用Uniform(均匀分布),大概mxnet认为初始化的参数可以随便一点,反正可以通过sgd更新。不过谢谢。


#71

有一个疑问想请教。就是在读取数据的时候,1000个样本,每次batchsize10个,100次完成。
疑问1:为什么每一次读取10个样本都是随即的,而不是100次将样本1000个样本都遍历一次呢?
疑问2:每次都随机遍历,这种方式相比将所有样本全部遍历的方法有什么优点吗?个人觉得如果所有样本都遍历了,训练出的参数会更加的符合所有数据。
谢谢


#72

读取样本,有读取重复元素和不读取重复元素两种选择吧,随机读取,我觉得是整体样本的无偏估计,可能会节约内存?节省时间?不用去寻找内存中的数据


#73

想想你每次打完斗地主是不是要洗牌?不洗的话直接发牌很容易拿到炸弹,火箭之类的好牌,洗完牌就正常多了。这里读取也是如此,不打乱的话不太好


#74

没有l就无法求微分,那就无法更新w,b


#75

没有y.reshape(y_hat.shape)时,


训练得到得损失很大:image

使用了y.reshape(y_hat.shape)时,得到的损失减小很多,这是为什么?image
y_hat 和labels都是n×1的矩阵吧


#76

y_hat的形状是(n,1)
y的形状是(n,)


#77

请问为什么run之后出现了*符号,run的时候出现的之前也是数字,提示run了几次,我自己在cmd里面pip iinstall d2lzh之后就不对了


#78

练习第一题,如果loss取mean(),那么step的时候就不用再平均了,如果硬要平均也没错,只是相当于学习率被缩小了batch_size倍。加大学习率或者训练次数依然可以。


#79

Spyder 运行该代码,出现如下错误:
TypeError: ‘NoneType’ object is not iterable
请问如何解决?谢谢


#80

*号表示正在运行(●°u°●)​


#81

我想请教一下您,在 线性回归从零开始实现 这一节里,在参数初始化之后,必须要给参数(的梯度求取)预分配内存attach_grad(),那么在 简洁实现 这一节里,内存的预分配体现在哪里?我找了nn. Sequential. initialize还有一些别的类、成员函数,并没有找到预分配内存的内容。