PyTorch | 0.3到0.4不完整遷移手冊

一 寫在前面

未經(jīng)允許式塌,不得轉(zhuǎn)載,謝謝~

pytorch發(fā)布了0.4版本,跟0.3相比還是有挺多不同的回官,所以學(xué)習(xí)了一下官網(wǎng)的資料蓉驹,然后在這里做一個內(nèi)容的整理與記錄城榛。方便規(guī)范自己以后的代碼,也便于大家參考态兴。ヾ(?°?°?)??

這里我只挑了我覺得重要的或者目前有用的東西整理狠持,沒有把所有的東西都寫在這里,要看完整版的可以文章拉到底點擊參考資料~

二 核心變換

2.1 主要改變

  • TensorVariable合并
  • 有些操作現(xiàn)在可以返回0維張量(scalar)
  • 抑制了volatile標(biāo)志位

1 合并Tensor和Variable類

這是我覺得最大最重要的一點改變了瞻润。

  • torch.autograd.Variabletorch.Tensor現(xiàn)在是同一個類.
  • 更準(zhǔn)確的說是torch.Tensor包括了Variable工坊,所以我們都稱之為Tensor好了。
  • Variable還能像以前一樣工作敢订,但是返回的類型是torch.Tensor王污。
  • 這樣也就意味著你沒必要在代碼中用Variable將變量包裝起來了。

2 獲取Tensor 類型的函數(shù)變了

  • 原來是:type(x)
  • 現(xiàn)在是: x.type()
  • 還有isinstance()函數(shù)的用法具體如下:
```source-python
>>> x = torch.DoubleTensor([1, 1, 1])
>>> print(type(x)) # was torch.DoubleTensor
<class 'torch.autograd.variable.Variable'>
>>> print(x.type())  # OK: 'torch.DoubleTensor'
'torch.DoubleTensor'
>>> print(isinstance(x, torch.DoubleTensor))  # OK: True
True

3 關(guān)于自動求梯度用法的變遷

  • 自動求梯度requires_grad現(xiàn)在是Tensor的屬性楚午。
  • 具體的使用可以見這個例子:
```source-python
>>> x = torch.ones(1)  # create a tensor with requires_grad=False (default)
>>> x.requires_grad
False
>>> y = torch.ones(1)  # another tensor with requires_grad=False
>>> z = x + y
>>> # both inputs have requires_grad=False. so does the output
>>> z.requires_grad
False
>>> # then autograd won't track this computation. let's verify!
>>> z.backward()
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
>>>
>>> # now create a tensor with requires_grad=True
>>> w = torch.ones(1, requires_grad=True)
>>> w.requires_grad
True
>>> # add to the previous result that has require_grad=False
>>> total = w + z
>>> # the total sum now requires grad!
>>> total.requires_grad
True
>>> # autograd can compute the gradients as well
>>> total.backward()
>>> w.grad
tensor([ 1.])
>>> # and no computation is wasted to compute gradients for x, y and z, which don't require grad
>>> z.grad == x.grad == y.grad == None
True

如上所示昭齐,我們可以得到如下信息:

  • 默認(rèn)情況創(chuàng)建的張量不需要梯度;
  • 所有的輸入inputs都不需要張量矾柜,那么輸出也不需要計算梯度阱驾;
  • 當(dāng)我們希望創(chuàng)建的張量自動計算梯度時就谜,在定義的時候加上requires_grad=True
  • 當(dāng)輸入inputs中的有一個需要梯度時,那么輸出也會自動計算梯度
  • 但是其他不在定義的時候不需要計算梯度的張量在反向傳播及求梯度的時候就不再計算這些張量的梯度了里覆;

除了在定義的時候指定變量需要計算梯度外丧荐,也可以用函數(shù)requires_grad_()來對已經(jīng)存在的張量設(shè)置requires_grad屬性。

