38

1 つ (または複数) の畳み込み層 (CNN) と 1 つまたは複数の完全に接続された隠れ層を上部に持つディープ ネットを設計したいと考えています。
完全に接続されたレイヤーを持つディープ ネットワークの場合、theano には、教師なし事前トレーニング用のメソッドがあります。たとえば、ノイズ除去オート エンコーダーまたはRBMを使用します。

私の質問は次のとおりです。畳み込み層の教師なし事前トレーニング段階を (theano で) 実装するにはどうすればよいですか?

答えとして完全な実装は期待していませんが、優れたチュートリアルまたは信頼できるリファレンスへのリンクをいただければ幸いです。

4

1 に答える 1

30

この論文では、スタックされた畳み込みオートエンコーダを構築するためのアプローチについて説明します。その論文といくつかの Google 検索に基づいて、説明したネットワークを実装することができました。基本的に、必要なものはすべて Theano 畳み込みネットワークとノイズ除去オートエンコーダーのチュートリアルで説明されていますが、1 つの重要な例外があります: 畳み込みネットワークで最大プーリング ステップを逆にする方法です。このディスカッションの方法を使用して解決することができました。最も難しいのは、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'))
于 2014-09-25T20:29:26.867 に答える