有一篇论文“Shakeout:正则化深度神经网络训练的新方法”,可以在这里找到:http://ieeexplore.ieee.org/abstract/document/7920425/
本文介绍了一种新的正则化技术,它可以以更实用的方式替换 dropout 层。我正在研究一个深度学习问题,为此我想实现“Shakeout”技术,但问题是我无法完全理解论文中的实际流程。有太多的数学知识我仍然难以理解。
到目前为止,我已经看到了一个基于“Caffe”的开源实现,但我只是一个深度学习的新实践者,刚刚学习使用 CNTK。所以不可能开始在caffe上工作。 有人在cntk中实现了“Shakeout”吗? 或者是否有人可以提供用于淘汰的伪代码? Caffe 上的 Shakeout 实现:https://github.com/kgl-prml/shakeout-for-caffe
Github问题:https://github.com/kgl-prml/shakeout-for-caffe/issues/1
最佳答案
快速浏览一下纸张,致密层与落砂层相结合,如下所示:
def DenseWithShakeout(rate, c, outputs):
weights = C.parameter((C.InferredDimension, outputs), init=C.glorot_uniform())
bias = C.parameter(outputs)
def shakeout(x):
r = C.dropout(x, rate)
signs = weights/C.abs(weights) # one day CNTK should add an actual sign operation
return C.times(r, weights) + c * C.times(r - x, signs) + bias
return shakeout
这可以在 C.layers.Sequential()
语句中使用,例如
model = C.layers.Sequential([Dense(0.2, 1, 100), DenseWithShakeout(10)])
将创建一个两层网络,中间有一个抖落层。请注意,我实际上并没有在任何实际问题上尝试过这个。
关于python - 我想在 CNTK 中实现正则化技术 "Shakeout",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364259/