pytorch中required_grad和detach的澄清
最近和別人討論,發現了自己以前的認識錯誤的地方。
程式碼中的detach和required_grad的引入是減少了計算量,required_grad=false會計算誤差,不計算wb的梯度(原因在於一個網路如果是ABC層這樣的連線方式,B不求梯度,但是A還是會獲得梯度,這就需要計算B的誤差,從而傳播到A,而計算B中引數的梯度就沒有必要了),而detach會切斷反向傳播,不計算誤差也不計算梯度。之所以之前會認為加不加required_grad=false和detach不影響效果,是因為只看到了輸出結果的不變,沒有意識到計算時間和空間需求的變化,而這兩點的確是不那麼容易監測出來的。另一方面是對反向傳播演算法的不熟練。以後下結論不能那麼武斷了,做實驗也要學會控制變數和觀察實驗結果。的確寫程式碼應該追求簡潔,不寫冗餘的程式碼。這就需要分清冗餘與否。
以上認識也可能和
這就印證了認識真理的反覆性、前進性和上升性。
相關推薦
pytorch中required_grad和detach的澄清
最近和別人討論,發現了自己以前的認識錯誤的地方。 程式碼中的detach和required_grad的引入是減少了計算量,required_grad=false會計算誤差,不計算wb的梯度(原因在於一個網路如果是ABC層這樣的連線方式,B不求梯度,但是A還是會獲得梯度,這就需要計算B的誤差,
多執行緒中join和detach方法的理解
thread.Join把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。比如線上程B中呼叫了執行緒A的Join()方法,直到執行緒A執行完畢後,才會繼續執行執行緒B。 join是阻塞當前執行緒,並等待object對應執行緒結束,
pytorch系列 --4 pytorch 0.4改動後Variable和Tensor合併問題data和.detach
本文主要講述pytorch0.4更新後相關的程式碼遷移問題 Tensor和Variable合併 torch.Tensor 和torch.autograd.Variable現在是同一個類。torch.Tensor 能夠像之前的Variable一樣追蹤歷史和反向傳播。Variable仍能
pytorch 中的grid_sample和affine_grid
pytorch 中提供了對Tensor進行Crop的方法,可以使用GPU實現。具體函式是torch.nn.functional.affine_grid和torch.nn.functional.grid_sample。前者用於生成二維網格,後者對輸入Tensor按照網格進行雙線性取樣。 grid_sample
pytorch 中的view和permute的用法
view相當於numpy中resize()的功能,但是用法可能不太一樣.可以參考:https://blog.csdn.net/york1996/article/details/81949843 view只能用在contiguous的variable上。如果在view之前用了transpose,p
pytorch中資料載入和處理例項
pytorch中資料載入和處理例項 **A lot of effort in solving any machine learning problem goes in to preparing the data. PyTorch provides many tools to make d
pytorch中的卷積和池化計算方式
TensorFlow裡面的padding只有兩個選項也就是valid和same pytorch裡面的padding麼有這兩個選項,它是數字0,1,2,3等等,預設是0 所以輸出的h和w的計算方式也是稍微有一點點不同的:tf中的輸出大小是和原來的大小成倍數關係,不能任意的輸
pytorch中的torch.utils.data.Dataset和torch.utils.data.DataLoader
首先看torch.utils.data.Dataset這個抽象類。可以使用這個抽象類來構造pytorch資料集。要注意的是以這個類構造的子類,一定要定義兩個函式一個是__len__,另一個是__getitem__,前者提供資料集size,而後者通過給定索引獲取資料和標籤。__
Pytorch中的squeeze()和unsqueeze()函式
在numpy庫中,經常會出現“秩為1的一維陣列”(come from 吳恩達的深度學習,目前還沒有搞清楚numpy中如此設計的意圖)。比如: 注意這裡的a的shape是[3] ,既不是 [1,3] 也不是 [3,1]。這就說明它既不是行向
PyTorch中的資料查詢和篩選
本文原始碼基於版本1.0,互動介面基於0.4.1 import torch 按照指定軸上的座標進行過濾 index_select() 沿著某tensor的一個軸dim篩選若干個座標 >>> x = torch.randn(3, 4) # 目標矩陣 &
Pytorch中nn.ModuleList 和 nn.Sequential的不同
摘錄自 nn.ModuleList is just like a Python list. It was designed to store any desired number of nn.Module’s. It may be useful, for instance,
pytorch中網路loss傳播和引數更新理解
相比於2018年,在ICLR2019提交論文中,提及不同框架的論文數量發生了極大變化,網友發現,提及tensorflow的論文數量從2018年的228篇略微提升到了266篇,keras從42提升到56,但是pytorch的數量從87篇提升到了252篇。 TensorFlow: 228--->
volatile 和 requires_grad在pytorch中的意思
Backward過程中排除子圖 pytorch的BP過程是由一個函式決定的,loss.backward(), 可以看到backward()函式裡並沒有傳要求誰的梯度。那麼我們可以大膽猜測,在BP的過程中,pytorch是將所有影響loss的Variable都求了一次梯
pytorch中的L2和L1正則化,自定義優化器設定等操作
在pytorch中進行L2正則化,最直接的方式可以直接用優化器自帶的weight_decay選項指定權值衰減率,相當於L2正則化中的λλ,也就是: Lreg=||y−y^||2+λ||W||2(1)(
嵌入式系統中RAM和ROM的疑惑澄清
而嵌入式系統中的RAM,一般也就是和PC上的(DDR)SDRAM一樣,掉電丟失。 嵌入式系統特別是手機中ROM的構成,可能是NorFlash也可能是NandFlash,速度較快,但是掉電不丟失。 而之所以之前疑惑地方在於, 一、現在很多時候手機都標榜自己的
jquery中刪除元素detach()和remove() 不同之處
定義和用法detach() 方法移除被選元素,包括所有文字和子節點。這個方法會保留 jQuery 物件中的匹配的元素,因而可以在將來再使用這些匹配的元素。detach() 會保留所有繫結的事件、附加的資料,這一點與 remove() 不同。定義和用法remove() 方法移除
JS中isPrototypeOf 和hasOwnProperty 的區別
另一個 strong 是否 指定 不同 名稱 功能 成員 eof 1、isPrototypeOf isPrototypeOf是用來判斷指定對象object1是否存在於另一個對象object2的原型鏈中,是則返回true,否則返回false。 格式如下: object1.is
Mybatis中javaType和jdbcType對應關系
mat brush true real default url define red tools MyBatis 通過包含的jdbcType類型 BIT FLOAT CHAR TIMESTAMP OTHER
odoo系統中name_search和name_get用法
打印 per sequence not 添加 product xpath ret 領料單 自動帶出工序和工序序號,兩個條件都能搜索,並且兩個都帶出來顯示在前端: # 輸入工序序號會自動帶出工序名// def name_search(self, cr,user,name=
Python在函數中使用*和**接收元組和列表
eight argument ron err 由於 .net 表示 方法 class 當要使函數接收元組或字典形式的參數 的時候,有一種特殊的方法,它分別使用*和**前綴 。這種方法在函數需要獲取可變數量的參數 的時候特別有用。[註意] [1] 由於在args變量前有*前綴