2017-09-23 135 views
1

輸入數據(XS):損失和驗證損失減小,但準確性和驗證準確性保持靜態

array([[ 0.28555165, -0.03237782, 0.28525293, 0.2898103 , 0.03093571], 
     [ 0.28951845, -0.03555493, 0.28561172, 0.29346927, 0.03171808], 
     [ 0.28326774, -0.03258297, 0.27879436, 0.2804189 , 0.03079463], 
     [ 0.27617554, -0.03335768, 0.27927279, 0.28285823, 0.03015975], 
     [ 0.29084073, -0.0308716 , 0.28788416, 0.29102994, 0.03019182], 
     [ 0.27353097, -0.03571149, 0.26874771, 0.27310096, 0.03021105], 
     [ 0.26163049, -0.03528769, 0.25989708, 0.26688066, 0.0303842 ], 
     [ 0.26223156, -0.03429704, 0.26169114, 0.26127023, 0.02962107], 
     [ 0.26259217, -0.03496377, 0.26145193, 0.26773441, 0.02942868], 
     [ 0.26583775, -0.03354123, 0.26240878, 0.26358757, 0.02925554]]) 

輸出數據(YS):

array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0.]]) 

訓練集被分割的70%的訓練和30%驗證。

訓練這個網絡可以看到的損失和val_loss下降,但ACC和val_acc在0.5714和0分別保持不變:

