【发布时间】:2019-08-22 19:22:48
【问题描述】:
我正在训练深度自动编码器将人脸映射到 128 维潜在空间,然后将它们解码回其原始 128x128x3 格式。
我希望在训练自动编码器之后,我能够以某种方式“切片”自动编码器的后半部分,即负责将潜在空间 (128,) 映射到图像空间 (128, 128) 的解码器网络, 3) 通过使用功能性 Keras API 和autoenc_model.get_layer()
这里是我model的相关层:
INPUT_SHAPE=(128,128,3)
input_img = Input(shape=INPUT_SHAPE, name='enc_input')
#1
x = Conv2D(64, (3, 3), padding='same', activation='relu')(input_img)
x = BatchNormalization()(x)
//Many Conv2D, BatchNormalization(), MaxPooling() layers
.
.
.
#Flatten
fc_input = Flatten(name='enc_output')(x)
y = Dropout(DROP_RATE)(fc_input)
y = Dense(128, activation='relu')(y)
y = Dropout(DROP_RATE)(y)
fc_output = Dense(128, activation='linear')(y)
#Reshape
decoder_input = Reshape((8, 8, 2), name='decoder_input')(fc_output)
#Decoder part
#UnPooling-1
z = UpSampling2D()(decoder_input)
//Many Conv2D, BatchNormalization, UpSampling2D layers
.
.
.
#16
decoder_output = Conv2D(3, (3, 3), padding='same', activation='linear', name='decoder_output')(z)
autoenc_model = Model(input_img, decoder_output)
here 是包含整个模型架构的笔记本。
为了从训练有素的自动编码器中获取解码器网络,我尝试使用:
dec_model = Model(inputs=autoenc_model.get_layer('decoder_input').input, outputs=autoenc_model.get_layer('decoder_output').output)
和
dec_model = Model(autoenc_model.get_layer('decoder_input'), autoenc_model.get_layer('decoder_output'))
这两种方法似乎都不起作用。
我需要从自动编码器中提取解码器层,因为我想先训练整个自动编码器模型,然后独立使用编码器和解码器。
我在其他任何地方都找不到满意的答案。关于构建自编码器的Keras blog article 仅介绍了如何为 2 层自编码器提取解码器。
解码器输入/输出形状应为:(128, ) 和 (128, 128, 3),分别是“decoder_input”层的输入形状和“decoder_output”层的输出形状。
【问题讨论】:
标签: python keras neural-network autoencoder