【问题标题】:How to use the first layers of a pretrained model to extract features inside a Keras model (Functional API)如何使用预训练模型的第一层来提取 Keras 模型中的特征(功能 API)
【发布时间】:2020-02-16 08:11:27
【问题描述】:

我想使用预训练模型的第一层——比如在 Xception 中,包括 add_5 层来从输入中提取特征。然后将 add_5 层的输出传递给可训练的密集层。

我该如何实现这个想法?

【问题讨论】:

    标签: python tensorflow2.0 transfer-learning keras-2 pre-trained-model


    【解决方案1】:

    通常,您需要重用一个模型中的层,将它们作为输入传递给其余层,并创建一个模型对象,并指定组合模型的输入和输出。例如来自https://github.com/FHainzl/Visualizing_Understanding_CNN_Implementation.git 的 alexnet.py。

    他们有

    from keras.models import Model
    
    from keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2D
    
    def alexnet_model():
        inputs = Input(shape=(3, 227, 227))
        conv_1 = Conv2D(96, 11, strides=4, activation='relu', name='conv_1')(inputs)
        …
        prediction = Activation("softmax", name="softmax")(dense_3)
        m = Model(input=inputs, output=prediction)
        return m
    

    然后他们采用这个返回的模型,即所需的中间层,并制作一个返回该层输出的模型:

    def _sub_model(self):
        highest_layer_name = 'conv_{}'.format(self.highest_layer_num)
        highest_layer = self.base_model.get_layer(highest_layer_name)
        return Model(inputs=self.base_model.input,
                     outputs=highest_layer.output)
    

    你会需要类似的东西,

    highest_layer = self.base_model.get_layer('add_5')
    

    然后像这样继续

    my_dense = Dense(... name=’my_dense’)(highest_layer.output)
    …
    

    并以

    结束
    return Model(inputs=self.base_model.input,
                 outputs=my_prediction)
    

    由于最高层是层(图节点),而不是连接,返回结果(图弧),您需要将.output 添加到highest_layer。

    如果上面的模型也准备好了,不确定如何准确地组合模型。也许像

    model_2_lowest_layer = model_2.get_layer(lowest_layer_name)
    upper_part_model = Model(inputs= model_2_lowest_layer.input,
                             outputs=model_2.output)
    upper_part = upper_part_model()(highest_layer.output)
    return Model(inputs=self.base_model.input,
                 outputs=upper_part)
    

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 2021-12-09
      • 2016-05-11
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多