1

我有一個數據集C50,000(二進制)樣本,每個樣本的128功能。類標籤也是二進制文件,即1-1。例如,樣本看起來像這樣[1,0,0,0,1,0, .... , 0,1] [-1]。我的目標是根據二進制類(即1或-1)對樣本進行分類。我想嘗試使用Recurrent LSTM來生成一個很好的分類模型。是否可以使用STATEFUL循環NN(LSTM)進行分類

tr_C, ts_C, tr_r, ts_r = train_test_split(C, r, train_size=.8) 
batch_size = 200 

print('>>> Build STATEFUL model...') 
model = Sequential() 
model.add(LSTM(128, batch_input_shape=(batch_size, C.shape[1], C.shape[2]), return_sequences=False, stateful=True)) 
model.add(Dense(1, activation='softmax')) 

print('>>> Training...') 
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
model.fit(tr_C, tr_r, 
      batch_size=batch_size, epochs=1, shuffle=True, 
      validation_data=(ts_C, ts_r)) 

但是,我越來越壞的準確性,不超過55%:要做到這一點,我一直在使用Keras庫編寫下面的代碼。我試圖改變激活函數以及希望提高精度的損失函數,但沒有任何效果。令人驚訝的是,當我使用多層感知器時,我的準確率達到了97%左右。因此,我開始質疑LSTM是否可以用於分類,或者我的代碼有缺失或錯誤。請注意,我想知道代碼是否有缺失或錯誤來提高準確性。任何幫助或建議表示讚賞。

回答

1

當你只有一個輸出單位時,你不能使用softmax作爲輸出,因爲它總會輸出一個固定值1。您需要將輸出激活更改爲sigmoid或將輸出單位編號設置爲2,並將損失設置爲categorical_crossentropy。我會建議第一個選項。

+0

感謝您的回覆。非常感激 – Kris

相關問題