來源於知乎:pytorch中model.eval()會對哪些函數有影響? - 藺笑天的回答 - 知乎
https://www.zhihu.com/question/363144860/answer/951669576
內容
藺笑天
37 人贊同了該回答
model的eval方法主要是針對某些在train和predict兩個階段會有不同參數的層。比如Dropout層和BN層
Dropout在train時隨機選擇神經元而predict要使用全部神經元並且要乘一個補償系數
BN在train時每個batch做了不同的歸一化因此也對應了不同的參數,相應predict時實際用的參數是每個batch下參數的移動平均。
torch為了方便大家,設計這個eval方法就是讓我們可以不用手動去針對這些層做predict階段的處理(也可以叫evaluation階段,所以這個方法名才是eval)
這也就是說,如果模型中用了dropout或bn,那么predict時必須使用eval 否則結果是沒有參考價值的,不存在選擇的余地。