趋近智
自编码器模型在定义并配置了优化器和损失函数之后,现在已准备好进入训练阶段。训练是自编码器学习执行其任务的阶段,即尽可能准确地重构输入数据。这种学习是通过根据模型产生的重构误差,迭代调整模型内部参数(权重)来实现的。在 Keras 中,主要工具是 fit 方法。
model.fit() 启动训练fit 方法是你指示 Keras 模型从数据中学习的主要界面。你将提供训练数据,指定一些训练参数,Keras 将处理迭代和权重调整的复杂底层过程。
下面是调用 model.fit() 来训练自编码器的一种常见方式:
# 假设 'autoencoder' 是你已编译的 Keras 模型
# 'x_train_processed' 是你预处理过的训练数据
# 'x_val_processed' 是你预处理过的验证数据(未直接用于训练的数据子集)
# 定义一些训练设置
num_epochs = 50 # 遍历整个训练数据集的次数
batch_size_val = 128 # 在更新模型权重之前处理的样本数量
# 让我们来训练模型!
history = autoencoder.fit(
x_train_processed, # 训练的输入数据
x_train_processed, # 目标数据:对于自编码器,这与输入相同
epochs=num_epochs,
batch_size=batch_size_val,
shuffle=True, # 在每个 epoch 开始时打乱训练数据是良好的做法
validation_data=(x_val_processed, x_val_processed) # 在每个 epoch 结束时用于评估损失的数据
)
这些参数的含义是:
x_train_processed): 这是你的输入训练数据。自编码器会接收这些数据,通过编码器获得压缩表示,然后通过解码器尝试重构它。x_train_processed): 这是目标数据。由于自编码器的目标是重构其输入,输入数据本身就作为期望的输出。epochs: 一个epoch表示对整个训练数据集的一次完整遍历。训练多个 epoch 使模型能够反复查看数据并调整其权重。batch_size: 将数据分成更小的段,称为批次(batches)。batch_size 定义了每个批次中的样本数量。shuffle: 指示 Keras 在每个 epoch 开始前打乱训练样本的顺序,有助于防止模型学习到与数据呈现顺序相关的模式。validation_data: 验证数据,模型不在此上训练。用于监控模型对训练期间未见过的数据的泛化能力。fit 过程中发生了什么?当你调用 model.fit() 时,Keras 会启动并管理学习循环。对于每个 epoch,以及该 epoch 内的每个批次:
History 对象监控训练model.fit() 方法会返回一个 History 对象,它记录了训练过程中发生的一切,特别是每个 epoch 结束时的损失值(和任何其他指标)。你可以从 history.history 属性中访问这些信息:
# 'history' 是 autoencoder.fit() 返回的对象
training_loss_values = history.history['loss']
validation_loss_values = history.history['val_loss']
# 让我们打印第一个和最后一个 epoch 后的损失
print(f"第一个 epoch 后训练数据的损失: {training_loss_values[0]:.4f}")
print(f"第一个 epoch 后验证数据的损失: {validation_loss_values[0]:.4f}")
print(f"最后一个 epoch 后训练数据的损失: {training_loss_values[-1]:.4f}")
print(f"最后一个 epoch 后验证数据的损失: {validation_loss_values[-1]:.4f}")
绘制训练和验证损失随 epoch 变化的图表是评估训练进程的常用方法。
解释损失曲线:
一旦 model.fit() 完成,你的 autoencoder 模型的权重就通过学习过程得到了更新。它现在已经学会了如何将输入数据压缩到瓶颈层然后进行重构。下一步是评估它学习这项任务的成效。
这部分内容有帮助吗?
model.fit() 的参数,并解释了如何监控训练进度和解决过拟合等常见问题。(第4版)© 2026 ApX Machine Learning用心打造