keras中如何将不同的模型联合起来(以cnn/lstm为例)

可能会遇到多种模型需要揉在一起,如cnn和lstm,而我一般在keras框架下开局就是一句

model = Sequential()

然后model.add ,model.add , ......到最后

model.compile(loss=["mae"], optimizer='adam',metrics=[mape])

这突然要把模型加起来,这可怎么办? 

以下示例代码是将cnn和lstm联合起来,先是由cnn模型卷积池化得到特征,再输入到lstm模型中得到最终输出

import os
import keras
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
from keras.models import Model
from keras.layers import *
from matplotlib import pyplot
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
from keras.layers import Dense,Dropout,Activation,Convolution2D,MaxPooling2D,Flatten
from keras.layers import LSTM
def design_model():
    # design network
    inp=Input(shape=(11,5))
    reshape=Reshape((11,5,1))(inp)
    conv1=Convolution2D(32,3,3,border_mode='same',init='glorot_uniform')(reshape)
    print(conv1)
    l1=Activation('relu')(conv1)
    conv2=Convolution2D(64,3,3, border_mode='same',)(l1)
    l2=Activation('relu')(conv2)
    print(l2)
    m2=MaxPooling2D(pool_size=(2, 2), border_mode='valid')(l2)
    print(m2)
    reshape1=Reshape((10,64))(m2)
    lstm1=LSTM(input_shape=(10,64),output_dim=30,activation='tanh',return_sequences=False)(reshape1)
    dl1=Dropout(0.3)(lstm1)
    # den1=Dense(100,activation="relu")(dl1)
    den2=Dense(1,activation="relu")(dl1)
    model=Model(input=inp,outputs=den2)
    model.summary() #打印出模型概况
    adam = keras.optimizers.Adam(lr = 0.001, beta_1=0.95, beta_2=0.999,epsilon=1e-08)
    model.compile(loss=["mae"], optimizer=adam,metrics=['mape'])
    return model
model=design_model()
history = model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size,  validation_data=[test_x, test_y],verbose=2, shuffle=True)
# #save LeNet_model_files after train
model.save('model_trained.h5')

以上示例代码中cnn和lstm是串联即cnn输出作为lstm的输入,一条路线到底

如果想实现并联,即分开再汇总到一起

可用concatenate函数把cnn的输出端和lstm的输出端合并起来,后面再接上其他层,完成整个模型图的构建。

g2=concatenate([g,dl2],axis=1)

总结一下:

这是keras框架下除了Sequential另一种函数式构建模型的方式,更有灵活性,主要是在模型最后通过 model=Model(input=inp,outputs=den2)来确定整个模型的输入和输出

发布了64 篇原创文章 · 获赞 119 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_38412868/article/details/104335227