私はニューラル ネットワークにまったく慣れておらず、あまり経験がありません。私の問題は次のとおりです。配列、877 の異なるデータ ポイント、データ ポイントあたり 200 の機能があります。これは、PCA で縮小された TfIdf マトリックスであり、各行は、データセットからのテキストの 1 つのブロック (つまり、段落自体) に対応します。このデータ (クラス 1 または 0) のバイナリ分類子を作成しようとしています。次のように、線形 SVM で 80% 程度の精度を達成し、単純な高密度 NN で約 80% の精度を達成しました。
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 が自然言語処理で非常に人気があることを知りました。ほぼ同じ方法で設定してみました。ただし、データには 3 次元があるはずだと理解しています。これがどのように機能するかについて非常に混乱しています。私はこの質問に基づいてコードを書きました: LSTM with keras this asker does not have 3 dimension in his data. 彼は 2 次元だけでどのように仕事をしているのでしょうか? 私のコードは次のとおりです。
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])
これがどのように異なるのか、なぜこのエラーが発生し続けるのかを誰かが説明してもらえますか:ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (877, 200)
3次元は本当に必要ですか?もしそうなら、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)
ここからどこへ行くべきかわからない。
----------------------------編集#2------------------- ---------------
私が設定した場合、return_sequences = False
それが機能することがわかりました。しかし、私の精度は恐ろしいもので、47% です。