【问题标题】:Get Decoder for Deep Autoencoder获取深度自动编码器的解码器
【发布时间】:2017-11-21 10:41:49
【问题描述】:

我正在关注 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)

对于编码器,它确实很容易工作,但是如何获得最后三层的模型?

【问题讨论】:

  • 你的意思是你想使用几层的神经网络作为你的解码器吗?或者您想使用几个不同的解码器来输入相同的输入?
  • 我有一个输入层(比如 784 个神经元),然后是一些具有收缩神经元的编码器层(比如 32 个神经元),然后是解码器层(现在恢复到 784 个神经元)。问题是,训练后我只想使用网络的一部分(编码器或解码器层)。
  • 我不确定这是否有帮助,但可能更接近您正在寻找的东西。 - github.com/fchollet/keras/issues/358#issuecomment-119379780

标签: python machine-learning neural-network deep-learning keras


【解决方案1】:

尝试(按照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))))

【讨论】: