我正在使用CNN開發分類模型,現在我想在我的問題中應用分類算法(Bilinear CNN Models for Fine-grained Visual Recognition Tsung-Yu Lin Aruni RoyChowdhury Subhransu Maji University of Massachusetts, Amherst)。矩陣產品到keras中的兩個模型的輸出
具體來說,現在我想做兩個CNN模型的輸出矩陣的外積,並且我已經完成了矩陣的轉置,現在我只想把兩個矩陣相乘keras,其大小是,512,49)和(無,49,512)。
我嘗試使用合併層keras,但有些錯誤出現了:
當我使用點模式,
ValueError: Dimension incompatibility using dot mode: 49 != 512. Layer shapes: (None, 512, 49), (None, 49, 512)
當我使用乘模式,
ValueError: Only layers of same output shape can be merged using mul mode. Layer shapes: [(None, 512, 49), (None, 49, 512)]
我不知道如何解決它,請幫助 我!這裏是我的問題的一些代碼:
所有的t_model = applications.VGG16(weights='imagenet', include_top=False,
input_shape=(224, 224, 3))
model_a = Sequential()
model_a.add(t_model)
def trans_1(conv):
conv = tf.reshape(conv, [-1, 49, 512])
return conv
model_a.add(Lambda(trans_1, output_shape=[49, 512]))
s_model = applications.VGG16(weights='imagenet', include_top=False,
input_shape=(224, 224, 3))
model_b = Sequential()
model_b.add(s_model)
def trans_2(conv):
conv = tf.reshape(conv, [-1, 49, 512])
conv = tf.transpose(conv, perm = [0, 2, 1])
return conv
model_b.add(Lambda(trans_2, output_shape=[512, 49]))
f_model = Sequential()
f_model.add(Merge([model_b, model_a], mode='dot'))
真的很有幫助,非常感謝你! –