2
我是Keras的新手。我正在嘗試合併Keras中三個預訓練模型的輸出層。每個模型都有兩個獨立的輸入,但尺寸不同,密集層輸出。合併具有不同輸入形狀的不同型號的輸出
model1 = MyModel1() #returns keras.engine.training.Model
model2 = MyModel2() #returns keras.engine.training.Model
model3 = MyModel3() #returns keras.engine.training.Model
x = merge([model1(model1.input),
model2(model2.input),
model3(model3.input)],
mode='concat', concat_axis=1)
# add some trainable layers here...
# and a final softmax layer
x = Dense(2, activation='softmax')(x)
return Model(input=[model1.input,
model2.input,
model3.input],
output=x)
由於型號?.input返回張量列表,這是行不通的。我嘗試了不同的事情,似乎沒有任何工作。有這個問題的簡單解決方案嗎?
編輯: 來自indraforyou的適應性工作解決方案適用於各種型號的多個輸入。
from keras.models import Model
from keras.layers import Input, Dense, merge
def MyModel1():
inp1 = Input(batch_shape=(None,32,))
inp2 = Input(batch_shape=(None,32))
x = Dense(8)(inp1)
y = Dense(8)(inp2)
merged = merge([x, y], mode='concat', concat_axis=-1)
out = Dense(8)(merged)
return Model(input=[inp1,inp2], output=out)
def MyModel2():
inp1 = Input(batch_shape=(None,10,))
inp2 = Input(batch_shape=(None,10,))
x = Dense(4)(inp1)
y = Dense(4)(inp2)
merged = merge([x, y], mode='concat', concat_axis=-1)
out = Dense(4)(merged)
return Model(input=[inp1,inp2], output=out)
def MyModel3():
inp1 = Input(batch_shape=(None,12,))
inp2 = Input(batch_shape=(None,12,))
x = Dense(6)(inp1)
y = Dense(6)(inp1)
merged = merge([x, y], mode='concat', concat_axis=-1)
out = Dense(6)(merged)
return Model(input=[inp1,inp2], output=out)
model1 = MyModel1()
model2 = MyModel2()
model3 = MyModel3()
x = merge([model1.output,
model2.output,
model3.output],
mode='concat', concat_axis=-1)
x = Dense(2, activation='softmax')(x)
merged = Model(input=[model1.input[0], model1.input[1],
model2.input[0], model2.input[1],
model3.input[0], model3.input[1]],
output=x)
merged.summary()
謝謝您的回答,但模型調用就像層[https://keras.io/getting-開始/功能-API導/(https://keras.io/getting-started/functional-api-guide/)。這並沒有解決我的問題。 – user2595774
感謝您的鏈接,我站在糾正。雖然它在我的最後工作。我正在分享整個代碼。 – indraforyou
非常感謝!它像一個魅力!我在我的文章中修改了多個輸入的解決方案,但它基本相同。 – user2595774