Train on 7 samples, validate on 3 samples 
Epoch 1/60 
0s - loss: 4.4333 - acc: 0.0000e+00 - val_loss: 4.4340 - val_acc: 0.0000e+00 
Epoch 2/60 
0s - loss: 4.4335 - acc: 0.0000e+00 - val_loss: 4.4338 - val_acc: 0.0000e+00 
Epoch 3/60 
0s - loss: 4.4331 - acc: 0.0000e+00 - val_loss: 4.4335 - val_acc: 0.0000e+00 
Epoch 4/60 
0s - loss: 4.4319 - acc: 0.0000e+00 - val_loss: 4.4331 - val_acc: 0.0000e+00 
Epoch 5/60 
0s - loss: 4.4300 - acc: 0.0000e+00 - val_loss: 4.4326 - val_acc: 0.0000e+00 
Epoch 6/60 
0s - loss: 4.4267 - acc: 0.0000e+00 - val_loss: 4.4320 - val_acc: 0.0000e+00 
Epoch 7/60 
0s - loss: 4.4270 - acc: 0.1429 - val_loss: 4.4314 - val_acc: 0.0000e+00 
Epoch 8/60 
0s - loss: 4.4257 - acc: 0.1429 - val_loss: 4.4307 - val_acc: 0.0000e+00 
Epoch 9/60 
0s - loss: 4.4240 - acc: 0.0000e+00 - val_loss: 4.4300 - val_acc: 0.0000e+00 
Epoch 10/60 
0s - loss: 4.4206 - acc: 0.1429 - val_loss: 4.4292 - val_acc: 0.0000e+00 
Epoch 11/60 
0s - loss: 4.4192 - acc: 0.1429 - val_loss: 4.4284 - val_acc: 0.0000e+00 
Epoch 12/60 
0s - loss: 4.4156 - acc: 0.4286 - val_loss: 4.4276 - val_acc: 0.0000e+00 
Epoch 13/60 
0s - loss: 4.4135 - acc: 0.4286 - val_loss: 4.4267 - val_acc: 0.0000e+00 
Epoch 14/60 
0s - loss: 4.4114 - acc: 0.5714 - val_loss: 4.4258 - val_acc: 0.0000e+00 
Epoch 15/60 
0s - loss: 4.4072 - acc: 0.7143 - val_loss: 4.4248 - val_acc: 0.0000e+00 
Epoch 16/60 
0s - loss: 4.4046 - acc: 0.4286 - val_loss: 4.4239 - val_acc: 0.0000e+00 
Epoch 17/60 
0s - loss: 4.4012 - acc: 0.5714 - val_loss: 4.4229 - val_acc: 0.0000e+00 
Epoch 18/60 
0s - loss: 4.3967 - acc: 0.5714 - val_loss: 4.4219 - val_acc: 0.0000e+00 
Epoch 19/60 
0s - loss: 4.3956 - acc: 0.5714 - val_loss: 4.4209 - val_acc: 0.0000e+00 
Epoch 20/60 
0s - loss: 4.3906 - acc: 0.5714 - val_loss: 4.4198 - val_acc: 0.0000e+00 
Epoch 21/60 
0s - loss: 4.3883 - acc: 0.5714 - val_loss: 4.4188 - val_acc: 0.0000e+00 
Epoch 22/60 
0s - loss: 4.3849 - acc: 0.5714 - val_loss: 4.4177 - val_acc: 0.0000e+00 
Epoch 23/60 
0s - loss: 4.3826 - acc: 0.5714 - val_loss: 4.4166 - val_acc: 0.0000e+00 
Epoch 24/60 
0s - loss: 4.3781 - acc: 0.5714 - val_loss: 4.4156 - val_acc: 0.0000e+00 
Epoch 25/60 
0s - loss: 4.3757 - acc: 0.5714 - val_loss: 4.4145 - val_acc: 0.0000e+00 
Epoch 26/60 
0s - loss: 4.3686 - acc: 0.5714 - val_loss: 4.4134 - val_acc: 0.0000e+00 
Epoch 27/60 
0s - loss: 4.3666 - acc: 0.5714 - val_loss: 4.4123 - val_acc: 0.0000e+00 
Epoch 28/60 
0s - loss: 4.3665 - acc: 0.5714 - val_loss: 4.4111 - val_acc: 0.0000e+00 
Epoch 29/60 
0s - loss: 4.3611 - acc: 0.5714 - val_loss: 4.4100 - val_acc: 0.0000e+00 
Epoch 30/60 
0s - loss: 4.3573 - acc: 0.5714 - val_loss: 4.4089 - val_acc: 0.0000e+00 
Epoch 31/60 
0s - loss: 4.3537 - acc: 0.5714 - val_loss: 4.4078 - val_acc: 0.0000e+00 
Epoch 32/60 
0s - loss: 4.3495 - acc: 0.5714 - val_loss: 4.4066 - val_acc: 0.0000e+00 
Epoch 33/60 
0s - loss: 4.3452 - acc: 0.5714 - val_loss: 4.4055 - val_acc: 0.0000e+00 
Epoch 34/60 
0s - loss: 4.3405 - acc: 0.5714 - val_loss: 4.4044 - val_acc: 0.0000e+00 
Epoch 35/60 
0s - loss: 4.3384 - acc: 0.5714 - val_loss: 4.4032 - val_acc: 0.0000e+00 
Epoch 36/60 
0s - loss: 4.3390 - acc: 0.5714 - val_loss: 4.4021 - val_acc: 0.0000e+00 
Epoch 37/60 
0s - loss: 4.3336 - acc: 0.5714 - val_loss: 4.4009 - val_acc: 0.0000e+00 
Epoch 38/60 
0s - loss: 4.3278 - acc: 0.5714 - val_loss: 4.3998 - val_acc: 0.0000e+00 
Epoch 39/60 
0s - loss: 4.3254 - acc: 0.5714 - val_loss: 4.3986 - val_acc: 0.0000e+00 
Epoch 40/60 
0s - loss: 4.3205 - acc: 0.5714 - val_loss: 4.3975 - val_acc: 0.0000e+00 
Epoch 41/60 
0s - loss: 4.3171 - acc: 0.5714 - val_loss: 4.3963 - val_acc: 0.0000e+00 
Epoch 42/60 
0s - loss: 4.3150 - acc: 0.5714 - val_loss: 4.3952 - val_acc: 0.0000e+00 
Epoch 43/60 
0s - loss: 4.3106 - acc: 0.5714 - val_loss: 4.3940 - val_acc: 0.0000e+00 
Epoch 44/60 
0s - loss: 4.3064 - acc: 0.5714 - val_loss: 4.3929 - val_acc: 0.0000e+00 
Epoch 45/60 
0s - loss: 4.3009 - acc: 0.5714 - val_loss: 4.3917 - val_acc: 0.0000e+00 
Epoch 46/60 
0s - loss: 4.2995 - acc: 0.5714 - val_loss: 4.3905 - val_acc: 0.0000e+00 
Epoch 47/60 
0s - loss: 4.2972 - acc: 0.5714 - val_loss: 4.3894 - val_acc: 0.0000e+00 
Epoch 48/60 
0s - loss: 4.2918 - acc: 0.5714 - val_loss: 4.3882 - val_acc: 0.0000e+00 
Epoch 49/60 
0s - loss: 4.2886 - acc: 0.5714 - val_loss: 4.3871 - val_acc: 0.0000e+00 
Epoch 50/60 
0s - loss: 4.2831 - acc: 0.5714 - val_loss: 4.3859 - val_acc: 0.0000e+00 
Epoch 51/60 
0s - loss: 4.2791 - acc: 0.5714 - val_loss: 4.3848 - val_acc: 0.0000e+00 
Epoch 52/60 
0s - loss: 4.2774 - acc: 0.5714 - val_loss: 4.3836 - val_acc: 0.0000e+00 
Epoch 53/60 
0s - loss: 4.2714 - acc: 0.5714 - val_loss: 4.3824 - val_acc: 0.0000e+00 
Epoch 54/60 
0s - loss: 4.2696 - acc: 0.5714 - val_loss: 4.3813 - val_acc: 0.0000e+00 
Epoch 55/60 
0s - loss: 4.2641 - acc: 0.5714 - val_loss: 4.3801 - val_acc: 0.0000e+00 
Epoch 56/60 
0s - loss: 4.2621 - acc: 0.5714 - val_loss: 4.3790 - val_acc: 0.0000e+00 
Epoch 57/60 
0s - loss: 4.2569 - acc: 0.5714 - val_loss: 4.3778 - val_acc: 0.0000e+00 
Epoch 58/60 
0s - loss: 4.2556 - acc: 0.5714 - val_loss: 4.3767 - val_acc: 0.0000e+00 
Epoch 59/60 
0s - loss: 4.2492 - acc: 0.5714 - val_loss: 4.3755 - val_acc: 0.0000e+00 
Epoch 60/60 
0s - loss: 4.2446 - acc: 0.5714 - val_loss: 4.3744 - val_acc: 0.0000e+00 
Out[23]: 
<keras.callbacks.History at 0x7fbb9c4c7a58> 

