2017-09-23 136 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为例)。我希望这能帮助你解决问题,祝你好运。

相关问题