學(xué)習(xí)資料:https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%BA%8C%E7%AB%A0/index.html
日期:20220517
張量
自己理解:張量就是0到N維的數(shù)組茫打,可以是常數(shù)浴栽,可以是數(shù)組,也可以是矩陣楚午,或者多維數(shù)組,三維張量例如RGB圖奈辰。它是數(shù)據(jù)的容器丈屹。
?torch.Tensor是存儲(chǔ)和變換張量的主要工具
基本操作
1. new操作
2. 更多的new操作(可以看出x2和x并非同一個(gè)存儲(chǔ)地址)
3. 失敗的類型轉(zhuǎn)換
4.? x.size()等價(jià)于x.shape
基本運(yùn)算
1. 張量加法:x+y 或者 torch.add(x, y) 或者 x.add_(y)
2. 索引操作:x[:, 1]
3. 改變張量shape
x=torch.randn(4,4)
y=x.view(16)
z=x.view(-1,8)# -1是指這一維的維數(shù)由其他維度決定
副本和拷貝
用clone操作,類似于python的copy判族,參考https://pytorch.org/docs/stable/generated/torch.clone.html
廣播機(jī)制
當(dāng)兩個(gè)張量的shape不同時(shí)躺盛,且做運(yùn)算時(shí),會(huì)自動(dòng)觸發(fā)廣播操作形帮,復(fù)制成相同的shape槽惫,再做運(yùn)算。
留一個(gè)問(wèn)題:為什么pytorch要設(shè)計(jì)廣播機(jī)制辩撑?在哪些場(chǎng)景中經(jīng)常會(huì)用到呢界斜?
自動(dòng)求導(dǎo)
autograd包是pytorch最核心的package,它為張量上所有的運(yùn)算(操作)合冀,都提供了自動(dòng)求導(dǎo)各薇。它是define-by-run的框架
define-by-run:如何理解?留下這個(gè)小問(wèn)題君躺。
1. 三個(gè)步驟:tensor操作峭判、requires_grad=true开缎、.backward()求導(dǎo)
2.?detach()方法:可以取消數(shù)據(jù)追蹤、保護(hù)隱私朝抖;也可以在評(píng)估過(guò)程中停用啥箭,優(yōu)化內(nèi)存和運(yùn)算時(shí)間;
3.?acyclic graph:編碼一個(gè)張量的完整計(jì)算過(guò)程
演示
思考:理解反向傳播和pytorch實(shí)現(xiàn)原理
參考youtube上的講解治宣,https://www.youtube.com/watch?v=ma2KXWblllc
并行計(jì)算
簡(jiǎn)而言之急侥,就是用多個(gè)GPU來(lái)并行計(jì)算,總結(jié)一些要點(diǎn):
1. gpu和cpu之間數(shù)據(jù)傳輸較慢
2. 簡(jiǎn)單運(yùn)算盡量用cpu
3. gpu需要指名侮邀,否則會(huì)默認(rèn)為第一塊坏怪,導(dǎo)致OOM
4. 并行化方法:Network partitioning、Layer-wise partitioning绊茧、Data parallelism 主要考慮通信開(kāi)銷
遺留問(wèn)題
1. 熟練推導(dǎo)反向傳播的原理
2. pytorch是如何實(shí)現(xiàn)autograd的铝宵?
3. 熟練部署多gpu的幾種方式