```source-python
>>> existing_tensor.requires_grad_()
>>> existing_tensor.requires_grad
True
>>> my_tensor = torch.zeros(3, 4, requires_grad=True)
>>> my_tensor.requires_grad
True

4 關(guān)于.data

  • 之前是用.data來獲取Variable中的Tensor
  • 合并以后也有類似的用法喧枷,y=x.data虹统,y會是一個跟x數(shù)據(jù)一樣的新張量,默認(rèn)不計算梯度隧甚。
  • 某些情況下车荔,使用.data會比較不安全。因為所有在x.data中出現(xiàn)的變換就不再被autugrad記錄了戚扳,在反向傳播計算梯度的時候可能就會出錯忧便。
  • 比較安全的方式是使用x.detach(),雖然返回的還是沒是不計算梯度的張量帽借,但是這個張量所作的in-place變換還是會被autograd自動記錄到珠增。

5. 開始支持0維標(biāo)量

  • 以前pytorch會將標(biāo)量都擴展成1維的張量(1,)
  • 現(xiàn)在開始支持標(biāo)量的存在了砍艾。
  • 具體的標(biāo)量使用方法以及向量vector使用方法都如下所示:
```source-python
>>> torch.tensor(3.1416)         # create a scalar directly
tensor(3.1416)
>>> torch.tensor(3.1416).size()  # scalar is 0-dimensional
torch.Size([])
>>> torch.tensor([3]).size()     # compare to a vector of size 1
torch.Size([1])
>>>
>>> vector = torch.arange(2, 6)  # this is a vector
>>> vector
tensor([ 2.,  3.,  4.,  5.])
>>> vector.size()
torch.Size([4])
>>> vector[3]                    # indexing into a vector gives a scalar
tensor(5.)
>>> vector[3].item()             # .item() gives the value as a Python number
5.0
>>> sum = torch.tensor([2, 3]).sum()
>>> sum
tensor(5)
>>> sum.size()
torch.Size([])

所以以后在神經(jīng)網(wǎng)絡(luò)中計算損失的時候要將原來的total_loss += loss.data[0]改成total_loss += loss.item()

6. 限制了volatile標(biāo)志位的使用

  • 原來用在Variable中使用volatile=True會讓autograd不再計算梯度值蒂教。
  • 現(xiàn)在這個標(biāo)志位被限制了,即使用了也沒有作用辐董。
  • pytorch用了更加靈活的方式來代替悴品,具體的使用方法如下所示:
```source-python
>>> x = torch.zeros(1, requires_grad=True)
>>> with torch.no_grad():
...     y = x * 2
>>> y.requires_grad
False
>>>
>>> is_train = False
>>> with torch.set_grad_enabled(is_train):
...     y = x * 2
>>> y.requires_grad
False
>>> torch.set_grad_enabled(True)  # this can also be used as a function
>>> y = x * 2
>>> y.requires_grad
True
>>> torch.set_grad_enabled(False)
>>> y = x * 2
>>> y.requires_grad
False

emmmm,把最主要的幾個變換整理了,還有一些沒有包括進(jìn)來简烘,感興趣的大家還是戳底部看原文吧苔严,也沒有什么特別需要講的東西,純粹的翻譯好像有點太浪費時間了~

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孤澎,一起剝皮案震驚了整個濱河市届氢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌覆旭,老刑警劉巖退子,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異型将,居然都是意外死亡寂祥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門七兜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丸凭,“玉大人,你說我怎么就攤上這事∠” “怎么了铛碑?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虽界。 經(jīng)常有香客問我汽烦,道長,這世上最難降的妖魔是什么莉御? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任撇吞,我火速辦了婚禮,結(jié)果婚禮上颈将,老公的妹妹穿的比我還像新娘梢夯。我一直安慰自己言疗,他們只是感情好晴圾,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著噪奄,像睡著了一般死姚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勤篮,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天都毒,我揣著相機與錄音,去河邊找鬼碰缔。 笑死账劲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的金抡。 我是一名探鬼主播瀑焦,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梗肝!你這毒婦竟也來了榛瓮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巫击,失蹤者是張志新(化名)和其女友劉穎禀晓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坝锰,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡粹懒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了顷级。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凫乖。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拣凹,到底是詐尸還是另有隱情森爽,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布嚣镜,位于F島的核電站爬迟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏菊匿。R本人自食惡果不足惜付呕,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跌捆。 院中可真熱鬧徽职,春花似錦、人聲如沸佩厚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抄瓦。三九已至潮瓶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钙姊,已是汗流浹背毯辅。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煞额,地道東北人思恐。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像膊毁,于是被迫代替她去往敵國和親胀莹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359