CNNを使用して分類モデルを作成していますが、今では問題の分類アルゴリズムを適用したい(Bilinear CNN Models for Fine-grained Visual Recognition Tsung-Yu Lin Aruni RoyChowdhury Subhransu Maji University of Massachusetts, Amherst)。ケラスの2つのモデルの出力に行列積をかける
具体的には、今、私は2つのCNNモデルの2つの出力マトリックスに外積をしたい、と私は今、私はその大きさである(なし、kerasで2つの行列を乗算したい、行列の転置を終了しました、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'))
本当にありがとう、本当にありがとう! –