两个深度学习模型进行融合Concatenate

下面是两个深度学习模型的融合代码:
具体需要哪两个模型进行融合需要自己替换成相应的模型层

model1 = Sequential()
#input 
model1.add(Dense(32, input_shape=(NUM_FEAT1,1)))
model1.add(Activation("elu"))
model1.add(Dropout(0.5))
model1.add(Dense(16))
model1.add(Activation("elu"))
model1.add(Dropout(0.25))
model1.add(Flatten())

model2 = Sequential()
#input 
model2.add(Dense(32, input_shape=(NUM_FEAT1,1)))
model2.add(Activation("elu"))
model2.add(Dropout(0.5))
model2.add(Dense(16))
model2.add(Activation("elu"))
model2.add(Dropout(0.25))
model2.add(Flatten())

merged = Concatenate()([model1.output,model2.output])
z = Dense(128, activation="relu")(merged)
z = Dropout(0.25)(z)
z = Dense(1024, activation="relu")(z)
z = Dense(1, activation="sigmoid")(z)

model = Model(inputs=[model1.input, model2.input], outputs=z)

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

model.fit([x_train1,x_train2],y_train, batch_size=100, epochs=100, verbose=2)

例如:
下面是Conv1D和基于Attention机制的LSTM融合的keras结构:

def build_model(input):
    model1 = Sequential()
    model1.add(Conv1D(filters=24, kernel_size=2, padding='same', activation='relu', kernel_initializer="glorot_uniform",
                      input_shape=(input[1], input[0])))
    model1.add(MaxPooling1D(pool_size=2, padding='valid'))
    model1.add(Flatten())

    model2 = Sequential()
    model2.add(LSTM(64, return_sequences=True, input_shape=(input[1], input[0])))
    model2.add(Attention(units=32))         #对比不加attention  加上attention机制的RMSE更低,但是时间会更长一点
    model2.add(Dense(32))
    model2.add(Flatten())


    merged = Concatenate()([model1.output, model2.output])
    z = Dense(32)(merged)
    z = Dense(1)(z)

    model = Model(inputs=[model1.input, model2.input], outputs=z)
    model.compile(loss='mae', optimizer='adam', metrics=['mae'])

    return model

model = build_model([8,12,1])
print(model.summary())      #查看模型概述


#模型训练 
history = model.fit([train_X,train_X], train_y, epochs=100, batch_size=128, validation_data=([test_X,test_X],test_y), verbose=2,
                    shuffle=False, callbacks=[timecallback()])
  • 7
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值