在Theano中进行卷积神经网络的无监督预训练

37 投票
1 回答
10546 浏览
提问于 2025-04-18 13:22

我想设计一个深度网络,这个网络里有一个(或多个)卷积层(CNN),还有一个或多个全连接的隐藏层在上面。
对于有全连接层的深度网络,Theano里有一些方法可以进行无监督的预训练,比如使用去噪自编码器或者RBM

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

我并不期待得到一个完整的实现作为答案,但如果能给我一个好的教程链接或可靠的参考资料,我会非常感激。

1 个回答

29

这篇论文介绍了一种构建堆叠卷积自编码器的方法。根据这篇论文和一些谷歌搜索,我成功实现了文中描述的网络。基本上,你需要的所有信息都在Theano的卷积网络和去噪自编码器的教程中,但有一个关键的例外:如何逆转卷积网络中的最大池化步骤。我通过这个讨论找到了方法——最棘手的部分是弄清楚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'))

撰写回答