簡體   English   中英

在Conv1D keras中合並6個輸入

[英]Merge 6 inputs in Conv1D keras

我已經在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層之前向此合並模型添加Dense層,我無法將其添加到Concatenate中,因為它僅接受張量輸入。

我如何合並6個輸入,然后再將其傳遞到2個密集層和softmax層?

我當前的代碼如下,

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)

您調用串聯函數的方式不正確。 串聯需要一個指定串聯軸的參數。 您可以嘗試使用keras的功能性API來實現。 只需更改以下代碼

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'))

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)

NB

雖然這不是要問的問題,但我注意到您一直使用非常高的輟學率(但這可能取決於您要解決的問題)。 0.75的下降率意味着您在訓練時正在下降75%的神經元。 請考慮使用較小的丟棄率,因為該模型可能無法收斂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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