keras 為什麼loss函式的值一直沒有太大變化?

時間 2021-05-06 23:38:44

1樓:aluea

瀉藥3755個類別也太頂了。一般的模型根本搞不定這麼難的任務。

實踐上:

我跑個識別3000個詞左右的語言識別,模型大的一匹,用了12層transformer四個節點八塊GPU才裝下,超算跑了三天三夜才將將收斂。而且我這個任務還有前後關聯資訊可以用,難度比你的小。你自己比較下。

理論上:

1.近4000個類導致你這個任務的類內分布非常的妖嬈,然後就可以參考遷移學習為什麼不怎麼work。

2.模型學習有乙個過程,先低頻後高頻再低頻。第乙個低頻叫做欠擬合,高頻叫做過擬合,第二個低頻則是擬合得很好。

而學習高頻分量受到譜範數的限制,模型譜範數不夠大高頻資訊就學不會,也就不用指望著能擬合得很好。

ps:目前可解釋方面沒有統一的公認理論,這個兩是認可度比較高的角度。

2樓:可可白

朋友,imagenet才一千個類別,而且他的評估方式還是五個對乙個就行。你這三千多類別,不用點花活估計是搞不定的。

在你這個task中,vgg16充當乙個預訓練的角色還行,你大概率需要在輸出後面加乙個完整的網路吧。

一點淺見,我也很菜hhhh

3樓:伊禮呵撒稜

不知道資料是什麼樣的,不太好回答,先看看資料生成器給出的資料對不對,把單個資料傳到網路看看結果怎麼樣,在計算一下loss看看算的對不對。

按理說不太應該降低的這麼慢,後面兩層的神經元太多了,一層就夠了。整個網路也太深了有23層,卷積層數量也太多了,64*64的小圖不需要這麼多卷積層,8層卷積,一層池化,最後接種類數相同的全鏈結層,每層卷積層或每兩層加乙個bn層,層數太深不好訓練。

建議先用7-8層的淺層網路和小資料訓練乙個標準模型,在此基礎上增加網路深度。

如果效果不好建議用resnet,resnext,densenet,senet,這種大的網路,這種網路基本整合在keras裡了,呼叫很方便。

另外說一下,資料已經夠多了,不需要做什麼增強的了,但如果訓練到最後還想提高精度就需要增強,調參了。

4樓:Merci

建議先從原資料集中分理出較少數目label(你這裡一共3k+,減少到100左右先),先進行小批量的嘗試驗證。這種直接暴力硬懟啥也不管的丟進網路中,大概率出不了奇蹟的。

btw,你的測試集真的不能拿來做validation,無論出於什麼目的。

5樓:閃電俠的右手

我憑目前的經驗答一波,分析一下

首先是資料集是中文手寫體,每乙個漢字資料量多少我們並不清楚,可能是資料集太小造成的,可以試著做做影象增強。

其次vgg我覺得不太好應對過擬合的問題,建議使用帶殘差結構的網路loss過高很大原因可能是分類器學不到東西,我現在的畢設題也在面臨這個問題,我懷疑是分類器層數不夠,而且relu啟用導致神經元失活的情況,改成leakyrelu會有改善

每個字的樣本量不同會造成類別不均衡問題,然後驗證集裡是不是出現了訓練集中unseen的樣本,這些也會導致loss高

為什麼測試集的loss大於訓練集的loss,這是正常的嗎?

愛吃牛油果的璐璐 可以試試調整學習率和batchsize,劃分資料集的時候如果不是時序資料,可以試試shuffle之後劃分訓練集和測試集,以及留出法看下loss有沒有變化。 胡衛雄 一般來說,模型訓練完成,測試集的誤差是應該略大於訓練集的誤差的,但也不排除一些偶爾的情況,神經網路本身的一些東西還是挺...

keras寫的卷積神經網路,為什麼每epoch訓練後,記憶體占用一直增長,直到溢位?

leon 我之前用pytorch時遇到過這種問題,原因是每個iteration的型別為tensor的loss都存了下來,loss裡面包含網路計算圖,所以每次iteration之後記憶體一直漲,後來只儲存loss的value就可以了。不知道keras是不是也有這種問題 ZW Huang 記憶體溢位的問...

程式設計的函式和數學的函式為什麼都叫函式?

哲學嘉 本質是一樣的,電腦程式的函式概念基於數學上的函式,只不過加了一些操作在裡面,所以變得跟數學上的函式有點不一樣 計算機中的函式包含輸入 輸出 資料處理還有操作 比如輸出到螢幕 而數學上的函式只關注數。在數學上,輸入 資料處理 輸出,這三者缺少任何乙個都是沒有意義的,而在電腦程式裡,就算你輸入 ...