適合我的網絡的來源是:

from keras.callbacks import History 
history = History() 

from keras import optimizers 

model = Sequential() 

model.add(Dense(100, activation='softmax', input_dim=inputDim)) 
model.add(Dropout(0.2)) 
model.add(Dense(200, activation='softmax')) 
model.add(Dropout(0.2)) 
model.add(Dense(84, activation='softmax')) 

sgd = optimizers.SGD(lr=0.0009, decay=1e-10, momentum=0.9, nesterov=False) 
model.compile(loss='categorical_crossentropy', optimizer=sgd , metrics=['accuracy']) 
model.fit(xs,ys , validation_split=0.3 , verbose=2 , callbacks=[history] , epochs=60,batch_size=32) 

一些簡單的統計數據我的訓練數據:

0 1 2 3 4 
count 10.000000 10.000000 10.000000 10.000000 10.000000 
mean 0.275118 -0.033855 0.273101 0.277016 0.030270 
std 0.011664 0.001594 0.011386 0.012060 0.000746 
min 0.261630 -0.035711 0.259897 0.261270 0.029256 
25% 0.263404 -0.035207 0.261871 0.267094 0.029756 
50% 0.274853 -0.033919 0.273771 0.276760 0.030201 
75% 0.284981 -0.032777 0.283758 0.288072 0.030692 
max 0.290841 -0.030872 0.287884 0.293469 0.031718 

生成使用:

import pandas as pd 
pd.DataFrame(xs).describe() 

此數據集的標準偏差非常低,這是導致我的網絡不收斂的原因嗎?

有沒有其他的修改,我可以嘗試,以提高這個網絡的培訓和驗證的準確性?

