如何使用 Tensorflow 和预训练模型进行微调?
通过将 ‘base_model’ 的 ‘trainable’ 功能设置为 True,可以使用 Tensorflow 和预训练模型进行微调。在微调之前,各层是冻结的。
阅读更多: 什么是 TensorFlow,以及 Keras 如何与 TensorFlow 配合使用来创建神经网络?
包含至少一个层的神经网络称为卷积层。我们可以使用卷积神经网络构建学习模型。
我们将了解如何借助预训练网络的迁移学习对猫和狗的图像进行分类。图像分类迁移学习背后的直觉是,如果在大型通用数据集上训练模型,则该模型可有效地用作视觉世界的通用模型。它会学习特征图,这意味着用户不必从头开始在大型数据集上训练大型模型。
阅读更多: 如何预先训练定制模型?
我们正在使用 Google Colaboratory 运行以下代码。Google Colab or Colaboratory helps run Python code over the browser and requires zero configuration and free access to GPUs (Graphical Processing Units). Colaboratory has been built on top of Jupyter Notebook.
示例
base_model.trainable = True print("Number of layers in the base model are: ", len(base_model.layers)) print("Fine tuning begins") fine_tune_at = 100 print("Layers are frozen before 'fine_tune_at' layer") for layer in base_model.layers[:fine_tune_at]: layer.trainable = False
代码来源 −https://www.tensorflow.org/tutorials/images/transfer_learning
输出
Number of layers in the base model are: 154 Fine tuning begins Layers are frozen before 'fine_tune_at' layer
解释
提高性能的一种方法是微调/训练预训练模型顶层的权重以及添加的分类器的训练。
训练过程将强制将权重从通用特征图调整为与特定数据集相关的特征。
必须对少数顶层进行微调,而不是整个 MobileNet 模型。
微调的目标是调整专门的特征,以便它们可用于新数据集,而不是覆盖通用学习。
需要解冻 base_model 并将底层设置为不可训练。
重新编译模型并恢复训练。