36

我想设计一个(或多个)卷积层(CNN)和一个或多个完全连接的隐藏层的深层网络。
对于完全连接层的深度网络,theano中有无监督预训练的方法,例如使用denoising auto-encodersRBMs非监督式的诺诺卷积神经网络预训练

我的问题是:我如何实现(在theano中)卷积层的无监督预训练阶段?

我不希望完整的实现作为答案,但我会很感激链接到一个很好的教程或可靠的参考。

+0

请注意,无监督预训练几乎不再使用(据我所知)。 – pir

+0

@pir我知道。但有时它仍然可以得心应手 – Shai

+0

@pir:为什么它不再被使用?有什么新的更好吗? – oysteijo

回答

30

This paper描述了用于构建堆叠卷积自动编码器的方法。基于那篇论文和一些Google搜索,我能够实现描述的网络。基本上,您需要的所有内容都在Theano卷积网络中进行了描述,并对自动编码器教程进行了降噪处理,但有一个重要的例外:如何反转卷积网络中的最大池化步骤。我能够使用this discussion中的方法解决这个问题 - 最棘手的部分是确定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')) 
+0

嗨senecaur - 我看了报纸,但我无法理解网络的架构。你能否提供更多关于你用来预培训的网络架构的细节?逐层。然后 - 你是否使用同一个网络进行微调?即只是将输出图层从图像更改为监督标签?非常感谢 – Run2

+0

我在CrossValidated http://stats.stackexchange.com/questions/137537/what-is-the-architecture-of-a-stacked-convolutional-autoencoder中提出了相关问题。我会很感激,如果塞内卡尔 - 你可以在那里回答问题。谢谢 – Run2

+0

@senecaur如果你使用的是捆绑重量,W_prime应该是原始W的翻转版本(或者我错了吗?)。你如何设法在Theano符号中创建这个矩阵? – mmohaveri