【发布时间】:2019-08-09 12:05:27
【问题描述】:
我正在使用卷积层在 2D 图像上训练自动编码器,并希望将全连接层放在编码器部分的顶部以进行分类。我的自动编码器定义如下(只是一个简单的说明):
def encoder(input_img):
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
conv1 = BatchNormalization()(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(pool1)
conv2 = BatchNormalization()(conv2)
return conv2
def decoder(conv2):
conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv2)
conv3 = BatchNormalization()(conv3)
up1 = UpSampling2D((2,2))(conv3)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up1)
return decoded
autoencoder = Model(input_img, decoder(encoder(input_img)))
我的输入图像大小为 (64,80,1)。现在,当在编码器顶部堆叠全连接层时,我正在执行以下操作:
def fc(enco):
flat = Flatten()(enco)
den = Dense(128, activation='relu')(flat)
out = Dense(num_classes, activation='softmax')(den)
return out
encode = encoder(input_img)
full_model = Model(input_img,fc(encode))
for l1,l2 in zip(full_model.layers[:19],autoencoder.layers[0:19]):
l1.set_weights(l2.get_weights())
这仅适用于一个自动编码器,但现在的问题是我有 2 个自动编码器在所有大小(64、80、1)的图像集上进行了训练。
对于我输入的每个标签,两个图像大小(64、80、1)和一个标签(0 或 1)。我需要将图像 1 输入第一个自动编码器,将图像 2 输入第二个自动编码器。但是如何在上面的代码中结合full_model 中的两个自动编码器呢?
另一个问题也是fit()方法的输入。到目前为止,只有一个自动编码器的输入只包含 numpy 图像数组(例如 (1000,64,80,1)),但是如果有两个自动编码器,我将有两组图像作为输入。如何将其输入fit() 方法,以便第一个自动编码器使用第一组图像,第二个自动编码器使用第二组图像?
【问题讨论】:
标签: keras neural-network deep-learning autoencoder keras-2