1. 程式人生 > 其它 >神經網路訓練與預測時結果不一致的一種原因

神經網路訓練與預測時結果不一致的一種原因

技術標籤:PyTorch神經網路機器學習深度學習

為了防止過擬合,我設定了提前終止early stop。發現預測時的train accuracy與訓練時打印出的max train accuracy並不一致。經斷點除錯,發現是early stop程式碼段的問題

 if test_accuracy > self.max_test_acc and train_accuracy > self.max_train_acc - 0.04:
     self.max_test_acc = test_accuracy
     self.max_acc_epoch = epoch
     self.
train_sync_acc = train_accuracy if train_accuracy > self.max_train_acc: self.max_train_acc = train_accuracy self.best_net = self.net.state_dict() # 這裡有問題 print('*' * 50) print('epoch', epoch + 1, 'current loss', loss.cpu().data, 'train acc:', train_accuracy, 'current max test acc:'
, self.max_test_acc) print('*' * 50) if epoch > self.max_acc_epoch + early_stop: break

問題就出在標記處,我本來是想每獲得一個最大的test accuracy就儲存當前net。但是這步賦值後,self.best_netself.net.state_dict()地址完全一致,兩者同時變化,因而這步賦值就沒有任何意義了。
修改方法:使用深拷貝

from copy import deepcopy

...
	self.best_net = deepcopy(self.net.state_dict(
)) ...

改過了之後就正常了~
(用的是PyTorch框架)