我想设计一个深度网络,其顶部有一个(或多个)卷积层(CNN)和一个或多个完全连接的隐藏层。
对于具有完全连接层的深度网络,theano 中有一些方法可以进行无监督预训练,例如,使用去噪自动编码器 http://www.deeplearning.net/tutorial/SdA.html or RBMs http://www.deeplearning.net/tutorial/rbm.html.
我的问题是:如何(在 theano 中)实现卷积层的无监督预训练阶段?
我不期望完整的实现作为答案,但我希望有一个好的教程或可靠的参考的链接。
这张纸 http://people.idsia.ch/~ciresan/data/icann2011.pdf描述了一种构建堆叠卷积自动编码器的方法。基于那篇论文和一些谷歌搜索,我能够实现所描述的网络。基本上,Theano 卷积网络和去噪自动编码器教程中描述了您需要的一切,但有一个关键的例外:如何反转卷积网络中的最大池化步骤。我能够使用以下方法解决这个问题这次讨论 https://groups.google.com/forum/#!msg/theano-users/7t7_hxbAMdA/V1tp7YZ50PYJ- 最棘手的部分是确定 W_prime 的正确尺寸,因为这些尺寸取决于前馈滤波器大小和池化比率。这是我的反转函数:
def get_reconstructed_input(self, hidden):
""" Computes the reconstructed input given the values of the hidden layer """
repeated_conv = conv.conv2d(input = hidden, filters = self.W_prime, border_mode='full')
multiple_conv_out = [repeated_conv.flatten()] * np.prod(self.poolsize)
stacked_conv_neibs = T.stack(*multiple_conv_out).T
stretch_unpooling_out = neibs2images(stacked_conv_neibs, self.pl, self.x.shape)
rectified_linear_activation = lambda x: T.maximum(0.0, x)
return rectified_linear_activation(stretch_unpooling_out + self.b_prime.dimshuffle('x', 0, 'x', 'x'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)