
使用自动编码器和
GAN
的表征学习和生成学习
|
493
17.3 堆叠式自动编码器
与我们讨论过的其他神经网络一样,自动编码器可以具有多个隐藏层。在这种情况下,
它们被称为堆叠式自动编码器(或深度自动编码器)。添加更多的层有助于自动编码器学
习更多复杂的编码。就是说,要注意不要使自动编码器过于强大。想象一个强大的编码
器,它只是学会了把每个输入映射到单个任意数字(而解码器则学习反向映射)。显然,
这样的自动编码器可以完美地重建训练数据,但是它不会学到任何有用的数据表征(并
且不太可能将其很好地泛化到新实例中)。
堆叠式自动编码器的架构典型地相对于中间隐藏层(编码层)对称。简单来说,它看起
来像三明治。例如,MNIST 的自动编码器(在第 3 章中介绍)可能具有 784 个输入,其
后是具有 100 个神经元的隐藏层,然后是具有 30 个神经元的中间隐藏层,然后是具有
100 个神经元的另一个隐藏层,以及有 784 个神经元的一个输出层。这种堆叠式自动编
码器如图 17-3 所示。
重建
输出层
隐藏层 3
隐藏层 2
隐藏层 1
输入层
编码
图 17-3:堆叠式自动编码器
17.3.1 使用 Keras 实现堆叠式自动编码器
你可以像实现常规的深层 MLP 那样来实现堆叠式自动编码器。特别地,我们可以使
用在第 11 章中用于训练深度网络的相同技术。例如,以下代码使用 SELU 激活函数为
Fashion MNIST 构建了一个堆叠式自动编码器(如第 10 章所述进行加载和归一化):
stacked_encoder = keras.models.Sequential([ ...