有一篇论文" Shakeout:规范深度神经网络训练的新方法"可在此处找到:http://ieeexplore.ieee.org/abstract/document/7920425/
本文介绍了一种新的正则化技术,它可以更加功能性地替代丢失层。我正在研究深度学习问题,为此我想实施" Shakeout"技术,但问题是我无法完全理解纸上的实际管道。有太多的数学,我仍然在努力理解。
到目前为止,我已经看到一个基于" Caffe"的开源实现,但我只是深度学习的新实践者,并且只是学习使用CNTK。因此无法开始研究咖啡。 有没有人实施" Shakeout"在cntk? 或者如果有人可以为摇摆提供伪代码? 关于Caffe的Shakeout实现:https://github.com/kgl-prml/shakeout-for-caffe
Github问题:https://github.com/kgl-prml/shakeout-for-caffe/issues/1
答案 0 :(得分: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)])
将在中间创建一个带有抖动图层的双层网络。请注意,我还没有真正尝试过任何真正的问题。