2016-06-22 10 views
4

2つの最初の層がフィードフォワードで、最後の層が反復するニューラルネットワークを構築したいと思います。Kerasで高密度層と繰り返し層をマージする

model = Sequential() 
model.add(Dense(150, input_dim=23,init='normal',activation='relu')) 
model.add(Dense(80,activation='relu',init='normal')) 
model.add(SimpleRNN(2,init='normal')) 
adam =OP.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) 
model.compile(loss="mean_squared_error", optimizer="rmsprop") 

、私はこのエラーを取得:ここ は私のコードがあるKerasで

Exception: Input 0 is incompatible with layer simplernn_11: expected ndim=3, found ndim=2. 
model.compile(loss='mse', optimizer=adam) 

答えて

4

Kerasでは、RNNレイヤーは入力が(nb_samples, time_steps, input_dim)と予想されることが正しいです。ただし、Denseレイヤーの後ろにRNNレイヤーを追加する場合は、RNNレイヤーの入力を再形成した後でもRNNレイヤーを追加できます。リシェイプは、連続モデルの第1層としても中間層としても使用できます。あなたが変更した場合、逐次モデルたとえば

model.add(Reshape((6, 2))) 
# now: model.output_shape == (None, 6, 2) 

に中間層として順次モデル

model = Sequential() 
model.add(Reshape((3, 4), input_shape=(12,))) 
# now: model.output_shape == (None, 3, 4) 
# note: `None` is the batch dimension 

リシェイプに第一層として

リシェイプ:例を以下に示しますあなたのコードは次のようになり、エラーは発生しません。私はそれをチェックし、エラーが報告されずにコンパイルされたモデルを報告しました。必要に応じてディメンションを変更できます。

from keras.models import Sequential 
from keras.layers import Dense, SimpleRNN, Reshape 
from keras.optimizers import Adam 

model = Sequential() 
model.add(Dense(150, input_dim=23,init='normal',activation='relu')) 
model.add(Dense(80,activation='relu',init='normal')) 
model.add(Reshape((1, 80))) 
model.add(SimpleRNN(2,init='normal')) 
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) 
model.compile(loss="mean_squared_error", optimizer="rmsprop") 
2

を緻密層は、(nb_samples、output_dimとして出力を与えるので、あなたは、緻密層の後Reccurrent層を置くことができません)。ただし、反復レイヤーでは、入力は(nb_samples、time_steps、input_dim)と予測されます。したがって、高密度レイヤーは2-D出力を与えますが、反復レイヤーは3-D入力を予期します。ただし、リバースレイヤーの後にDenseレイヤーを配置することで、逆の操作を行うことができます。

+1

は、実際に私がここで使うの入力が相関している、ご回答ありがとうございましたので、私はトンに考慮しなければならない時にシステムの出力を意味し、最後の層に短いメモリを作成したいです時刻t-1での出力と(したがって、最後のレイヤーを2つのフォワードレイヤーに先行させたい)あなたはどのようにシーケンス(time_steps)の数を変えることができるか知っていますか? –

関連する問題