用于分类问题的卷积自动编码器

Convolutional Autoencoder for classification problem

我正在关注 Datacamp 关于使用卷积自动编码器进行分类的教程 here。我在教程中了解到,我们只需要将自动编码器的头部(即编码器部分)堆叠到全连接层即可进行分类。

堆叠后,生成的网络(卷积自动编码器)被训练两次。首先将编码器的权重设置为 false 为:

for layer in full_model.layers[0:19]:
    layer.trainable = False

然后设置回true,重新训练网络:

for layer in full_model.layers[0:19]:
    layer.trainable = True

我不明白为什么我们要这样做两次。有人有使用 conv-net 或自动编码器的经验吗?

因为前19层已经在这一行训练好了:

autoencoder_train = autoencoder.fit(train_X, train_ground, batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(valid_X, valid_ground))

autoencoder的重点是降维。假设您有 1000 个特征,您希望将其减少到 100 个。您使用编码器层和解码器层训练自动编码器。重点是编码后的特征(由编码层输出)可以解码回原始特征。

自动编码器训练完成后,解码器部分被丢弃,取而代之的是在编码器层之上添加一个完全连接的分类层,以从减少的特征集训练分类网络。这就是为什么编码器层 trainable 设置为 false 以仅训练完全连接的分类层(以加快训练速度)。

编码器层 trainable 再次设置为 true 的原因是训练整个网络,这可能会很慢,因为变化会反向传播到整个网络。