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