如何在Keras对象模型中添加Flatten输入

我正在使用concatenate来更新之前使用merge的代码。然而,我不知道如何在Keras对象模型中将Flatten()添加到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 = 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()时,它工作了。我意识到我试图在对象模型中以顺序模型的方式使用Flatten()。因此,必须在将对象模型传递到代码中之前使用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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注