我想使用预训练模型的第一层-例如在Xception中,包括add_5层以从输入中提取特征。然后将add_5层的输出传递到可训练的密集层。
我如何实现这个想法?
答案 0 :(得分:1)
通常,您需要重用一个模型中的图层,将其作为输入传递到其余图层,并使用指定的组合模型的输入和输出创建Model对象。例如https://github.com/FHainzl/Visualizing_Understanding_CNN_Implementation.git中的alexnet.py。
他们有
//begining of your struct
@State var selectedOption = 1
//something changed the selectedOption
self.selectedOption = 2
//Here your NavigationLink ( use it without button)
NavigationLink("Link Text", destination: selectedOption == 1 ? View1 : View2)
然后他们将返回的模型,所需的中间层作为模型,并返回该层的输出:
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)
…
由于highest_layer是图层(图形节点),而不是连接,返回结果(图形弧),因此您需要在return Model(inputs=self.base_model.input,
outputs=my_prediction)
上添加.output
。
如果上部模型也准备就绪,则不确定如何正确组合模型。也许像
highest_layer