2016-09-02 5 views
2

ケラスでステートフルLSTMを作成したいと思います。私は次のようなコマンドを出しました:ケラスステートフルLSTMエラー

model.add(LSTM(300,input_dim=4,activation='tanh',stateful=True,batch_input_shape=(19,13,4),return_sequences=True)) 

ここで、バッチサイズ= 19です。しかし、実行中に、それは私が私のスクリプト内の任意の場所にバッチサイズ32を指定していないエラーに

Exception: In a stateful network, you should only pass inputs with a number of samples that can be divided by the batch size. Found: 8816 samples. Batch size: 32. 

を与え、19は8816

答えて

2

を動的にサイズデータやバッチ:

サイズデータとトレーニングサンプルの分割:バッチサイズに学習サンプルの

data_size = int(len(supervised_values)) 
train_size_initial = int(data_size * train_split) 
x_samples = supervised_values[-data_size:, :] 

サイズ番号:

if train_size_initial < batch_size_div: 
    batch_size = 1 
else: 
    batch_size = int(train_size_initial/batch_size_div) 
train_size = int(int(train_size_initial/batch_size) * batch_size) # provide even division of training/batches 
val_size = int(int((data_size - train_size)/batch_size) * batch_size) # provide even division of val/batches 
print('Data Size: {} Train Size: {} Batch Size: {}'.format(data_size, train_size, batch_size)) 

列車と検証セットにデータを分割

train, val = x_samples[0:train_size, 0:-1], x_samples[train_size:train_size + val_size, 0:-1] 
6

model.fit()(例えばmodel.train_on_batchではなく)バッチ処理を行うことで割り切れます。その結果、batch_sizeパラメータのデフォルト値は32です。

これを入力バッチサイズに変更すると、期待どおりに動作します。

例:

batch_size = 19 

model = Sequential() 
model.add(LSTM(300,input_dim=4,activation='tanh',stateful=True,batch_input_shape=(19,13,4),return_sequences=True)) 

model.fit(x, y, batch_size=batch_size) 
+0

私は試みました。しかし、もう一度同じエラーが返されます –

+0

次に、エラーを複製した最小限の動作例で質問を更新する必要があります。 – nemo