如何在Theano中编写自定义池模块?

时间:2015-12-21 22:48:26

标签: python theano deep-learning

我是Theano的新手,我尝试学习Theano的源代码。但是,MaxPooling上的Theano实施完全让我感到困惑。特别是,在它的pooling的grad定义中,它适用于另一个MaxPoolGrad,而这个MaxPoolGrad的grad方法更适用于DownsampleFactorMaxGradGrad。

有谁能解释我为什么Theano必须深入实现这个渐变功能?如果我错了,请纠正我:假设(2,2)max-pooling,我认为我们需要做的就是从gz计算gx(参见下面的grad def),即通过将gz扩展到x来获得x的梯度x的形状仅将gz元素填充到那些gx元素,这些元素的对应x元素在(2,2)邻域中最大。

def grad(self, inp, grads):
    x, = inp
    gz, = grads
    if self.mode == 'max':
        maxout = self(x)
        return [MaxPoolGrad(self.ds,
                            ignore_border=self.ignore_border,
                            st=self.st, padding=self.padding)(
                                x, maxout, gz)]

0 个答案:

没有答案