私はニューラルネットワークにはかなり新しく、それほどの経験はありません。私の問題は以下の通りです: 私はアレイがあり、877の異なるデータポイント、200のデータポイントがあります。これは、PCAのTfIdfで縮小された行列です。各行は、自分のデータセットの1ブロックのテキスト(段落自体)に対応しています。私はこのデータ(クラス1または0)のバイナリクラシファイアを作成しようとしています。次のように私は正常に簡単な高密度NNと半ば線形SVMと80%の正確さ、および約80%の精度で低持っている:Keras LSTM入力次元
model = Sequential()
len = np.shape(X_train)[0]
dim = np.shape(X_train)[1]
model.add(Dense(100, input_dim=dim, activation='relu'))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
#set up stopping
early_stopping = EarlyStopping(monitor='val_loss', patience=4, mode='auto')
#fit the model to the data
model.fit(X_train, y_train,epochs=500, batch_size=64,verbose = 1, validation_data =(X_test,y_test),callbacks = [early_stopping])
は、だから私はRNNのは、自然言語処理のために非常に人気があることが分かりました。私は同じ様式で1つを設定しようとしました。しかし、自分のデータに3次元があるはずです。私はこれがどのように機能するかについて非常に混乱しています。私はこの質問に基づいてコードを書いた:LSTM with kerasこの質問者は彼のデータに3次元を持たない。彼の仕事はどのくらい正確に2次元だけですか?次のように私のコードは次のとおりです。ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (877, 200)
は私が実際に第3次元が必要です:
model = Sequential()
len = np.shape(X_train)[0]
dim = np.shape(X_train)[1]
model.add(LSTM(output_dim = 100, input_length=len, input_dim = dim, return_sequences=True))
model.add(Dense(25, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
#set up stopping
early_stopping = EarlyStopping(monitor='val_loss', patience=4, mode='auto')
#fit the model to the data
model.fit(X_train, y_train,epochs=500, batch_size=64,verbose = 1, validation_data =(X_test,y_test),callbacks = [early_stopping])
誰かが、これは何が違うのと、なぜ私はこのエラーを取得しておく方法を説明していただけますか?もしそうなら、2D(データポイント、フィーチャ)アレイを3Dに変換する方法についてはどうすればよいですか?御時間ありがとうございます。
----------------------------編集----------------
X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
t_steps = np.shape(X_train)[1]
dim = np.shape(X_train)[2]
print(length,',',dim)
model.add(LSTM(output_dim = 100, input_shape = (t_steps,dim), return_sequences=True))
と(t_steps =次のエラーを取得しています:------------------
は、だから今、私はこれに私のコードを変更しました= 1、dim == 200)
ValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (877, 1)
ここからどこに行くのかわかりません。
---------------------------- EDIT#2 -------------- --------------------
return_sequences = False
と設定すると分かります。今私の正確さは恐ろしい47%です。
'X_train = X_train.reshape(X_train.shape [0]、1、X_train.shape [1])'を試しましたか? –
@MaximilianPetersそれは私が優先価値になると信じている形に変わった(877,1,200)が、私はそれが釣果を発することを期待している(None、877,200)。何か案は? – spencerktm30
ここで、「なし」はバッチサイズを表します。 –