首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Conv1D keras中合并6个输入

在Conv1D keras中合并6个输入
EN

Stack Overflow用户
提问于 2018-08-15 21:37:18
回答 1查看 1.2K关注 0票数 0

我已经用keras为Conv1D写了一个结构。我想合并相同形状的6个不同的输入。以前,Merge([ model1, model2, model3, model4, model5, model6], mode = 'concat')工作得很好,但在新的更新之后,我不能再使用Merge了。

拼接可以按如下方式使用,

from keras.layers import Concatenate model = Concatenate([ model1, model2, model3, model4, model5, model6])

但是我想在softmax层之前添加密集的层到这个合并的模型中,我不能添加到连接,因为它只接受张量输入。

如何在将其传递到2个密集层和softmax层之前合并6个输入??

我当前的代码如下:

代码语言:javascript
复制
input_shape = (64,250)

model1 = Sequential()
model1.add(Conv1D(64, 2, activation='relu', input_shape=input_shape))
model1.add(Conv1D(64, 2, activation='relu'))
model1.add(MaxPooling1D(2))
model1.add(Dropout(0.75))
model1.add(Flatten())

model2 = Sequential()
model2.add(Conv1D(128, 2, activation='relu', input_shape=input_shape))
model2.add(Conv1D(128, 2, activation='relu'))
model2.add(MaxPooling1D(2))
model2.add(Dropout(0.75))
model2.add(Flatten())

model3 = Sequential()
model3.add(Conv1D(128, 2, activation='relu', input_shape=input_shape))
model3.add(Conv1D(128, 2, activation='relu'))
model3.add(MaxPooling1D(2))
model3.add(Dropout(0.75))
model3.add(Flatten())

model4 = Sequential()
model4.add(Conv1D(128, 2, activation='relu', input_shape=input_shape))
model4.add(Conv1D(128, 2, activation='relu'))
model4.add(MaxPooling1D(2))
model4.add(Dropout(0.75))
model4.add(Flatten())

model5 = Sequential()
model5.add(Conv1D(128, 2, activation='relu', input_shape=input_shape))
model5.add(Conv1D(128, 2, activation='relu'))
model5.add(MaxPooling1D(2))
model5.add(Dropout(0.75))
model5.add(Flatten())

model6 = Sequential()
model6.add(Conv1D(128, 2, activation='relu', input_shape=input_shape))
model6.add(Conv1D(128, 2, activation='relu'))
model6.add(MaxPooling1D(2))
model6.add(Dropout(0.75))
model6.add(Flatten())

from keras.layers import Concatenate
model = Concatenate([ model1, model2, model3, model4, model5, model6])
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.75))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.75))

model.add(Dense(40, activation='softmax'))
opt = keras.optimizers.adam(lr=0.001, decay=1e-6)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit([d1, d2, d3, d4, d5, d6], label, validation_split=0.2, batch_size=25, epochs=30)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 21:51:39

您调用连接函数的方式不正确。拼接需要一个指定拼接轴的参数。您尝试实现的功能可以使用keras的函数式API来实现。只需更改以下代码

代码语言:javascript
复制
model = Concatenate([ model1, model2, model3, model4, model5, model6])
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.75))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.75))

model.add(Dense(40, activation='softmax'))

代码语言:javascript
复制
merged = Concatenate()([ model1.output, model2.output, model3.output, model4.output, model5.output, model6.output])

merged = Dense(512, activation='relu')(merged)
merged = Dropout(0.75)(merged)
merged = Dense(1024, activation='relu')(merged)
merged = Dropout(0.75)(merged)

merged = Dense(40, activation='softmax')(merged)

model = Model(inputs=[model1.input, model2.input, model3.input, model4.input, model5.input, model6.input], outputs=merged)

N.B

虽然这不是我要问的问题,但我注意到你一直在使用非常大的丢失率(但这可能取决于你试图解决的问题)。0.75的丢失率意味着你在训练时丢弃了75%的神经元。请考虑使用小丢失率,因为模型可能不收敛。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51859815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档