参考:keras实现多个模型融合
优点:可以给两个模型单独赋予权重
想法:用在迁移学习中时,可以先预训练好其中一个模型,保存权重,再载入到总的模型中
import keras
from keras.models import Model
from keras.layers import Input,Dense,PReLU,Dropout #PRelU为带参数的ReLU
- 1
- 2
- 3
第一个模型:(分支网络之一)
def model1(inp):
x1 = keras.layers.Dense(8, activation='relu')(inp)
model=Model(input=inp,outputs=x1)
return model
- 1
- 2
- 3
- 4
第二个模型:(分支网络之二)
def model2(inp2):
x2 = keras.layers.Dense(8, activation='relu')(inp2)
model=Model(input=inp2,outputs=x2)
return model
- 1
- 2
- 3
- 4
模型融合(在这里可以载入权重):
def merge_model():
inp1 = Input(shape=(10,4))
inp2 = Input(shape=(16,4))
model_1 = model1(inp1)
model_2 = model2(inp2)
#model_1.load_weights('model_1_weight.h5')#这里可以加载各自权重
#model_2.load_weights('model_2_weight.h5')#可以是预训练好的模型权重(迁移学习)
r1=model_1.output
r2=model_2.output
x = keras.layers.Concatenate(axis= 1)([r1, r2])
model=Model(input=[inp1,inp2],outputs=x)
return model
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
merged_model = merge_model()
merged_model.summary()