python - 如何使用预训练模型的第一层提取 Keras 模型内的特征(函数式 API)

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

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

如何实现这个想法?

最佳答案

通常,您需要重用一个模型中的层,将它们作为输入传递给其余层,并使用指定的组合模型的输入和输出创建一个模型对象。例如来自 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)

由于highest_layer是一个层(图形节点),而不是一个连接,返回结果(图形弧),因此您需要将.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)

关于python - 如何使用预训练模型的第一层提取 Keras 模型内的特征(函数式 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58465937/

相关文章:

python - 类型错误 : can only concatenate list (not "tuple") to list ((Python))

python - 如何将 FOPDT 模型的死区时间应用于 MPC gekko 中的操纵变量

python - 读取excel文件时的Pandas dataframe和字符编码

python - GradientTape.gradient的概念理解

python - 相同图像的 tensorflow 预测速度提高

python - 如何使用非orm模型进行自定义分页

python - 当我使用 tf.keras.optimizers.schedules.ExponentialDecay 时,如何获取 TensorFlow 2.0 中 SGD 优化器的当前学习率?

python-3.x - 如何将权重从 2D 卷积网络复制到 Keras 上的 3D 卷积网络?

keras - 如何使用 GPT 3 进行文本分类?

python - 在 Tensorflow 中——是否可以在一个层中锁定特定的卷积过滤器,或者完全删除它们?