0Pricing
Learn AI with Python · 课时

使用 VGG16 和 ResNet50 作为基础模型

keras.applications.VGG16(weights='imagenet', include_top=False),以及添加自定义顶层。

使用 VGG16 和 ResNet50 作为基础模型 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

Keras 应用模块

tf.keras.applications提供数十种预训练架构,您只需一行代码即可下载。两个经典架构是VGG16(由简单的 3x3 卷积堆叠而成,层数很深)和ResNet50(使用残差连接,层数更深且准确率更高)。

将 VGG16 作为基础网络加载

加载带有 ImageNet 权重但不包含分类头的 VGG16,以便添加您自己的分类头。

from tensorflow.keras.applications import VGG16

base = VGG16(
    weights="imagenet",        # download pretrained weights
    include_top=False,         # drop the 1000-class classifier
    input_shape=(224, 224, 3)  # standard ImageNet input size
)

理解参数

  • weights="imagenet":加载预训练权重,而不是随机权重。
  • include_top=False:移除原始的 Dense 分类器,以便添加您自己的分类器。
  • input_shape=(224,224,3):高度、宽度以及 3 个 RGB 通道。

设置 include_top=False 正是使模型能够复用于新任务的关键。

冻结基础网络

设置 base.trainable = False,使预训练卷积权重在第一阶段训练期间保持不变。只有您新建的分类头会进行学习。

base.trainable = False
print(len(base.trainable_weights))  # -> 0 when frozen

GlobalAveragePooling2D

基础网络会输出类似 (7, 7, 512) 的三维特征图。GlobalAveragePooling2D会在空间网格上对每个通道求平均,将其压缩为每个通道一个向量,此处向量长度为 512。

它替代了庞大的 Flatten + Dense 结构,大幅减少参数并降低过拟合。

from tensorflow.keras.layers import GlobalAveragePooling2D

# (batch, 7, 7, 512) -> (batch, 512)
pooled = GlobalAveragePooling2D()(base.output)

添加 Dense 输出头

添加一个大小与类别数量相匹配的 Dense 层。多分类任务使用 softmax,二分类任务使用 sigmoid。

from tensorflow.keras import layers, Model

x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.3)(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = Model(inputs=base.input, outputs=outputs)

切换到 ResNet50

ResNet50 使用相同的接口。它的残差(跳跃)连接使模型能够在不出现梯度消失的情况下训练得更深,通常在速度相近的情况下比 VGG16 获得更高的 ImageNet 准确率。

from tensorflow.keras.applications import ResNet50

base = ResNet50(
    weights="imagenet",
    include_top=False,
    input_shape=(224, 224, 3)
)
base.trainable = False

VGG16 与 ResNet50

  • VGG16:约 1.38 亿个参数,简单统一的 3x3 堆叠,占用内存较多,易于理解。
  • ResNet50:约 2500 万个参数,使用残差块,层数更深,通常准确率更高且更加轻量。

对于大多数现代迁移学习任务,ResNet50 是更强的默认选择。

匹配预处理

每个模型系列都有自己的 preprocess_input。VGG16 会减去 RGB 值的均值,而 ResNet50 使用类似 Caffe 风格的缩放方式。请始终导入与您的基础网络匹配的版本。

from tensorflow.keras.applications.resnet50 import preprocess_input

x = preprocess_input(image_batch)  # required for correct results

编译模型

基础网络冻结后,请使用常规优化器调用 compile,并训练分类头。

model.compile(
    optimizer="adam",
    loss="categorical_crossentropy",
    metrics=["accuracy"]
)
model.fit(train_ds, validation_data=val_ds, epochs=10)

检查架构

调用 model.summary(),确认基础网络已被冻结(不可训练参数数量较大),并且只有分类头可训练。这项健全性检查可以及早发现设置错误。

model.summary()
# Look at "Trainable params" vs "Non-trainable params"

快速检查

请检查您对使用 Keras 构建迁移学习模型的掌握程度。

回顾

您使用 weights="imagenet"、include_top=False 和 input_shape=(224,224,3) 加载了VGG16和ResNet50,使用 base.trainable=False 冻结了基础网络,使用GlobalAveragePooling2D汇聚特征,并添加了 Dense 输出头。

ResNet50 是更强的默认选择。接下来:解冻层以进行微调。

常见问题解答

「使用 VGG16 和 ResNet50 作为基础模型」课时是免费的吗?

是的 — 「使用 VGG16 和 ResNet50 作为基础模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「使用 VGG16 和 ResNet50 作为基础模型」这节课中我会学到什么?

keras.applications.VGG16(weights='imagenet', include_top=False),以及添加自定义顶层。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 VGG16 和 ResNet50 作为基础模型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 迁移学习的概念与策略
  2. 使用 VGG16 和 ResNet50 作为基础模型
  3. 微调:解冻与重新训练
  4. 用于边缘部署的 MobileNet 与 EfficientNet
← 返回 Learn AI with Python