我如何在Keras中将顺序模型放在预先训练的模型上?

问题描述 投票:0回答:1

我想在像nasnet_mobile这样的预训练模型之前放置一个4层密集网络。我尝试了几种不同的方法,但是它们都给您带来头痛(又名错误)。在有效的keras + tensorflow2中执行此操作的方法是什么?

想法:

  • 是否有一些“标志”必须将Dense的输出指定为整数或图片?
  • 预训练模型中是否有一些“标志”必须允许其连接?
  • 我是否需要手动制作一个经过预训练的克隆,并为其加载预训练的权重,然后尝试上述方法之一;也许受过预训练的班级与所创造的班级不同? (更新)如果要复制,是否有一种简单的方法来确保结构相同,以便当我有set_weights(get_weights(…))时不会出错?

  • 以上都不是...

CODE:

#LIBRARIES
import numpy as np
from tensorflow import keras
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Reshape, Conv2D, MaxPool2D , Flatten, Input


my_input_shape = (224,224,3)

#DENSE MODEL
my_inputs = Input(shape=my_input_shape)

hidden_1 = Dense(units=8, activation='relu')(my_inputs)


#make the output layer
hidden_2= Dense(units=np.product(my_input_shape), 
                           activation='sigmoid')(hidden_1)

transformed = keras.layers.Reshape(my_input_shape,)(hidden_2)  

dense_model = Model(inputs=my_inputs, outputs=transformed)

#PRETRAINED MODEL
pretrained_model = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_shape=my_input_shape)

#Option 1
combined_model_1 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=transformed)

#Option 2
combined_model_2 = Model(inputs=dense_model.input, outputs=pretrained_model.output)

#Option 3a
combined_model_3a = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=my_input_shape)(dense_model)
#Option 3b
combined_model_3b = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False)(dense_model)

#Option 4
combined_model_4 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=dense_model)

问题:给定上面的代码,我想在预训练模型之前以菊花链方式链接Dense模型。我想将图像送入密集区域,使其在密集区域中传播,然后成为预训练的输入,然后通过预训练。

image keras tensorflow2.0 prepend
1个回答
1
投票

为什么不这样做:

inp = Input(shape=my_input_shape)
x = dense_model(inp)
x = pretrained_model(x)

final_model = Model(inp, x)
© www.soinside.com 2019 - 2024. All rights reserved.