【问题标题】:I want to implement a regularization technique "Shakeout" in CNTK我想在 CNTK 中实现正则化技术“Shakeout”
【发布时间】:2017-07-28 03:12:01
【问题描述】:

有一篇论文“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

【问题讨论】:

  • 虽然这是非常有用的信息,但我无法理解您的确切要求。您能否详细说明您的实际问题
  • 我编辑了这个问题来详细说明。关于如何在cntk中实现“Shakeout”的任何方向。

标签: python machine-learning caffe cntk regularized


【解决方案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层的两层网络。请注意,我实际上并没有在任何实际问题上尝试过这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2019-08-24
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多