模型并联
将两个CNN输出接入到LSTM中做并联处理
书写两个模型:
model_left=Sequential()
input_left=Input(shape=(16,10, 32, 32, 1))
model_left=TimeDistributed(Conv3D(32, (3, 3, 3), strides=(1, 1, 1), name="conv",
input_shape=(10, 32, 32, 1), padding="same", activation="relu"))(input_left)
model_left=TimeDistributed(Conv3D(32, (3, 3, 3), strides=(
1, 1, 1), name="CONV", padding="same", activation="relu"))(model_left)
model_left=TimeDistributed(MaxPooling3D(name="pool1", strides=(
2, 2, 2), pool_size=(2, 2, 2), padding="valid"))(model_left)
model_left=TimeDistributed(Flatten())(model_left)
model_left=Dropout(0.5)(model_left)
model_left=Model(input_left,model_left)
# 接入左边模型的输入和输出 model_left
model_right = Sequential()
input_right=Input(shape=(16,10, 32, 32, 1))
model_right=TimeDistributed(Conv3D(32, (3, 3, 3), strides=(1, 1, 1), name="conv",
input_shape=(10, 32, 32, 1), padding="same", activation="relu"))(input_right)
model_right=TimeDistributed(Conv3D(32, (3, 3, 3), strides=(
1, 1, 1), name="CONV", padding="same", activation="relu"))(model_right)
model_right=TimeDistributed(MaxPooling3D(name="pool", strides=(
2, 2, 2), pool_size=(2, 2, 2), padding="valid"))(model_right)
model_right=TimeDistributed(Flatten())(model_right)
model_right=Dropout(0.5)(model_right)
model_right=Model(input_right,model_right)
# 接入右边模型的输入和输出 model_right
将两个模型结合在一起
concatenat = keras.layers.concatenate([model_left.output, model_right.output],axis=1)
x = Bidirectional(LSTM(16, return_sequences=False,
stateful=False))(concatenat)
x=Dropout(.3)(x)
final_output = Dense(input_y.shape[1], activation='softmax', name='output')(x)
model = Model(inputs=[input_left, input_right], outputs=final_output)
输出
调用API实现输出,和以往一样用fit以及evaluate
使用callbacks,控制训练