2017-04-07 21 views
0

特定の入力がアクティブになったときにシーケンスを生成したい。私は、対応する入力ニューロンの活性化に従って、奇数または偶数シーケンスを生成したい。 LSTMを使用してモデルを作成しようとしていますが、これは短期間の注文を覚えているからです。LSTMを使ってシーケンスを生成する方法は?

は、私がこのよう

import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense,LSTM 


X=np.array([[1,0], 
      [0,1]]) 

Y=np.array([[1,3,5,7,9], 
      [2,4,6,8,10]]) 

model = Sequential() 
model.add(Dense(10, input_shape=(2)) 
model.add(LSTM(5, return_sequences=True)) 
model.add(LSTM(5, return_sequences=False)) 
model.add(Dense(5)) 
model.compile(loss='mse', optimizer='adam') 

model.fit(X,Y) 

を試してみました。しかし、私はモデルに合うようにしようとしたときにその

NameError: name 'model' is not defined

答えて

2

KerasでRNNを使用するには、データに追加のディメンションを導入する必要があります。タイムステップ。あなたの場合、5つのタイムステップが必要です。入力データと出力データの間に1対多の関係を持たせたいので、入力データを5回複製する必要があります。最後のLSTMレイヤーもシーケンスを返すように設定する必要があります。これは、最後のタイムスタープだけでなく、すべてのタイムステップの結果が必要なためです。 Denseレイヤーに時間ディメンションを認識させるには、TimeDistributedレイヤーでラップする必要があります。最後のDenseレイヤーは、タイムステップごとに1つの結果しか出力しないため、1つの出力しか持ちません。私はおよそ4000エポック次のような結果の後に取得する。これにより

import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense,LSTM 
from keras.layers.wrappers import TimeDistributed 

X=np.array([[[1, 0], 
     [1, 0], 
     [1, 0], 
     [1, 0], 
     [1, 0]], 

     [[0, 1], 
     [0, 1], 
     [0, 1], 
     [0, 1], 
     [0, 1]]]) 


Y=np.array([[[ 1], 
     [ 3], 
     [ 5], 
     [ 7], 
     [ 9]], 

     [[ 2], 
     [ 4], 
     [ 6], 
     [ 8], 
     [10]]]) 


model = Sequential() 
model.add(TimeDistributed(Dense(10), input_shape=(5, 2))) 
model.add(LSTM(5, return_sequences=True)) 
model.add(LSTM(5, return_sequences=True)) 
model.add(TimeDistributed(Dense(1))) 
model.compile(loss='mse', optimizer='adam') 

model.fit(X,Y, nb_epoch=4000) 

model.predict(X) 

:返信用

Epoch 4000/4000 
2/2 [==============================] - 0s - loss: 0.0032 
Out[20]: 
array([[[ 1.02318883], 
     [ 2.96530271], 
     [ 5.03490496], 
     [ 6.99484348], 
     [ 9.00506973]], 

     [[ 2.05096436], 
     [ 3.96090508], 
     [ 5.98824072], 
     [ 8.0701828 ], 
     [ 9.85805798]]], dtype=float32) 
+0

おかげで、次のシーケンスを予測する良い方法はあります '[[11,13,15,17、 19]、[12,14,16,18,20]] 'このシーケンスでのトレーニングなし – Eka

1

変更に私の両方のコードの下model.add(Dense(10, input_shape=(2))

model.add(Dense(10, input_shape=(2,))) 

model.add(Dense(5)) # Remove this 

への注意をこのエラーを与えます同等です:

model = Sequential() 
model.add(Dense(32, input_shape=(2,))) 

model = Sequential() 
model.add(Dense(32, input_dim=2)) 
関連する問題