2017-06-19 33 views
2

我正在關注keras here中的深度自動編碼器教程。 對於在一開始簡單的自動編碼器有這樣定義的decoder獲取深自動編碼器的解碼器

# retrieve the last layer of the autoencoder model 
decoder_layer = autoencoder.layers[-1] 

# create the decoder model 
decoder = Model(encoded_input, decoder_layer(encoded_input)) 

這不會了,如果你有一個以上的譯碼器層工作。如果我有三個解碼器層,怎麼做類似?

encoded = Dense(128, activation='relu')(input_img) 
encoded = Dense(64, activation='relu')(encoded) 
encoded = Dense(32, activation='relu')(encoded) 

decoded = Dense(64, activation='relu')(encoded) 
decoded = Dense(128, activation='relu')(decoded) 
decoded = Dense(784, activation='sigmoid')(decoded) 

autoencoder = Model(input_img, decoded) 
encoder = Model(input_img, encoded) 

對於編碼器,它很容易工作,但如何獲得最後三層的模型?

+0

你的意思是你想用幾層作爲解碼器的NN?或者你想用相同的輸入使用幾個不同的解碼器? – SRC

+0

我有一個輸入層(比如說784個神經元),然後是一些編碼層與縮小的神經元(比如直到32個神經元),然後是解碼器層(現在增長回到784個神經元)。事情是,在訓練之後,我只想使用網絡的一部分(編碼器或解碼器層)。 – ScientiaEtVeritas

+1

我不確定這是否有幫助,但可能更接近您正在尋找的東西。 - https://github.com/fchollet/keras/issues/358#issuecomment-119379780 – SRC

回答

2

嘗試(以下this答案):

# retrieve the last layer of the autoencoder model 
decoder_layer1 = autoencoder.layers[-3] 
decoder_layer2 = autoencoder.layers[-2] 
decoder_layer3 = autoencoder.layers[-1] 

# create the decoder model 
decoder = Model(input=encoded_input, 
output=decoder_layer3(decoder_layer2(decoder_layer1(encoded_input))))