最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

聊聊pytorch測試的時候為何要加上model.eval()

 更新時間:2021年05月22日 15:07:49   作者:qq_23304241  
這篇文章主要介紹了聊聊pytorch測試的時候為何要加上model.eval()的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Do need to use model.eval() when I test?

Sure, Dropout works as a regularization for preventing overfitting during training.

It randomly zeros the elements of inputs in Dropout layer on forward call.

It should be disabled during testing since you may want to use full model (no element is masked)

使用PyTorch進行訓練和測試時一定注意要把實例化的model指定train/eval,eval()時,框架會自動把BN和DropOut固定住,不會取平均,而是用訓練好的值,不然的話,一旦test的batch_size過小,很容易就會被BN層導致生成圖片顏色失真極大?。。。。?!

補充:pytorch中model eval和torch no grad()的區(qū)別

model.eval()和with torch.no_grad()的區(qū)別

在PyTorch中進行validation時,會使用model.eval()切換到測試模式,在該模式下,

主要用于通知dropout層和batchnorm層在train和val模式間切換

在train模式下,dropout網絡層會按照設定的參數p設置保留激活單元的概率(保留概率=p); batchnorm層會繼續(xù)計算數據的mean和var等參數并更新。

在val模式下,dropout層會讓所有的激活單元都通過,而batchnorm層會停止計算和更新mean和var,直接使用在訓練階段已經學出的mean和var值。

該模式不會影響各層的gradient計算行為,即gradient計算和存儲與training模式一樣,只是不進行反傳(backprobagation)

而with torch.no_grad()則主要是用于停止autograd模塊的工作,以起到加速和節(jié)省顯存的作用,具體行為就是停止gradient計算,從而節(jié)省了GPU算力和顯存,但是并不會影響dropout和batchnorm層的行為。

使用場景

如果不在意顯存大小和計算時間的話,僅僅使用model.eval()已足夠得到正確的validation的結果;而with torch.zero_grad()則是更進一步加速和節(jié)省gpu空間(因為不用計算和存儲gradient),從而可以更快計算,也可以跑更大的batch來測試。

補充:Pytorch的modle.train,model.eval,with torch.no_grad的個人理解

1. 最近在學習pytorch過程中遇到了幾個問題

不理解為什么在訓練和測試函數中model.eval(),和model.train()的區(qū)別,經查閱后做如下整理

一般情況下,我們訓練過程如下:

1、拿到數據后進行訓練,在訓練過程中,使用

model.train():告訴我們的網絡,這個階段是用來訓練的,可以更新參數。

2、訓練完成后進行預測,在預測過程中,使用

model.eval() : 告訴我們的網絡,這個階段是用來測試的,于是模型的參數在該階段不進行更新。

2. 但是為什么在eval()階段會使用with torch.no_grad()?

查閱相關資料:傳送門

with torch.no_grad - disables tracking of gradients in autograd.

model.eval() changes the forward() behaviour of the module it is called upon

eg, it disables dropout and has batch norm use the entire population statistics

總結一下就是說,在eval階段了,即使不更新,但是在模型中所使用的dropout或者batch norm也就失效了,直接都會進行預測,而使用no_grad則設置讓梯度Autograd設置為False(因為在訓練中我們默認是True),這樣保證了反向過程為純粹的測試,而不變參數。

另外,參考文檔說這樣避免每一個參數都要設置,解放了GPU底層的時間開銷,在測試階段統一梯度設置為False

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python數據結構集合的相關詳解

    Python數據結構集合的相關詳解

    集合是Python中一種無序且元素唯一的數據結構,主要用于存儲不重復的元素,Python提供set類型表示集合,可通過{}或set()創(chuàng)建,集合元素不可重復且無序,不支持索引訪問,但可迭代,集合可變,支持添加、刪除元素,集合操作包括并集、交集、差集等,可通過運算符或方法執(zhí)行
    2024-09-09
  • python等間距取值方式

    python等間距取值方式

    這篇文章主要介紹了python等間距取值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python中的多線程實例教程

    python中的多線程實例教程

    這篇文章主要介紹了python中的多線程用法,包括線程的創(chuàng)建、同步等核心問題,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • python跳出雙層循環(huán)的方法

    python跳出雙層循環(huán)的方法

    本文主要介紹了python跳出雙層循環(huán)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • python字典一鍵多值實例代碼分享

    python字典一鍵多值實例代碼分享

    在本篇文章里小編給大家整理了關于python字典一鍵多值實例代碼以及相關知識點,需要的朋友們參考下。
    2019-06-06
  • 基于python實現一個簡單的瀏覽器引擎

    基于python實現一個簡單的瀏覽器引擎

    瀏覽器引擎是用來處理、渲染和顯示網頁內容的核心組件,其主要任務是將用戶輸入的URL所代表的網頁資源加載并呈現出來,通常包括HTML、CSS、JavaScript以及各種多媒體內容,本文給大家介紹了如何基于python實現一個簡單的瀏覽器引擎,需要的朋友可以參考下
    2024-10-10
  • Python3基礎之基本數據類型概述

    Python3基礎之基本數據類型概述

    這篇文章主要介紹了Python3的基本數據類型,需要的朋友可以參考下
    2014-08-08
  • 使用Python刪除文本文件中特定行的操作方法

    使用Python刪除文本文件中特定行的操作方法

    文件操作是編程中的重要方面,Python作為強大的編程語言,提供了處理文件的能力,刪除特定行是文件處理中常見的需求,本文給大家介紹了Python快速刪除文本文件中指定行的方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • 詳解如何使用pandas進行時間序列數據的周期轉換

    詳解如何使用pandas進行時間序列數據的周期轉換

    時間序列數據是數據分析中經常遇到的類型,為了更多的挖掘出數據內部的信息,我們常常依據原始數據中的時間周期,將其轉換成不同跨度的周期,下面以模擬的K線數據為例,演示如何使用pandas來進行周期轉換,感興趣的朋友可以參考下
    2024-05-05
  • Python全面解析xml文件

    Python全面解析xml文件

    這篇文章主要介紹了Python全面解析xml文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論

东丰县| 罗城| 宝鸡市| 体育| 弥渡县| 丁青县| 亚东县| 凤翔县| 大冶市| 土默特左旗| 诸城市| 阿鲁科尔沁旗| 科技| 江油市| 厦门市| 琼中| 满洲里市| 尖扎县| 呼伦贝尔市| 平利县| 旌德县| 崇左市| 平昌县| 开江县| 高要市| 临清市| 贵州省| 临颍县| 铜山县| 金塔县| 石门县| 新兴县| 柳江县| 安国市| 澎湖县| 曲松县| 乌拉特中旗| 林口县| 大荔县| 安庆市| 盈江县|