如何在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

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

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