固定隨機種子的步驟請參考:https://zhengyujie.cn/2291.html
這里我主要講一下模型在復現結果遇到的一些問題。
首先在固定隨機種子之后,每次模型訓練出來的結果一定是一樣的,如果不相同,那么說明訓練過程中一定還有一部分隨機性操作沒有被固定。
將模型參數保存下來,然后加載模型參數進行測試,如果發現結果和訓練過程中得到的結果有差異。這個時候就需要按照以下步驟進行分析:
- 先改變batchsize,看看實驗復現的結果是否會發生變化。如果發生變化就說明batchsize會影響模型推理過程中的參數。
- 檢查一下forward中有哪些參數跟batchsize有關,或者是不是代碼寫錯了。比如batchsize就會影響LSTM的模型參數的初始化。
- 最后檢查測試集划分batch的時候是否都一樣。
test_loader = DataLoader(test_dataset, batch_size=batchsize, shuffle=True, num_workers=4, pin_memory=True)比如這樣一行代碼,測試集每次都被打亂了,雖然固定了隨機種子,但是這樣只能保證第k輪的隨機種子是一樣的,而第1輪和第10輪的隨機種子是不一樣的。這樣的話,比如模型在第13個epoch收斂,得到的結果在是第13輪的測試集進行測試的,而模型在加載的時候是在第一輪的測試進行測試的,結果自然有差異。
