簡體   English   中英

如何將展平輸入添加到 keras object model

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM