簡體   English   中英

keras:將圖層插入現有 model 的開頭(靠近輸入)

[英]keras: insert layers to the beginning (near the input) of an existing model

我需要在現有 model 的開頭添加圖層。但是,我需要在“主要 model 級別”上添加圖層,也就是說我不能使用經典的功能方法。 例如,如果我使用類似的東西:

from keras.layers import Dense,Reshape, Input
inp = Input(shape=(15,))
d1 = Dense(224*224*3, activation='linear')(inp)
r1 = Reshape((224,224,3))
from keras import Model
model_mod = r1(d1)
model_mod = mobilenet(model_mod) 
model_mod = Model(inp, model_mod)

我獲得:

Layer (type)                 Output Shape              Param #   
=================================================================
input_5 (InputLayer)         (None, 15)                0         
_________________________________________________________________
dense_4 (Dense)              (None, 150528)            2408448   
_________________________________________________________________
reshape_4 (Reshape)          (None, 224, 224, 3)       0         
_________________________________________________________________
mobilenet_1.00_224 (Model)   (None, 1000)              4253864 

因此,我獲得了一個帶有嵌套的mobil.net_1.00_224 (Model)子模型的 model。 相反,我希望嵌套子模型的層以層的形式而不是(子)模型的形式“添加”在新的頂層之后(即,在“reshape_4”之后)。 換句話說,會是這樣的:

modelB_input = modelB.input
for layer in modelB.layers:
    if layer == modelB_input:
        continue
    modelA.add(layer) 

此代碼適用於簡單的順序模型(例如,vgg、mobil.net),但對於連接不是嚴格順序的更復雜的模型(例如,inception、re.net),此代碼不起作用,因為無法使用add重新連接層sequential model的方法。有什么想法嗎?

也許你必須添加 model_mod.input 作為參數:

model_mod = r1(d1)
base_out = mobilenet(model_mod) 
out =Flatten()(base_out)
model_mod = Model(inp, out)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM