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分類的交叉熵損失,圖裡看起來還是比較高的,最好確保訓練集是完全擬合的。


推薦閱讀:
相关文章