正文共:?2336字?22圖
預(yù)計閱讀時間:?6分鐘
最后一節(jié)課了谨垃,很多更細(xì)致的內(nèi)容會在part2展開,新的part2會在6月28號放出來,據(jù)說共7節(jié)敦捧,并且會有2節(jié)專門講swift。
1.概覽
更細(xì)致的創(chuàng)建Databunch
從頭創(chuàng)建一個CNN
ResNet?
U-net
GAN
RNN
2.1 核心機器學(xué)習(xí)概念
很多碰镜,但是都一筆帶過兢卵,說在part2中詳細(xì)講解
2.2 FastAI
split_none:創(chuàng)建databunch的過程,不劃分訓(xùn)練/驗證組時也要進行這樣一個文件轉(zhuǎn)化
data.one_batch:獲取一個batch的數(shù)據(jù)
2.3 Python
PIL/Pillow:Python Imaging Library
parallel:并行處理任務(wù)绪颖,可以變快
3.1 創(chuàng)建DataBunch詳細(xì)講解
共分4個步驟:創(chuàng)建圖片合集秽荤、訓(xùn)練集劃分、打標(biāo)簽柠横、(圖片變形)窃款、創(chuàng)建數(shù)據(jù)集
3.2?從頭創(chuàng)建一個卷積神經(jīng)網(wǎng)絡(luò)
初始圖片是28x28的尺寸,因為stride是2牍氛,所以每一次Conv2d后尺寸就會縮小一倍晨继,但是kernel有8個,所以輸出的channel有8個搬俊。
最后Flatten將矩陣轉(zhuǎn)化成一個10個數(shù)的vector紊扬,從而可以和結(jié)果0-9進行比對蜒茄。
model = nn.Sequential(
nn.Conv2d(1, 8, kernel_size=3, stride=2, padding=1), # 14x14
nn.BatchNorm2d(8),
nn.ReLU(),
nn.Conv2d(8, 16, kernel_size=3, stride=2, padding=1), # 7x7
nn.BatchNorm2d(16),
nn.ReLU(),
nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1), # 4x4
nn.BatchNorm2d(32),
nn.ReLU(),
nn.Conv2d(32, 16, kernel_size=3, stride=2, padding=1), # 2x2
nn.BatchNorm2d(16),
nn.ReLU(),
nn.Conv2d(16, 10, kernel_size=3, stride=2, padding=1), # 1x1
nn.BatchNorm2d(10),
Flatten() # remove (1,1) grid
)
3.3 ResNet
是不是層越多,效果越好呢餐屎?實驗證明并不是檀葛,但為什么呢?也許是方法不對啤挎,所以就發(fā)現(xiàn)了ResNet
這就是ResNet的核心驻谆,一個ResBlock的工作原理:2個卷積層之后,把結(jié)果和輸入值相加
為什么ResNet的效果好庆聘,如下圖y軸表示的是loss胜臊,ResNet可以更平滑的找到低點
近些年還流行一個DenseNet,適用于小規(guī)模數(shù)據(jù)/圖像分割伙判,可以達(dá)到更好的效果象对。而它和ResNet的唯一區(qū)別就是最后相加的時候,采取合并的方式宴抚,cat([x,x.orig])勒魔。
3.4 U-net
看形狀就知道這是U-net,而且很容易看出分2部分菇曲,下降的部分和stride 2 的cnn一樣冠绢,叫做encoder;
而上升的部分常潮,叫decoder弟胀,類似于放大一張圖,試想一下可以有幾種方式:
更多細(xì)節(jié)請參考源代碼
UnetBlock?DynamicUnet
unet_learner
3.5 GAN
GAN的本質(zhì)就是一個具備復(fù)雜的loss function的神經(jīng)網(wǎng)絡(luò)喊式,本課講解了這個loss fn是如何一步步進化的:
MSE loss:只比較生成圖像和目標(biāo)圖像每個像素點的MSE孵户,能實現(xiàn)去水印的效果,但是并沒有讓圖片變清晰
Critic:增加一個評論家的角色岔留,訓(xùn)練成可以鑒別清晰和模糊圖像的神經(jīng)網(wǎng)絡(luò)夏哭,然后將區(qū)分效果作為loss,也就是越分不清哪張圖是清晰的献联,loss就越低竖配。所以這樣圖片就清晰了,但是動物的眼睛還是模糊的
Feature loss/Perceptual loss:來衡量圖片特征的接近程度里逆,運用pytorch的hook函數(shù)进胯,將訓(xùn)練過程中每個Activations的特征值存下來,進行比較
GAN:將generator和critic整合到一起运悲,相當(dāng)于Generator每次輸出圖片龄减,都用于critic的訓(xùn)練项钮,而critic訓(xùn)練好的模型班眯,可以作為generator的loss function
Crappify:把高質(zhì)量圖片處理成低質(zhì)量圖片(function)
Generator:目標(biāo)是生成高質(zhì)量圖片(Model)
Critic:高低質(zhì)量圖片分類器(Model)
3.6 RNN 遞歸神經(jīng)網(wǎng)絡(luò)/循環(huán)神經(jīng)網(wǎng)絡(luò)
這里的例子是希停,根據(jù)一句話預(yù)測下一個單詞。
先從一個最基本的神經(jīng)網(wǎng)絡(luò)開始署隘,了解圖形和箭頭的含義
然后搭建一個最基本的原型宠能,根據(jù)單詞1,2磁餐,預(yù)測單詞3
然后再下一步违崇,根據(jù)單詞123預(yù)測4
于是找到規(guī)律,根據(jù)n-1個單詞诊霹,預(yù)測第n個單詞
然后發(fā)現(xiàn)預(yù)測第n個詞時羞延,不用每次都把之前n-1個單詞算一遍,他們有之前算過的脾还,所以可以存下來伴箩,作為輸入值,在下一次預(yù)測時會用到
于是生成了一個結(jié)構(gòu)鄙漏,每次輸出前的Activation都可以作為下一次運算的輸入值嗤谚,就是有個遞歸關(guān)系的RNN