[英]How to add flatten input to keras object model
我正在使用連接來更新以前使用合並的代碼。 但是我不知道如何將 Flatten() 添加到 keras object model 中的 input_shape 中。
以前的版本
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
我試圖讓它工作:
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培訓:
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)
我不知道如何精確匹配形狀。 我收到以下錯誤:
ValueError: Shapes (None, 4) and (None, 100, 4) are incompatible
因此,當我嘗試按照評論中的建議添加 Flatten() 時,它起作用了。 我意識到我正在嘗試在 object model 的順序 model 編碼方式中使用 Flatten()。 因此,在通過 object model 之前必須使用 Flatten() 代碼,它可以工作!
謝謝!
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.