趋近智
fit() 方法本章前面提过,过拟合是个常见问题,即模型过于适配训练数据,包括数据中的噪声和特定特点,导致在未见过的数据上表现不佳。应对此问题的一个有效方法,尤其是在数据集有限时,是数据增强。
数据增强通过生成现有数据点的修改版本,人为地扩充了训练数据集的大小和多样性。你不需要收集全新的数据(这可能耗费高昂且耗时),而是通过对当前数据应用各种逼真的变换来生成新的训练样本。核心思想是,这些变换生成了模型可能在实际情况中遇到的变体,从而让模型更有效,并增强其泛化能力。
设想你正在训练一个模型来识别图像中的猫。你的训练集可能主要包含居中、面向前方且在特定光照条件下的猫图片。如果模型只见过这些例子,它可能难以识别部分被截断、旋转过或在不同光照下的猫。
数据增强在训练期间引入这些变体。通过随机旋转、平移、缩放或翻转猫的图片,你教会模型,无论外观或视角发生这些微小变化,猫依然是猫。这促使模型去学习构成“猫”的内在特点,而不是仅仅记住原始训练集中特定的姿态或条件。
对于图像数据(数据增强最常应用于此处),常见技术有:
这些变换通常在训练过程中随机且动态地应用。每个训练周期,模型都会看到输入图像略微不同的版本,从而有效增加了可用数据量。
Keras 提供了便捷的层,可以直接在模型定义中进行数据增强。这种方法将预处理和增强集成到模型本身中,简化了部署并确保了一致性。这些层通常放置在主要处理层(如Conv2D或Dense)之前,但输入层之后。它们仅在训练期间活跃;在推理(预测)期间,它们会被跳过。
以下是一些用于图像增强的常见 Keras 预处理层:
keras.layers.RandomFlip:随机水平或垂直翻转输入。keras.layers.RandomRotation:随机旋转输入。keras.layers.RandomZoom:随机缩放输入。keras.layers.RandomContrast:随机调整对比度。keras.layers.RandomTranslation:随机水平或垂直平移输入。keras.layers.RandomBrightness:随机调整亮度。你可以按顺序组合这些层来创建增强流程。
import keras
from keras import layers
# 定义输入形状(例如,用于 64x64 RGB 图像)
input_shape = (64, 64, 3)
# 包含增强层的示例模型
model = keras.Sequential(
[
keras.Input(shape=input_shape),
# 数据增强层
layers.RandomFlip("horizontal"),
layers.RandomRotation(0.1), # 旋转高达 10%(约 36 度)
layers.RandomZoom(0.1), # 缩放高达 10%
layers.RandomTranslation(height_factor=0.1, width_factor=0.1),
# 模型的其余部分(示例 CNN 层)
layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5), # Dropout 是另一种正则化技术
layers.Dense(1, activation="sigmoid"), # 二元分类示例
]
)
# 像往常一样编译模型
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.summary()
# 现在,当你使用 model.fit() 训练此模型时,
# 增强层将自动应用
# 随机变换到每个训练图像批次。
# E.g., model.fit(train_images, train_labels, epochs=50, validation_data=(val_images, val_labels))
图像数据通过集成到 Keras 模型中的增强层的数据流。这些层仅在训练期间应用变换。
尽管功能强大,数据增强需要仔细运用:
通过智能地应用数据增强,你可以显著提高模型在新数据上的鲁棒性和表现,使其成为你深度学习工具箱中的一个有价值的工具。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造