丢弃法 讨论区


#21

课件里dropout说是以0.5的概率扔掉了一半的节点之后,这些节点的输出要被double。如果这样子,那么最后test的时候即使是所有节点都有输出,但是我们不需要把所有节点的输出再变为一半。
另一种说法是0.5的概率扔掉了一半的节点之后,这些节点的输出不变(理论上来讲train的weight要被double),最后test的时候所有节点输出,但是输出值要变为一半。
请问这两种做法是否等价。


#22

请问nd.random.uniform(..., ctx=X.context)的context是怎么回事?能解释一下吗?


#23

这个看文档nd.array.context是指数组的运行设备(CPU)信息的。你可以在文档搜一下context看看,或者新建一个数组X,运行X.content看看.
这里的ctx我个人理解应该是新建在哪个设备(CPU, GPU)上。


#24

@lgqfhwy 回答的是对的,感谢!

这里有一些更详细的解释
http://zh.gluon.ai/chapter_gluon-basics/use-gpu.html


#25

个人猜测,这两种做法基本等价,但是实际中应该更倾向于使用第一种在训练的时候进行数值调整吧,因为在predict阶段做数值调整对个例的影响可能比在训练的时候用mini-batch个训练数据做数值调整要大,还有就是采用反向dropout,无论在训练的时候是否使用dropout,predict的代码都可以不用改变啊。


#26

不是很理解为什么说“使用dropout的神经网络实质上是对输入层和隐含层的参数做正则化”,请问可以更详细地解释一下吗?


#27

@gca @NodYoung @miniyk2012 @lonelykid @ghk291752361 @gaunthan @Mlpwudi @Elaine

谢谢大家的反馈意见。

刚刚修订了这一节,
http://zh.gluon.ai.s3-website-us-west-2.amazonaws.com/chapter_supervised-learning/dropout-scratch.html

现在的解释还有哪里不清楚的嘛?


#28

为什么之前几次包括这次的代码运行出来的test_acc都是10%左右,前几节的实验也是,我的gluonbook是通过pip安装的,和这个有关系吗?望指点
image


#29

应该和gluonbook没关系,你再跑一次呢?


#30

再跑还是这个样子,test_acc一直维持10%左右,并且不止本章的这个例子会出现这种问题,前几个章节的例子也会出现这种问题,感觉很迷


#31

我这里跑倒还好。会不会是fashion mnist的数据集需要重新下载一下


#32

会不会是数据集读取的问题,我这里可能是因为网络问题我把fashion-mnist数据集改成读取本地的数据集,数据集下载自github


#33

可以试着把本地的删了,重新下载试试

https://zh.gluon.ai/chapter_prerequisite/install.html
里提到:

第五步(可选项),如果你是国内用户,建议使用国内Gluon镜像加速数据集和预训练模型的下载。Linux/macOS用户可以运行下面命令。

MXNET_GLUON_REPO=https://apache-mxnet.s3.cn-north-1.amazonaws.com.cn/ jupyter notebook
Windows用户可以运行下面命令。

set MXNET_GLUON_REPO=https://apache-mxnet.s3.cn-north-1.amazonaws.com.cn/ jupyter notebook


#34

可以了,感谢


#35

请问沐神,为什么不直接以固定比例来丢弃神经元而是用对每个神经的概率来丢弃。
如果用概率0.5来dropout,每次丢弃的神经元个数不一定为一半(是随机数)。
如果用比例为0.5来dropout,每次丢弃的神经元个数一定为一半,这样对输出rescale 1 / 0.5 的也更能保证 E[dropout(X)] == X。


#36

我猜测不利于并行实现吧。因为需要计个数啥的。


#37

我是这样理解这个问题的,网络原本的输出应该是X,使用dropout实际上是给输出增加了一个均值为0的Noise,而Noise的方差则是与丢弃的神经元个数正相关。按概率来丢弃和按比例来丢弃都可以增加Noise的方差,两种处理都是可以的,都可以保证E[dropout(X)] == X,不过按概率丢弃的方差会更大而已。


#38

您给的链接进不去,这个可以用http://zh.gluon.ai/chapter_deep-learning-basics/dropout.html?highlight=drop


#39

最早版本,训练和测试都使用dropout:
Epoch 0. Loss: 1.213439, Train acc 0.528579, Test acc 0.743189
Epoch 1. Loss: 0.597863, Train acc 0.777694, Test acc 0.816506
Epoch 2. Loss: 0.508313, Train acc 0.813051, Test acc 0.833834
Epoch 3. Loss: 0.457635, Train acc 0.834135, Test acc 0.843049
Epoch 4. Loss: 0.429220, Train acc 0.842131, Test acc 0.839042
修改过后的,训练使用dropout,测试阶段不使用:
Epoch 0. Loss: 1.118567, Train acc 0.563952, Test acc 0.779247
Epoch 1. Loss: 0.577146, Train acc 0.784756, Test acc 0.826823
Epoch 2. Loss: 0.490189, Train acc 0.821464, Test acc 0.853365
Epoch 3. Loss: 0.441106, Train acc 0.837190, Test acc 0.861278
Epoch 4. Loss: 0.415854, Train acc 0.847923, Test acc 0.853265
感觉效果能好一点.

社区的小伙伴们很给力,今天又学到一点东西.


#40

dropout之后还好,一旦加上L2,立马准确率在10%左右,这是怎么回事?各位