簡體   English   中英

如何組合從兩個 cnn 模型中提取的特征?

[英]How to combine features extracted from two cnn models?

我有兩個 cnn 模型都遵循相同的架構。 我在cnn1和'train set 2上訓練了'train set 1'; 在 cnn2 上。然后我使用以下代碼提取了功能。

#cnn1

    model.pop() #removes softmax layer
    model.pop() #removes dropoutlayer
    model.pop() #removes activation layer
    model.pop() #removes batch-norm layer
    model.build() #here lies dense 512
    features1 = model.predict(train set 1)
    print(features1.shape) #600,512

#cnn2

    model.pop() #removes softmax layer
    model.pop() #removes dropoutlayer
    model.pop() #removes activation layer
    model.pop() #removes batch-norm layer
    model.build() #here lies dense 512
    features2 = model.predict(train set 2)
    print(features2.shape) #600,512

如何將這些特征 1 和特征 2 結合起來,使 output 形狀為 600,1024?

最簡單的解決方案:

您可以通過這種方式簡單地連接兩個網絡的 output:

features = np.concatenate([features1, features2], 1)

選擇:

給定兩個具有相同結構的訓練模型,無論它們的結構是什么,您都可以通過這種方式組合它們

# generate dummy data
n_sample = 600
set1 = np.random.uniform(0,1, (n_sample,30))
set2 = np.random.uniform(0,1, (n_sample,30))

# model 1
inp1 = Input((30,))
x1 = Dense(512,)(inp1)
x1 = Dropout(0.3)(x1)
x1 = BatchNormalization()(x1)
out1 = Dense(3, activation='softmax')(x1)
m1 = Model(inp1, out1)
# m1.fit(...)

# model 2
inp2 = Input((30,))
x2 = Dense(512,)(inp2)
x2 = Dropout(0.3)(x2)
x2 = BatchNormalization()(x2)
out2 = Dense(3, activation='softmax')(x2)
m2 = Model(inp2, out2)
# m2.fit(...)

# concatenate the desired output
concat = Concatenate()([m1.layers[1].output, m2.layers[1].output]) # get the outputs of dense 512 layers
merge = Model([m1.input, m2.input], concat)

# make combined predictions
merge.predict([set1,set2]).shape  # (n_sample, 1024)

暫無
暫無

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

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