輸入圖片,每次的準確率都不一樣,一會77,一會30。前面也加了model.eval(),這是為什麼呢?


可以用torchscript轉一下看看推理效果。如果不好使可以弄fix seed,但是如果fixseed發現結果一樣的,說明可能有隨機函數在裡面....


可能你的dropout沒有關掉


這個問題是bug問題,需要根據你的代碼一點點排查一般的思路分為一下幾個部分:

1. 你需要確定你的模型是否正常載入:首先檢查你的模型載入是否是自適應程序,如果你是使用load_state_dict(torch.load(…))來載入,那路徑出錯或者是參數問題就會載入模型報錯,載入失敗,這樣可以保證你模型一定是載入正確;如果你是採用讀取載入預模型和當前模型參數匹配的載入方式,這就會導致一旦你如果載入錯誤路徑等不會提示錯誤;還有一種情況是你如果選用多GPU 訓練和單GPU 訓練因為net = torch.nn.DataParallel(model)這個函數會使模型參數鍵名字改變;

2. 確保測試讀取數據:這個需要檢查模型測試集讀取路徑是否正常,輸入格式是否和訓練集一致等問題,可以通過列印保證送入模型前數據是相同的;

3.在測試的時候加上使用torch.no_grad可以節約內存,不進行計算梯度;

4.確保你模型的是否包含隨機數和隨機變數:此方法需要再次檢查模型,檢查你在數據讀取,數據預處理地方是否存在隨機操作,模型本身是否也有一些隨機參數!


差這麼多肯定不是隨機數種子的問題了,你能把問題描述的更清楚一點嗎,比如你數據有多少


你在test里加了隨機augmentation


1、仔細梳理一下測試邏輯,看看有沒有隨機的步驟;

2、把所有隨機種子全部設置好,包括random,np.random,torch.random等等;

好好檢查一下,流程固定的情況下,pytorch的輸出一定是確定的。


如果是相同的測試集,那測試邏輯應該有bug。模型一旦固定對相同的輸入會產生相同的值。相當於定義好公式,傳值得到的結果不會變化。

如果是每次訓練模型在預測,需要設置好隨機種子。


訓練過程有dropout,預測過程不要dropout. 問題就可以解決了


torch。nograd


推薦閱讀:
相关文章