2016-07-19 11 views
2

x_aとx_bの2つの入力があります。ここで、x_aはカテゴリ変数(したがって埋め込み)で、x_bは通常のフィーチャマトリックスです。基本的にはx_bに重み行列W_bを乗算したい。これは10x64行列なので、64次元の出力になる。埋め込みと密度の高いレイヤーとの入力の統合

from keras.models import Sequential 
from keras.layers import Dense, Activation, Embedding, Merge 

encoder_cc = Sequential() 

# Input layer for countries(x_a) 
encoder_cc.add(Embedding(cc_idx.max(),64)) 
# Input layer for triggers(x_b) 
encoder_trigger = Sequential() 
# This should effectively be <W_b> 
encoder_trigger.add(Dense(64, input_dim=10, init='uniform')) 

model = Sequential() 
model.add(Merge([encoder_cc, encoder_trigger], mode='concat')) 

次に、通常のニューラルネットの処理を行う前に、これらの2つを結合(マージ)します。それ以外のエラーは次のとおりです。

Exception: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 1, 64), (None, 64)] 

私はこれをどのように解決できますか?

+1

両方のモデルの最後にFlatten()レイヤーを追加しようとします。 –

答えて

2

埋め込みレイヤーをシーケンス用に使用すると、入力が長さ1であるため、(None、1、64)の場合の形状(None、sequence_length、embedding_size)の3Dテンソルを出力します。

これを修正する方法は、Stephanが示唆しているように、 "Flatten()"レイヤーをencoder_ccモデルに追加するか、埋め込みレイヤーの後に "Reshape((64、))"を追加することです。 これは、出力の形状を(None、64)に強制し、他のモデルの形状に一致させます。

こちらがお役に立てば幸いです。

関連する問題