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


#41

转化为float类型吧


#42

help(trainer.step):
Batch size of data processed. Gradient will be normalized by 1/batch_size.


#43

请问这一节处理的数据是不是比从0开始那节要少很多?每次10个数据就迭代了5次
从0开始那节的data_iter()函数好像每次迭代把1000个数据随机完以后10个10个都拿出来用过一遍?那就是处理了100倍的数据吧:
for i in range(0, num_examples, batch_size):
j = nd.array(idx[i:min(i+batch_size,num_examples)])
yield nd.take(X, j), nd.take(y, j)

但是上一节好像average_loss也没有下降的很快,是我理解的问题吗?


#44

为什么将这里的线性回归的symbol用如下方式封装后,训练结果无法迭代到正确结果哪
model = mx.mod.Module(symbol = symbol, data_names = data_names,
label_names= label_names, context = context)


#45

请问 如何重置模型的参数呢?想改变一些条件,重新训练模型。


#46

net.initialize(default_initializer, force_reinit=True)


#47

我的版本是1.0.0,没这个参数呢。是要最新版本吗?1.1.0?

initialize(self, init=<mxnet.initializer.Uniform object>, ctx=None, verbose=False) method of mxnet.gluon.nn.basic_layers.Sequential instance
Initializes :py:class:Parameter s of this :py:class:Block and its children.


#48

sorry, 应该是net.collect_params().initialize


#49

一个问题是gluon好像并没有指定loss对什么东西求导。loss.backward() 导数存在哪里。 上一讲设定了变量grad的空间所以有指代。这里并没有说明对什么参数求导。


#50


Gluon 中使用 gpu ,结果在一个 data_iter 里跌代的两个变量,一个在 cpu, 一个在 gpu上。这是什么原因呢?


#51

同问,我也一直没想清楚这个问题。小批量的小体现在哪里? epoch到底有啥用呢? 用了batch_size=10, 把1000数据集打乱分成100份,epoch=5, 就是重复5次,每次都把100份遍历了吗? 那大数据集也要从头到尾遍历? 还是说可以从这100份中选择一部分来遍历。


#52

第一个问题,小批量的小体现在哪里,可以看这篇文章https://www.cnblogs.com/pinard/p/5970503.html,重点理解batch_size的含义。第二个问题,是。第三个问题,总体来说数据量越充分越好,设置epoch的目的是通过迭代使结果收敛,如果你发现epoch=4的时候结果就收敛了,说明迭代4次就够了,如果结果没有收敛,就要继续增加epoch


#53

感谢回复,epoch的解释看明白了!!


#54

请问怎么让这个模型在gpu上运行呢?


#55

有同样的疑惑。。


#56

请教 net.initialize 怎么初始化一个shape(5,) [不止w1, w2 两个参数] 的w 呢?


#57

就是求这个数组的所有元素的平均数呀


#58

请问 trainer.step(batch_size) 是否考虑到样本总数不能被 batch_size 整除的情况?如果最后一个批量数量小于 batch_size,那么最终的损失函数便不是对样本的无偏估计了。


#59

l为小批量的损失,trainer.step(batch_size)在更新权重w的时候步幅为learing_rate/batch_size.

如果先求过均值了,那l就是小批量的平均损失, 更新权重的时候就不用再除以batch_size了。

可以试着把learing_rate改小比如0.003,然后迭代次数改大点num_epochs = 10.

对比trainer.step(1)和trainer.step(batch_size), 可以明显观察到前者收敛的更快,因为步幅更大。


#60

有同样的疑问。