如何使用预训练模型的第一层来提取 Keras 模型中的特征(功能 API)

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

我怎样才能实现这个想法?


皈依舞
浏览 156回答 1
1回答

RISEBY

通常,您需要重用一个模型中的层,将它们作为输入传递给其余层,并创建一个模型对象,其中指定了组合模型的输入和输出。例如来自https://github.com/FHainzl/Visualizing_Understanding_CNN_Implementation.git的 alexnet.py 。他们有from keras.models import Modelfrom keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2Ddef 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python