2017-11-26 5 views
0

KerasとRNNを初めて使用しました 列車形状セット(1795575,6)とラベル配列を含むデータセットのKerasでLSTM RNNを使用してクラシファイアモデルを構築する必要があります形状(575643,6)のテストセットと形状のラベル配列(575643,1.Again、ラベルは11(0から10まで)私は私があなたの助けと感謝に感謝?KerasでLSTMクラシファイアモデルを構築するには

from keras.models import Sequential 
from keras.layers import LSTM, Dense 
from keras.optimizers import SGD 
import numpy as np 
data_dim = ? 
timesteps = ? 
num_classes = ? 
batch_size = ? 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) 
model = Sequential() 
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape= 
(batch_size, timesteps, data_dim))) 
model.add(LSTM(32, return_sequences=True, stateful=True)) 
model.add(LSTM(32, stateful=True)) 
model.add(Dense(?, activation='softmax')) 
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy']) 
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
shuffle=False,validation_data=(test_X_arr, test_y_arr)) 

のために置く必要がある10)

は、どのように私は私のDataset.What値を満たすために、次のKerasモデルを形作ることができますあなたがやりたい何dvance

+0

これは問題によって異なります。問題のタイムスタンプの意味は何ですか?あなたのデータのシーケンスは何を表していますか?私はあなたが与えた形に応じて、別のアーキテクチャを使用するべきであり、私は尋ねています。 –

+0

あなたの返信に感謝します。私は侵入検知のためにRNNネットワークを実装する必要があります –

+0

もう1つの質問:) - あなたは "列車の形を含むデータセット(1795575,6)"を書いたので、列車に1795575の例があることを意味しますそれぞれの例は6要素(スカラー)のベクトルですが、トレーニングデータには不明な例が含まれていますが、各例は1795575タイムスタンプのベクトルであり、各タイムスタンプは6要素のベクトルです。 –

答えて

0

はこれです:

from keras.models import Sequential 
from keras.layers import LSTM, Dense 
from keras.optimizers import SGD 
import numpy as np 
data_dim = 1 # EACH TIMESTAMP IS SCALAR SO SHAPE=1 
timesteps = 6 # EACH EXAMPLE CONTAINS 6 TIMESTAMPS 
num_classes = 1 # EACH LABEL IS ONE NUMBER SO SHAPE=1 
batch_size = 1 # TAKE SIZE THAT CAN DIVIDE THE NUMBER OF EXAMPLES IN THE TRAIN DATA. THE HIGHER THE BATCH SIZE THE BETTER! 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) 
model = Sequential() 
model.add(LSTM(32, return_sequences=True, stateful=True,batch_input_shape= 
(batch_size, timesteps, data_dim))) 
model.add(LSTM(32, return_sequences=True, stateful=True)) 
model.add(LSTM(32, stateful=True)) 
model.add(Dense(1, activation='softmax')) # AT THE END YOU WANT ONE VALUE (LIKE THE LABELS) -> SO DENSE SHOULD OUTPUT 1 NODE 
model.compile(loss='sparse_categorical_crossentropy',optimizer='sgd', 
metrics=['accuracy']) 
model.fit(train_X_arr, train_y_arr,batch_size=batch_size, epochs=epochs, 
shuffle=False,validation_data=(test_X_arr, test_y_arr)) 

と、それはそれです。

編集:列車データを(1795575,6,1) - > 1795575のように再構成してください。例はそれぞれ6つのタイムスタンプを持ち、各タイムスタンプはスカラーです。
これは、np.expand_dims(train_data、-1)を使用すると簡単に実現できます。

+0

@ Dvir Samuel助けてくれてありがとう、しかし、私が32のbatch_sizeを使ってコードを試したところ、次のエラーが出ました: "ステートフルなネットワークでは、バッチサイズで割ることができるサンプルの数を入力します。見つかった:1795575 samples "。私は1795575を置こうとしましたが、次のエラーがありました。"ステートフルなネットワークでは、バッチサイズで割ることができるサンプル数だけ入力を渡す必要があります。 Found:575643サンプル。それから私は1のバッチサイズを入れようとしました –

+0

ああ私が見る、モデルは完全な状態です。バッチサイズには17,95575を1,5,15などのように分割する数値を付けてください(これらのすべてが1795575を分けることができます)。ですから、batch_size = 1ならOKですが、問題はありませんが、問題がある場合は、batch_sizeの値を大きくすることをお勧めします。 (そして、ところで、あなたが私の答えをアップアップしてそれを受け入れるなら、私はうれしいでしょう:)) –

+0

@ Dvir Samuelありがとうございます。私は別の質問があります。異なるタイムスタンプの数が10と5の同じデータセットを持っている場合、6 "タイムステップ= 6#を変更する必要があります。各サンプルには6つのタイムスタンプが含まれています" –

関連する問題