1

有一篇论文“Shakeout: A New Approach to Regularized Deep Neural Network Training”可以在这里找到: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

4

1 回答 1

1

快速浏览一下纸张,一个密集层与一个shockout层相结合,如下所示:

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)]) 

将创建一个中间有一个shakeout层的两层网络。请注意,我实际上并没有在任何实际问题上尝试过这个。

于 2017-08-17T18:05:38.903 回答