趋近智
自编码器模型的构建。它通常涉及神经网络架构,并可使用 MNIST 等数据集进行示例。Keras 使得构建神经网络相当容易实现,因此将用于模型构建。
自编码器其核心是一个神经网络。我们将使用层来构建它。对于这个基本模型,我们将主要使用 Dense 层。Dense 层是一个全连接层,意味着其中的每个神经元都从上一层的所有神经元接收输入。
我们的自编码器将包含两个主要部分:
我们将使用 Keras 的 Sequential 模型,它非常适合以线性层堆栈的形式创建模型。
编码器的作用是降低输入数据的维度。如果我们的输入数据是例如一个展平的 MNIST 图像,具有 28times28=784 像素,编码器会将这 784 个维度映射到一个小得多的数字。
Dense 层中使用 input_shape 参数来指定这一点。Dense 层,它们会逐渐减少神经元的数量。例如,从 784 个输入,我们可能会缩减到 128 个神经元。encoding_dim,是一个重要参数。解码器的任务与编码器相反。它接收来自瓶颈层的压缩表示,并将其扩展回原始输入的维度。
让我们将其转化为 Keras 代码。首先,请确保您已设置 Keras 后端为 PyTorch,并导入了必要的库。
import os
os.environ["KERAS_BACKEND"] = "torch"
import keras
from keras import layers
# 定义输入维度。
# 对于 MNIST,每张图像是 28x28 像素,展平后为 784。
input_dim = 784
# 定义编码表示(瓶颈层)的大小。
# 这是一个您可以调整的超参数。我们选择 64。
encoding_dim = 64
# 使用 Keras Sequential API 定义自编码器模型
autoencoder = keras.Sequential([
# 编码器部分
layers.Dense(128, activation='relu', input_shape=(input_dim,)), # 输入层连接到第一个隐藏层
layers.Dense(encoding_dim, activation='relu'), # 瓶颈层
# 解码器部分
layers.Dense(128, activation='relu'), # 解码器的第一个隐藏层
layers.Dense(input_dim, activation='sigmoid') # 输出层,重建输入
])
# 显示模型架构
autoencoder.summary()
当您运行 autoencoder.summary() 时,Keras 将打印一个类似下方的表格(参数的确切数量可能因版本而略有不同,但结构将保持一致):
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 128) 100480
dense_1 (Dense) (None, 64) 8256
dense_2 (Dense) (None, 128) 8320
dense_3 (Dense) (None, 784) 101136
=================================================================
Total params: 218,192
Trainable params: 218,192
Non-trainable params: 0
_________________________________________________________________
理解摘要:
(None, 128) 表示该层输出一个张量,其中第一个维度(None)是批量大小(可变),第二个维度是神经元数量(此处为 128)。Dense 层将 784 个输入连接到 128 个神经元。这包含 784times128 个权重加上 128 个偏置,总计 100352+128=100480 个参数。一张图可以帮助将数据流经自编码器的过程可视化:
此图显示了数据从输入层流经编码器(在瓶颈层压缩到 64 个单元),然后通过解码器在输出端重建原始的 784 个单元。
在此结构中:
Dense 层,因为它们多功能且是许多神经网络任务(包括基本自编码器)的良好起点。activation='relu')。它是一种常用选择,有助于模型有效学习。activation='sigmoid')。如果您的输入像素值被缩放到 0 到 1 之间(这是图像的常见预处理步骤),Sigmoid 可以确保输出值也在此范围内,这有助于将重建与原始数据进行比较。模型架构定义好后,下一步是配置其用于训练。这包括选择一个损失函数(用于衡量自编码器的表现)和一个优化器(用于指示模型如何改进)。我们将在下一节中介绍这一点。
这部分内容有帮助吗?
Sep 5, 2025
更新以使用 Pytorch 和 Keras 3 代替 Tensorflow
© 2026 ApX Machine Learning用心打造