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