Bootstrap

【概念速通】使用预训练网络的两种方法 -- 特征提取(feature extraction)和微调模型(fine-tuning)

  • 特征提取(feature extraction): 使用之前网络学到的表示来从新样本中提取出有趣的特征。然后将这些特征输入一个新的分类器,从头开始训练

    用于图像分类的卷积神经网络包含两部分:首先是一系列池化层和卷积层,最后是一个密集连接分类器。第一部分叫作模型的卷积基(convolutional base)。对于卷积神经网络而言,特征提取就是取出之前训练好的网络的卷积基,在上面运行新数据,然后在输出上面训练一个新的分类器

    在这里插入图片描述

    # 以 VGG 网络为例,构建模型示例如下:	
    	
    # VGG16卷积基实例化
    from keras.applications import VGG16 
    conv_base = VGG16(weights='imagenet', 
                      include_top=False, 
                      input_shape=(150, 150, 3))
    
    # 创建模型
    from keras import models 
    from keras import layers 
    model = models.Sequential() 
    model.add(conv_base) 
    model.add(layers.Flatten()) 
    model.add(layers.Dense(256, activation='relu')) 
    model.add(layers.Dense(1, activation='sigmoid'))
    
    conv_base.trainable = False   # 冻结参数
    

    在这里插入图片描述

  • 微调模型(fine-tuning):与特征提取互为补充。对于用于特征提取的冻结的模型基(块1 + 块2),微调是指将其顶部的几层“解冻”(块2),并将这解冻的几层(块2)和新增加的部分(块3,本例中是全连接分类器)联合训练

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

  • 特征提取时已经完成了前三个步骤,微调模型额外进行了 4、5 步
;