如何使用Tensorflow和预训练模型进行微调?
Tensorflow和预训练模型可以通过将'base_model'的'trainable'特性设置为True来进行微调。在微调之前,层会被冻结。
阅读更多: 什么是TensorFlow以及Keras如何与TensorFlow协作创建神经网络?
包含至少一层卷积层的神经网络被称为卷积神经网络。我们可以使用卷积神经网络来构建学习模型。
我们将了解如何借助来自预训练网络的迁移学习来对猫和狗的图像进行分类。图像分类迁移学习背后的直觉是,如果一个模型在大型通用数据集上进行训练,那么该模型可以有效地用作视觉世界的通用模型。它将学习特征映射,这意味着用户无需从头开始在大型数据集上训练大型模型。
阅读更多: 如何预训练自定义模型?
我们正在使用Google Colaboratory运行以下代码。Google Colab或Colaboratory帮助通过浏览器运行Python代码,并且无需任何配置即可免费访问GPU(图形处理单元)。Colaboratory构建在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://tensorflowcn.cn/tutorials/images/transfer_learning
输出
Number of layers in the base model are: 154 Fine tuning begins Layers are frozen before 'fine_tune_at' layer
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
解释
提高性能的一种方法是对预训练模型顶层的权重进行微调/训练,以及对添加的分类器的训练。
训练过程将迫使权重从通用特征映射调整到与特定数据集相关的特征。
需要微调少量顶层,而不是整个MobileNet模型。
微调的目标是调整专门的特征,以便它们可以用于处理新的数据集,而不是覆盖通用学习。
需要解除base_model的冻结,并将底层设置为不可训练。
模型需要重新编译,并恢复训练。