簡體   English   中英

如何合並經過不同數據流訓練的兩個CNN?

[英]How to merge two CNN that are trained over different data stream?

我想合並經過不同數據集訓練的兩個CNN。 我采用了兩個順序模型並將其合並。 但是,使用自定義的fit_generato時,驗證損失不會收斂。 如何傳遞不同數據集的生成器?

input1_1 = keras.layers.Input(shape=(129,129,3))
x1 = keras.layers.Conv2D(kernel_size = (3,3), filters = 32, 
activation='PReLU')(input1_1)

x3 = keras.layers.MaxPooling2D(2,2)(x1)
x4 = keras.layers.Conv2D(kernel_size = (5,5), filters = 64, 
activation='relu')(x3)
x5 = keras.layers.MaxPooling2D(2,2)(x4)
x6 = keras.layers.Conv2D(kernel_size = (7,7), filters = 128, 
activation='relu')(x5)
d1_1 = keras.layers.Dropout(0.5)(x6)
br1_1= keras.layers.MaxPooling2D(2,2)(d1_1)
br1_1 = keras.layers.Flatten()(br1_1)


input2_2 = keras.layers.Input(shape=(129,129,3))
x1 = keras.layers.Conv2D(kernel_size = (3,3), filters = 32, 
activation='PReLU')(input2_2)

x3 = keras.layers.MaxPooling2D(2,2)(x1)
x4 = keras.layers.Conv2D(kernel_size = (5,5), filters = 64, 
activation='relu')(x3)
x5 = keras.layers.MaxPooling2D(2,2)(x4)
x6 = keras.layers.Conv2D(kernel_size = (7,7), filters = 128, 
activation='relu')(x5)
d2_2 = keras.layers.Dropout(0.5)(x6)
br2_2= keras.layers.MaxPooling2D(2,2)(d2_2)
br2_2 = keras.layers.Flatten()(br2_2)

added1_1 = keras.layers.concatenate([br1_1, br2_2], axis=1)
d2_3 = keras.layers.Dropout(0.5)(added1_1)
# d2_4 = keras.layers.Dropout(0.4)(d2_3)
out1_1 = keras.layers.Dense(159,activation='softmax',kernel_regularizer=regularizers.l2(0.01),
            activity_regularizer=regularizers.l1(0.01))(d2_3)
# model=keras.layers.Conv2DTranspose(kernel_size= (4,4), filters=10, activation='relu')(out)
modal1_1 = keras.models.Model(inputs=[input1_1,input2_2], outputs=out1_1)
modal1_1.summary()

modal1_1.compile(##args)
modal1_1.fit_genrator(????)

應該在fit_generator中傳遞哪些參數,該參數將結合除zip之外的兩個生成器。 我已經使用Zip進行了一些實驗,但是並沒有解決目的。

目前還不清楚您要做什么。 如果以后不使用圖層,為什么還要合並圖層? 我認為您需要的是:

layer = concatenate ([face, sig])
model = Model (inputs = [inputs], outputs=[layer])

好的,這是一個簡短的例子。

input_face = Input(shape=(148, 148, 3))
input_sig = Input(shape=(148, 148, 3))

face = Conv2D(32, kernel_size=(3, 3))(input_face)
face = Conv2D(32, kernel_size=(3, 3))(face)
face = Flatten()(face)

sig = Conv2D(32, kernel_size=(3, 3))(input_sig)
sig = Conv2D(32, kernel_size=(3, 3))(sig)
sig = Flatten()(sig)

output = concatenate([sig, face])
output = Dense(2, activation='softmax')(output)
model = Model(inputs=[input_face, input_sig], outputs=[output])
model.compile(#args)
model.fit([np.array, np.array])

所以這里的輸入數據應該是包含圖像的兩個numpy數組的列表

您應該這樣做:

 model.fit_generator([face_gen, sig_gen], arg)

嘗試重寫您的生成器,以使其生成這樣的輸出([sig,face],target),因為fit_generator只使用一個生成器。

暫無
暫無

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

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