郭震 AI公众号:郭震AI

22 Keras进阶之Fine-tuning

发布日期:

最近更新:

分类: Keras

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点10 个
图文要点6 张
正文规模1.3k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 10 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

Fine-tuning流程图查看大图
Finetuning流程图

Fine-tuning 是谨慎地继续训练预训练模型。学习率要低,解冻要少,验证集要盯紧。

Fine-tuning实操核对图查看大图
Finetuning实操核对图

我会先保存微调前模型,再逐步解冻。微调变差时能回滚,才敢做更深层调整。

在上一节中,我们探讨了如何利用自定义回调函数来增强Keras模型的训练过程。这一节,我们将深入讨论Fine-tuning,一种在迁移学习中常用的技术。Fine-tuning涉及到对预训练模型进行微调,以适应新的任务或数据集。

什么是Fine-tuning?

Fine-tuning是一种迁移学习的方法,其中我们首先在一个大型数据集(通常是类似于ImageNet的数据库)上训练一个深度学习模型,以获得良好的特征表示。然后,我们将在特定任务上对该模型进行微调,以改善在该任务上的性能。

Keras Fine-tuning判断卡查看大图
Keras Finetuning判断卡

做 Keras Fine-tuning 时,先看预训练模型、冻结层、自定义分类头、学习率、数据增强和验证曲线。

Fine-tuning的过程包括以下几步:

  1. 加载预训练的模型。
  2. 冻结某些层(通常是底层),保持其权重不变。
  3. 修改模型的最后几层以适应新的任务。
  4. 使用新的数据集对模型进行训练,以优化新的层的权重。

案例:Fine-tuning预训练的VGG16模型

我们将使用Keras中的VGG16模型来演示Fine-tuning的过程。该模型在ImageNet数据集上进行预训练。

Keras阅读地图卡查看大图
Keras阅读地图卡

《Keras进阶之Fine-tuning》可以按“场景、概念、动作、结果”来读。先把这四件事对齐,再回到正文里的参数、代码或流程。

步骤1:加载预训练模型

from keras.applications import VGG16

# 加载VGG16模型,包含预训练的权重,不包含顶部的全连接层
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

步骤2:冻结底层

我们通常会冻结模型的底层,以保持这些层从原始任务中学到的图像特征。

for layer in base_model.layers:
    layer.trainable = False

步骤3:添加自定义层

在预训练模型的顶部添加自定义层以适应我们的特定任务。例如,如果我们想要对图像进行分类,我们可能会添加几个全连接层。

from keras import models, layers

# 创建新的模型
model = models.Sequential()

# 添加预训练模型的底层
model.add(base_model)

# 添加自定义层
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))  # 假设我们有10个分类

步骤4:编译模型

在编译模型时,我们可以选择合适的优化器和损失函数。

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

步骤5:训练模型

使用我们的新数据集对模型进行训练,但只训练自定义添加的层。

from keras.preprocessing.image import ImageDataGenerator

# 定义数据生成器
train_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    'data/train',  
    target_size=(224, 224),  
    batch_size=32,
    class_mode='categorical'
)

# 训练模型
model.fit(train_generator, epochs=10)

重要注意事项

在Fine-tuning中,一个重要的超参数是学习率。通常情况下,使用较小的学习率进行微调,以防止破坏预训练的权重。

from keras.optimizers import Adam

# 使用较小的学习率进行微调
model.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

评估模型

Fine-tuning后,我们可以使用验证集来评估模型的性能。

# 使用验证数据生成器
validation_datagen = ImageDataGenerator(rescale=1./255)
validation_generator = validation_datagen.flow_from_directory(
    'data/validation',
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical'
)

# 评估模型
loss, accuracy = model.evaluate(validation_generator)
print(f'Loss: {loss}, Accuracy: {accuracy}')
Keras进阶之Finetuning应用复盘卡查看大图
Keras进阶之Finetuning应用复盘卡

学完《Keras进阶之Finetuning》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

Keras进阶之Finetuning应用检查卡查看大图
Keras进阶之Finetuning应用检查卡

如果想把《Keras进阶之Finetuning》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

结论

通过以上步骤,我们可以成功实现Keras中预训练模型的Fine-tuning,以提高特定任务上的性能。Fine-tuning使我们能够充分利用现有的知识并为新任务减少训练时间和数据需求。

在下一节中,我们将探索如何在TensorFlow中使用Keras,进一步拓展我们对Keras框架的理解和应用。希望你在Fine-tuning过程中能有良好的体验!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

Keras进阶之Fine-tuning适合谁读?

这是 Keras 入门 系列第 22 / 28 篇,适合正在学习Keras 入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇Keras 入门教程要多久?

按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...