keras将两个独立的模型融合起来(无传入参数版本)

keras将两个独立的模型融合起来(多输入单输出)的基础上稍做改动

将两个独立的模型融合成一个整体
这里的模型在定义时没有使用传入参数,而是在模型融合的时候一起定义传入参数
import keras
from keras.models import Model
from keras.layers import Input,Dense,PReLU,Dropout #PRelU为带参数的ReLU

第一个模型:(分支网络之一)

def model1():
    inp = Input(shape=(10,4))
    x1 = keras.layers.Dense(8, activation='relu')(inp)
    model=Model(input=inp,outputs=x1)
    return model

第二个模型:(分支网络之二)

def model2():
    inp2 = Input(shape=(16,4))
    x2 = keras.layers.Dense(8, activation='relu')(inp2)
    model=Model(input=inp2,outputs=x2)
    return model

模型融合(在这里可以载入权重):

def merge_model():
    model_1 = model1()
    model_2 = model2()
    
    
    #model_1.load_weights('model_1_weight.h5')#这里可以加载各自权重
    #model_2.load_weights('model_2_weight.h5')#可以是预训练好的模型权重(迁移学习)

    inp1 = model_1.input #参数在这里定义
    inp2 = model_2.input #第二个模型的参数
    r1=model_1.output
    r2=model_2.output
    x = keras.layers.Concatenate(axis= 1)([r1, r2])
    model=Model(inputs=[inp1,inp2],outputs=x)
    return model    
merged_model = merge_model()
merged_model.summary()

在这里插入图片描述
根据需要修改模型:

def modify():#修改模型
    origin_model=merge_model()
    for layer in origin_model.layers:
        layer.trainable = False#原来的不训练,冻结网络层
        
    inp=origin_model.input
    x=origin_model.output
    den=Dense(200,name="fine_dense")(x)
    l=PReLU()(den)
    l=Dropout(0.5)(l)
    result=Dense(10,activation="softmax")(l)
    model=Model(input=inp,outputs=result)
    model.summary()
    return model

modified = modify()

修改后的模型结构:
在这里插入图片描述

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值