更新:

第一和第四訓練例子:

[0.28555165, -0.03237782, 0.28525293, 0.2898103 , 0.03093571] 
[0.27617554, -0.03335768, 0.27927279, 0.28285823, 0.03015975] 

包含相同的目標映射:

 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0. 

    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
    0., 0., 0., 0., 0., 0. 

是否有這些訓練例子可能被歪曲結果的財產?我理解需要大量訓練數據來訓練神經網絡,但這並不能解釋爲什麼lossval_loss減少,但對訓練準確性和驗證準確性的評估如下:accval_acc保持不變?

+0

你有很多課程。我建議離開網絡更多的時代。 –

+1

可以肯定的是,你是否真的試圖用7個5個特徵的訓練樣本來解決84類分類問題? – desertnaut

回答

0

首先,我必須警告你的一些東西,這裏不是很確定:

  1. 看來你正試圖與只有10個數據樣本(7培訓84類的分類問題和3驗證)。這絕對是方式太少的數據嘗試創建一個成功的深度學習模型(最深的學習問題需要至少成千上萬的數據樣本,其他甚至高達數百萬)。對於初學者來說,你甚至沒有一個數據樣本可用於你的所有類別,所以在我看來,如果沒有那麼多的數據,我會覺得這是一個失敗的原因。

    似乎你已經意識到這一點,根據你在帖子中指出的內容。你也可以說,即使它沒有解釋你的準確性的奇怪行爲,但我必須說,在給定這些條件的情況下得出結論並不是一個好主意。有這麼少的數據樣本肯定會導致您的培訓意外/不穩定的行爲,所以難怪你的指標表現奇怪

  2. 我看你已經用softmax激活全部你的模型的圖層。根據我的經驗,這不是分類問題的好主意。用深度學習模型進行分類的當前「標準」是使用ReLU激活內層,並且softmax僅針對輸出層

    這是因爲softmax爲你的N個類(它們總和爲1)返回概率分佈,所以它有助於在你的選擇中獲得最可能的類。這也意味着softmax會「擠壓」或修改輸入值,因此它們都在[0,1]之間,這可能會影響您的訓練過程,因爲它不會給你相同的圖層其他S形函數給出的激活值。用簡單的話來說,你有點「標準化」你的模型的每層的值,而不是讓數據「爲自己說話」。


現在,如果我們訓練時看你的4個指標中,我們可以看到,你的acc也不是那麼靜,你認爲:它的第一個時代停留在0.0,然後劃時代7,它開始直到它達到0.5714的時期17,似乎達到了漸近極限。

我們也可以看到你的loss指標有甚少改進,開始對4.4333並與多家大起大落之間的4.2446結束。鑑於這種證據,你的模型似乎有過度配置:也就是說,它通過記憶瞭解到你的7個訓練樣本,但沒有真正瞭解你的模型的表示。 當給出3個數據時,它從未看到它在所有這些數據中都失敗。這並不奇怪,因爲您的數據非常少且不平衡,而且前面提到的其他方面也是如此。


是否有其他修改的,我可以爲了改善這種網絡的訓練和檢驗精度試試?

除了獲得更多的數據並可能重新設計網絡架構有可能會影響你一兩件事,是validation_split參數。通過爲測試和列車數據指定所需比率,您已正確使用它。然而,從Keras FAQ How is the validation split computed?閱讀,我們可以看到:

如果設置在model.fit的validation_split參數例如0.1,那麼使用的驗證數據將是最後10%的數據。如果將其設置爲0.25,則將是數據的最後25%等。請注意,數據在提取驗證分組之前不會混洗,因此驗證是字面上只是您傳遞的輸入中樣本的最後x%。

這意味着通過指定0.3的驗證分組,您始終使用最後3個數據元素作爲驗證。你能做的要麼是調用合適洗牌之前,所有的數據,或者使用validation_data參數,而不是,指定作爲一個元組的(X_test, Y_test)你想與您的數據使用(與sklearn'strain_test_split爲例)。我希望這能幫助你解決問題,祝你好運。

相關問題