• 模型微调(fine-tuning)


    特征提取

    微调首先要弄清楚一个概念:特征提取。
    用于图像分类的卷积神经网络包括两部分:一系列的卷积层和池化层(卷积基) + 一个密集连接分类器。对于卷积神经网络而言,特征提取就是取出之前训练好的网络的卷积基,用新数据训练一个新的分类器。那么为什么要重复使用之前的卷积基,而要训练新的分类器呢?这是因为卷积基学到的东西更加通用,而分类器学到的东西则针对于模型训练的输出类别,并且密集连接层舍弃了空间信息。
    卷积基的通用性取决于该层在模型中的深度。模型中更靠近输入的层提取的特征更通用,更靠近输出的层提取的特征更抽象。
    在特征提取时,应冻结卷积基,不对其进行训练,即训练过程中不改变卷积基的权重,只训练最后的dense层。在keras中,冻结方法为将卷积基每层的trainable属性设为False。

    模型微调

    模型微调与特征提取互为补充。对于用于特征提取的冻结的卷积基,微调是指将其靠近输出的几层解冻,并将这几层与分类器联合训练,让模型更加适用于当前要解决的问题。在keras中,解冻即将对应层的trainable属性设为True。

    微调网络的步骤

    1. 在已经训练好的base network上添加自定义网络
    2. 冻结基网络
    3. 训练所添加的部分
    4. 解冻基网络的一些层
    5. 联合训练解冻的层和新添加的部分

    总结

    微调,就是基于预训练模型进行微调,比如用大型数据集Imagenet训练好的resnet,再在自己的数据集上训练一部分靠近输出的层,使之更加适用于自己的问题。

    需要微调的情况:

    1. 预训练模型的数据集与自己的数据集相似,但自己的数据集太少
    2. 计算资源不够

    是否微调以及微调的方法要根据自己的数据集大小、数据集与预训练模型数据集的相似程度来选择。

    不同情况下的微调:

    • 数据量少,相似度高:修改最后几层;
    • 数据量少,相似度低:保留预训练模型的前几层,训练后面的层;
    • 数据量大,相似度高:这是最理想的情况。使用预训练的权重初始化模型,重新训练整个模型;
    • 数据量大,相似度低:直接重新训练整个模型。

    参考

    [1]《Python深度学习》
    [2] 知乎(如何进行模型微调)

  • 相关阅读:
    利用java语言将csv格式数据导入mysql数据库
    Android Verity Boot(AVB)验证原理
    论文解读(ClusterSCL)《ClusterSCL: Cluster-Aware Supervised Contrastive Learning on Graphs》
    基本组网步骤
    限量,阿里百万级Redis小册开源,原理应用拓展一键完成
    fastdds库架构
    1.6 这些都是小红书里面的名词术语【玩赚小红书】
    双层神经网络实现非线性回归——机器学习
    Java学习笔记(三十四)
    人生啊,到底什么时候是个头
  • 原文地址:https://blog.csdn.net/u014297502/article/details/125884235