我對神經網絡相當陌生,並沒有太多的經驗。我的問題如下: 我有一個數組,每個數據點有877個不同的數據點,200個特徵。它是一個PCA簡化的TfIdf矩陣,其中每行對應於我的數據集中的一段文本(如段落本身)。我正在嘗試爲此數據(類1或0)創建二進制分類器。我已經成功地得到了從低到80%的準確率中旬線性SVM,並且約80%的準確度有一個簡單的密集NN如下: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的是自然語言處理很受歡迎。我試着以同樣的方式設置一個。但是,我知道這應該是我的數據的第三維。我很困惑這是如何工作的。我根據這個問題編寫代碼:LSTM with keras這個提問者在他的數據中沒有3維。他的工作究竟只有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)
我是不是真的需要第三維?如果是這樣,我應該如何將我的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%。
你嘗試'X_train = X_train.reshape(X_train.shape [0],1,X_train.shape [1])'? –
@MaximilianPeters改變它的形狀(877,1,200),我認爲這將是首選值,但它期望(無,877,200),我發現它很腥。有任何想法嗎? – spencerktm30
這裏「無」代表批量大小。 –