1つ(または複数)の畳み込み層(CNN)と1つまたは複数の完全に接続された非表示層を上部に持つディープネットを設計したいと思います。
完全に接続されたレイヤーを持つディープネットワークの場合、theanoには教師なしの事前トレーニングの方法があります。たとえば、 ノイズ除去オートエンコーダー または RBMs 。
私の質問は次のとおりです。どうすれば(theanoで)たたみ込み層の教師なし事前トレーニングステージを実装できますか?
完全な実装は回答として期待していませんが、優れたチュートリアルまたは信頼できるリファレンスへのリンクをいただければ幸いです。
このホワイトペーパー は、スタックされたたたみ込みオートエンコーダを構築するためのアプローチについて説明しています。その論文といくつかの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'))