CNN在訓練時,loss一直下降,但準確率一直非常低而且不提高怎麼辦?
1、檢查Dataloader,訓練集和測試集的處理方式是否一樣。(比如會不會一個數據集歸一化了,另一個沒有。)可以列印一下訓練集的正確率看看。
像你這種明顯異常的,檢查代碼最重要,大概率就是數據處理、解析輸出時候哪裡寫錯了。
2、訓練集25個類別分布如何?是否是有偏數據集?
把456那幾個去掉,甚至刪成二分類,然後再看訓練出來的模型是什麼結果。如果還是有問題,那麼問題應當很明顯。
另外可以把自己寫的CNN model用torchvision models里的resnet替代,然後看有沒問題。如果還是有問題,那就說明不是模型寫的不對
你的loss是什麼?BCELoss嗎?
你列印一下你的輸出,是不是都是nan了
謝邀。
1)25個類別,如果未經訓練,acc確實是4%,因為隨機猜嘛,和你截圖吻合,而且應該說明你的數據集各個類別數量的分布應該是均勻的。
大膽猜測:
1)你的激活函數是不是用的relu,2)batchsize過小。導致batch梯度不穩定,因為後面loss不是穩定下降,而是上下變動。
********建議把代碼放出來
1.backbone建議換成resnet 這種比較成熟的網路結構,使用預訓練模型.沒有預訓練模型時學習率不要設置這麼小
2.檢查dataloader標籤數據對不對3.檢查數據集類別是否均勻.
4.torch的dataloder正常來說不需要你自己view到一定 batch-size的,它自己會分好的.5.test之前記得.eval()偶
訓練集的準確率多少
25分類的交叉熵損失,圖裡看起來還是比較高的,最好確保訓練集是完全擬合的。
推薦閱讀: