2017-08-15 29 views
-2

我使用一些簡單的模型:如何解決神經網絡的準確性成爲不變的問題?

model = Sequential() 

model.add(Dense(12, input_dim=len(allKeys), activation='tanh', kernel_initializer='uniform')) 
model.add(Dense(31, activation='tanh')) 
model.add(Dense(N, activation='relu')) 

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) 

model.fit(X, Y, epochs=500, batch_size=40) 

X.shape(31,147) Y.shape(31,13)

在X的值是0或一些下低於1.0 。 Y是稀疏陣列,一列中的一列是1,其餘列是0.

acc始終低於0.25。大部分時間只是0.12。如果我添加丟失圖層,我會發現acc值會發生變化,但不會超過0.25,大多數時候只會給出更糟糕的結果。

Epoch 290/500 31/31 [==============================] - 0s - loss:9.6283 - acc:0.1290 Epoch 291/500 31/31 [==============================] - 0s - loss: 9.6283 - acc:0.1290 Epoch 292/500 31/31 [==============================] - 0s - loss :9.6283 - acc:0.1290

----------------------------更新後的代碼---------- --------------------

model = Sequential() 

model.add(Dense(12, input_dim=len(allKeys), activation='tanh', kernel_initializer='uniform')) 
model.add(Dense(31, activation='tanh')) 
model.add(Dropout(0.2)) 
model.add(Dense(N, activation='softmax')) 

sgd = SGD(lr=0.001, momentum=0.3, decay=0.0, nesterov=False) 
model.compile(optimizer=sgd,loss='categorical_crossentropy',metrics=['accuracy']) 
one_hot_labels = to_categorical(Y, num_classes=N) 

model.fit(X, one_hot_labels, epochs=100, batch_size=40) 
+0

此網絡是否進行迴歸或分類?在分類的情況下有多少班? –

+1

如果你有8個類,其準確性理論上爲零,因爲它可能每次都觸發同一個類,嘗試繪製張量板中的激活直方圖和分佈。什麼是輸入?這個架構可能太難了。 –

+0

更新了代碼,1.使用步驟0.001。 2.嘗試/不輟學。 3.將最後一步從relu改爲softmax。 4.用於to_category。仍然有同樣的結果; – BlueDolphin

回答

0

嘗試玩學習率。對於這種情況,我看起來像默認值太高。

+0

以0.001作爲學習率嘗試,仍然得到低準確度。 0.064。查看更新的代碼。 – BlueDolphin

1

基於行

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) 

你打算做分類。如果是這樣的話,你需要改變

model.add(Dense(N, activation='relu')) 

model.add(Dense(N, activation='softmax')) 

同時,確保在Y向量是一個熱載體。您可以使用keras to_categorical函數實現此目的。

+0

我試圖將所有從relu到softmax的激活以及一些relu改爲softmax。結果是一樣的。請參閱我的更新代碼。 – BlueDolphin

+0

@BlueDolphin Y是一個熱點矢量嗎?或者one_hot_labels是一個熱門矢量?你能否包含Y的元素樣本? –

+0

@BlueDolphin請勿將所有激活更改爲softmax,請保留ReLU激活並僅在最後一層使用softmax。這應該工作。確保您的標籤是一種熱門編碼。 –