2017-08-30 11 views
1

間違っている:1つのメトリックの増加を意味し、1Keras LSTM入力形状は、私は、このデータセットの上に学びますKerasでシンプルなRNN作成しようとしています

x_train = [ 
    [0,0,0,1,-1,-1,1,0,1,0,...,0,1,-1], 
    [-1,0,0,-1,-1,0,1,1,1,...,-1,-1,0], 
    ... 
    [1,0,0,1,1,0,-1,-1,-1,...,-1,-1,0] 
] 

を-1の減少と0の手段を意味し、メトリックの変更はありません。各アレイは、83のメトリックの83の項目を有し、各アレイの出力(ラベル)は、単一のメトリックにこれらの指標の効果を示すカテゴリ配列である:

[[ 0. 0. 1.] 
[ 1. 0. 0.], 
[ 0. 0. 1.], 
... 
[ 0. 0. 1.], 
[ 1. 0. 0.]] 

Iは、以下のコードでKerasLSTMを使用しました:

def train(x, y, x_test, y_test): 
    x_train = np.array(x) 
    y_train = np.array(y) 
    print x_train.shape 
    y_train = to_categorical(y_train, 3) 
    model = Sequential() 
    model.add(LSTM(128,input_dim=83, input_length=3)) 
    model.add(Dropout(0.5)) 
    model.add(Dense(3, activation='softmax')) 
    opt = optimizers.SGD(lr=0.1, decay=1e-2) 
    model.compile(loss='categorical_crossentropy', 
      optimizer=opt, 
      metrics=['accuracy']) 
    model.fit(x_train, y_train, batch_size=128, nb_epoch=200) 

ラインprint x_train.shapeの出力は(1618, 83)で、私は自分のコードを実行したとき、私はこのエラーを取得:

Traceback (most recent call last): 
    File "temp.py", line 171, in <module> 
    load() 
    File "temp.py", line 166, in load 
    train(x, y, x_test, y_test) 
    File "temp.py", line 63, in train 
    model.fit(x_train, y_train, batch_size=128, nb_epoch=200) 
    File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 652, in fit 
    sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1038, in fit 
    batch_size=batch_size) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 963, in _standardize_user_data 
    exception_prefix='model input') 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 100, in standardize_input_data 
    str(array.shape)) 
Exception: Error when checking model input: expected lstm_input_1 to have 3 dimensions, but got array with shape (1618, 83) 

Embeddingを使用せず、LSTMレイヤにinput_shapeを追加します。

+0

この問題は時系列問題ですか?行の各値は、同じ行の前の値に依存しますか? – DJK

+0

@ djk47463 'x_train'配列の各行は特定の日付です。その日付の各「83メトリック」の1つに対して、各日付の各項目は「増加(1)」、「減少(-1)」または「変更なし(0)」と表示されます。したがって、例えば、「行10」の「項目20」は、「行9」または「行11」の「項目20」と「行10」の「項目19」または「項目20」の両方に依存しない。 yは行の日付と同じ日付の1つの単一メトリックに対するこれらの「83メトリック」の影響です。 –

+0

LSTMを使用するのは意味がありません。ニューラルネットは興味深いものですが、それらも非常に複雑です。異なる層の異なるアプリケーションを理解するのに十分な知識がなければ、より多くの研究をすることをお勧めします。 ANNはMLのアルゴリズムの1つで、この分野での理解を深めるのに役立つより多くの単純なものがあります。それ以外の場合、@Matias Valdenegroは質問に正しく答えました。あなたのデータは3Dでなければならない – DJK

答えて

1

LSTMは反復レイヤーです。入力データは、2次元の入力形状に対応する3次元でなければなりません。実際には、これはデータの形状が(num_samples, timesteps, features)で、入力形状が(timesteps, features)でなければならないことを意味します。

あなたの場合、データと入力の両方の形状でtimestepsディメンションが欠落しています。

+0

@EmadHelmiあなたのケースでは83のような機能があるようですが、LSTMプロセスのシーケンスとしてtimestepsディメンションがシーケンスの長さを定義し、データがシーケンスではないようですのでわかりません。 –

+0

@EmadHelmi問題はライブラリではなく、あなたが選んだ特定のアルゴリズムです。 –

+0

あなたはどのアルゴリズムがこの問題に対してより良いと思いますか? –

関連する問題