在使用net.eval( )和with torch_no_grad( )時,發現網上有的例子只使用了一個,有些兩個都用了,我之前也認爲這兩個的作用一樣,後來發現最好是兩個都用。
with torch_no_grad( ):數據不需要梯度計算,即不會進行反相傳播;
net.eval( ):不加的話即使沒有訓練輸入數據也會改變權值,因爲這是禁止forward過程對參數造成的影響;例如禁止dropout或者因爲測試集和訓練集的樣本分佈不一樣,會有batch normalization 所帶來的影響。