I'm using concatenate to update the code which used merge previously. However i do not know how to add Flatten() to the input_shape in the keras object model.
Previous version
def linear_model_combined(optimizer='Adadelta'):
modela = Sequential()
modela.add(Flatten(input_shape=(100, 34)))
modela.add(Dense(1024))
modela.add(Activation('relu'))
modela.add(Dense(512))
modelb = Sequential()
modelb.add(Flatten(input_shape=(100, 34)))
modelb.add(Dense(1024))
modelb.add(Activation('relu'))
modelb.add(Dense(512))
model_combined = Sequential()
model_combined.add(merge([modela, modelb], mode='concat'))
model_combined = concatenate([modela,modelb])
model_combined.add(Activation('relu'))
model_combined.add(Dense(256))
model_combined.add(Activation('relu'))
model_combined.add(Dense(4))
model_combined.add(Activation('softmax'))
model_combined.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
return model_combined
What i am trying to make it work:
def linear_model_combined(optimizer='Adadelta'):
modela_in = Input(shape=(100,34))
modela_out1 = Dense(1024,activation='relu',name='layer_a1')(modela_in)
modela_out2 = Dense(512,activation='relu',name='layer_a2')(modela_out1)
modela = Model(modela_in,modela_out2)
modelb_in = Input(shape=(100,34))
modelb_out1 = Dense(1024,activation='relu',name='layer_b1')(modelb_in)
modelb_out2 = Dense(512,activation='relu',name='layer_b2')(modelb_out1)
modelb = Model(modelb_in,modelb_out2)
modelconcat_in = concatenate([modela_out2,modelb_out2])
modelconcat_out1 = Dense(256,activation='relu',name='layer_c1')(modelconcat_in)
modelconcat_out = Dense(4,activation='softmax',name='layer_c2')(modelconcat_out1)
model_merged = Model([modela_in,modelb_in], modelconcat_out)
model_merged.compile(loss='categorical_crossentropy',optimizer=optimizer, metrics=['accuracy'])
return model_merged
Model training:
model = linear_model_combined()
hist = model.fit([x_train_speech, x_train_speech2], Y,
batch_size=100, epochs =80, verbose=1, shuffle = True,
validation_split=0.2)
I do not know how to match the shapes exactly. I get the following error:
ValueError: Shapes (None, 4) and (None, 100, 4) are incompatible
So, it worked when i tried to add Flatten() as suggested in the comments. I realized i was trying to use Flatten() in a sequential model coding way for object model. So, Flatten() must be used before passing the object model as in code and it works!
Thankyou!
def linear_model_combined(optimizer='Adadelta'):
modela_in = Input(shape=(100,34))
modela_inf = Flatten()(modela_in)
modela_out1 = Dense(1024,activation='relu',name='layer_a1')(modela_inf)
modela_out2 = Dense(512,activation='relu',name='layer_a2')(modela_out1)
modela = Model(modela_in,modela_out2)
modelb_in = Input(shape=(100,34))
modelb_inf = Flatten()(modelb_in)
modelb_out1 = Dense(1024,activation='relu',name='layer_b1')(modelb_inf)
modelb_out2 = Dense(512,activation='relu',name='layer_b2')(modelb_out1)
modelb = Model(modelb_in,modelb_out2)
modelconcat_in = concatenate([modela_out2,modelb_out2])
modelconcat_out1 = Dense(256,activation='relu',name='layer_c1')(modelconcat_in)
modelconcat_out = Dense(4,activation='softmax',name='layer_c2')(modelconcat_out1)
model_merged = Model([modela_in,modelb_in], modelconcat_out)
model_merged.compile(loss='categorical_crossentropy',optimizer=optimizer, metrics=['accuracy'])
return model_merged
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.