淺談keras使用中val_acc和acc值不同步的思考
在一個比較好的數(shù)據(jù)集中,比如在分辨不同文字的任務(wù)中,一下是幾個樣本
使用VGG19,vol_acc和acc基本是同步保持增長的,比如
40/40 [==============================] - 23s 579ms/step - loss: 1.3896 - acc: 0.95 - val_loss: 1.3876 - val_acc: 0.95 Epoch 13/15 40/40 [==============================] - 23s 579ms/step - loss: 1.3829 - acc: 0.96 - val_loss: 1.3964 - val_acc: 0.96 Epoch 14/15 40/40 [==============================] - 23s 580ms/step - loss: 1.3844 - acc: 0.97 - val_loss: 1.3892 - val_acc: 0.97 Epoch 15/15 40/40 [==============================] - 24s 591ms/step - loss: 1.3833 - acc: 0.98 - val_loss: 1.4145 - val_acc: 0.98
這表明訓(xùn)練集和測試集同分布,在訓(xùn)練集中學(xué)習(xí)的特征確實可以應(yīng)用到測試集中,這是最好的情況。
通過觀察熱力圖也可以看到,最熱的地方集中在特征上。比如在分辨不同的文字。
但很多時候,自己建立的數(shù)據(jù)集并不完美,或者可能不同類的特征分辨并不明顯,這時候用cnn強行進(jìn)行分類就會出現(xiàn)很多奇葩的情況。
考慮一種極端的情況,比如有四個類,而四個類都是同樣的簡單圖形
那么在學(xué)習(xí)過程中,會出現(xiàn)如下特征的acc和vol_acc
40/40 [==============================] - 23s 579ms/step - loss: 1.3896 - acc: 0.2547 - val_loss: 1.3876 - val_acc: 0.2500 Epoch 13/15 40/40 [==============================] - 23s 579ms/step - loss: 1.3829 - acc: 0.2844 - val_loss: 1.3964 - val_acc: 0.2281 Epoch 14/15 40/40 [==============================] - 23s 580ms/step - loss: 1.3844 - acc: 0.2922 - val_loss: 1.3892 - val_acc: 0.2469 Epoch 15/15 40/40 [==============================] - 24s 591ms/step - loss: 1.3833 - acc: 0.2578 - val_loss: 1.4145 - val_acc: 0.2500
從熱力圖上看
可以看到因為沒有什么特征,所有熱力圖分布也沒有規(guī)律,可以說網(wǎng)絡(luò)什么都沒學(xué)到。
那么考慮中間的情況,比如很相似的類學(xué)習(xí)會怎么樣?比如不同年份的硬幣
40/40 [==============================] - 25s 614ms/step - loss: 0.0967 - acc: 0.9891 - val_loss: 0.3692 - val_acc: 0.8313 40/40 [==============================] - 23s 580ms/step - loss: 0.0476 - acc: 0.9953 - val_loss: 0.3994 - val_acc: 0.7906 40/40 [==============================] - 23s 578ms/step - loss: 0.0237 - acc: 0.9984 - val_loss: 0.5067 - val_acc: 0.7344 40/40 [==============================] - 23s 579ms/step - loss: 0.0184 - acc: 1.0000 - val_loss: 0.5192 - val_acc: 0.7531 40/40 [==============================] - 23s 582ms/step - loss: 0.0286 - acc: 0.9953 - val_loss: 0.9653 - val_acc: 0.6344 40/40 [==============================] - 23s 584ms/step - loss: 0.0138 - acc: 1.0000 - val_loss: 0.4780 - val_acc: 0.7688 40/40 [==============================] - 23s 583ms/step - loss: 0.0115 - acc: 0.9984 - val_loss: 0.5485 - val_acc: 0.7438 40/40 [==============================] - 23s 581ms/step - loss: 0.0096 - acc: 1.0000 - val_loss: 0.5658 - val_acc: 0.7406 40/40 [==============================] - 23s 578ms/step - loss: 0.0046 - acc: 1.0000 - val_loss: 0.5070 - val_acc: 0.7562
可以看到,雖然網(wǎng)絡(luò)有一定分辨力,但是學(xué)習(xí)的特征位置并不對,這可能是網(wǎng)絡(luò)的分辨力有限,或者數(shù)據(jù)集過小導(dǎo)致的,具體怎么解決還沒有想清楚??可以看到,可以看到除非完全沒有特征,否則train acc一定能到100%,但是這個是事沒有意義的,這就是過擬合。
一開始同步增長,是在學(xué)習(xí)特征,后來volacc和acc開始有差異,就是過擬合
這可能是訓(xùn)練集過小導(dǎo)致的,如果圖片中只有年份呢?
acc = 0.85,vol_acc=0.85 acc = 0.90,vol_acc=0.90 acc = 0.92,vol_acc=0.92 acc = 0.94,vol_acc=0.92
可以看到,還是能正確分類的,之所以硬幣不能正確分類,是因為訓(xùn)練數(shù)據(jù)集過小,其他特征掩蓋了年份的特征,只要增大數(shù)據(jù)量就行了。
另外。還有幾點訓(xùn)練技巧:
1、拓展函數(shù)不要怕極端,極端的拓展函數(shù)有利于學(xué)到目標(biāo)真正的特征。
2、使用灰度圖作為訓(xùn)練集?如果以紋理為主,使用灰度圖,灰度圖能增強網(wǎng)絡(luò)的魯棒性,因為可以減少光照的影響,但是會損失顏色信息,可以用結(jié)果看看到底該使用哪種圖?
3、使用小的分辨率圖片可能錯過某些特征,尤其是在小數(shù)據(jù)集的時候,所以可能的話使用大數(shù)據(jù)集,或者提高分辨率,根據(jù)使用者的目標(biāo)。
以上這篇淺談keras使用中val_acc和acc值不同步的思考就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flask框架學(xué)習(xí)筆記之表單基礎(chǔ)介紹與表單提交方式
這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之表單基礎(chǔ)介紹與表單提交方式,結(jié)合實例形式分析了flask框架中表單的基本功能、定義、用法及表單提交的get、post方式使用技巧,需要的朋友可以參考下2019-08-08python with statement 進(jìn)行文件操作指南
在Python中,with關(guān)鍵字是一個替你管理實現(xiàn)上下文協(xié)議對象的好東西。例如:file等。在file的結(jié)束,會自動關(guān)閉該文件句柄。而這正是本文所需要的2014-08-08Python學(xué)習(xí)筆記之os模塊使用總結(jié)
這篇文章主要介紹了Python學(xué)習(xí)筆記之os模塊使用總結(jié),本文總結(jié)了多個常用方法,需要的朋友可以參考下2014-11-11Python調(diào)用Jar包的兩種方式小結(jié)
這篇文章主要介紹了Python調(diào)用Jar包的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12