keras val_categorical_accuracy: 0.0000e+00問題

問題描述:

    在利用神經網絡進行分類和識別的時候,使用了keras這個封裝層次比較高的框架,backend使用的是tensorflow-cpu。

    在交叉驗證的時候,出現 val_categorical_accuracy: 0.0000e+00的問題。

問題分析:

    首先,弄清楚,訓練集、驗證集、測試集的區別,驗證集是從訓練集中提前拿出一部分的數據集。在keras中,一般都是使用這種方式來指定驗證集佔訓練集和的總大小。

validation_split=0.2
比如,經典的數據集MNIST,共有60000個訓練集,就會
Train on 48000 samples, validate on 12000 samples

我自己學習使用的數據集比較小

訓練數據集樣本數: 498 ,標籤個數 498 
Train on 398 samples, validate on 100 samples

基本上符合4:1(0.2)的分配

出現 val_categorical_accuracy: 0.0000e+00的問題,我這邊的原因主要是,樣本本身是有規律的,導致分配的驗證集的標籤可能在訓練集中可能就沒有。

(PS:我實際看了下,498個樣本共10個標籤,後100個驗證集佔據了基本上後面3個標籤(實際上,這三個標籤佔了103個樣本),也就是前面的訓練集基本上就沒有後面的標籤,整體佔據前面7個標籤)

問題解決:

把最初始的訓練集打亂,當然,標籤也要跟着移動。

index = [i for i in range(len(x_train))]
np.random.shuffle(index)
x_train = x_train[index]
y_train = y_train[index]

model.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.2, verbose=1)

同樣的問題表現,可能有不同的原因,解決方法也不盡相同,這裏只是和大家分享我自己的問題解決過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章