正文共: 2336字 22圖
預計閱讀時間: 6分鐘
最後一節課了,很多更細緻的內容會在part2展開,新的part2會在6月28號放出來,據說共7節,並且會有2節專門講swift。
1.概覽
- 更細緻的創建Databunch
- 從頭創建一個CNN
- ResNet
- U-net
- GAN
- RNN
2.1 核心機器學習概念
- 很多,但是都一筆帶過,說在part2中詳細講解
2.2 FastAI
- split_none:創建databunch的過程,不劃分訓練/驗證組時也要進行這樣一個文件轉化
- data.one_batch:獲取一個batch的數據
2.3 Python
- PIL/Pillow:Python Imaging Library
- parallel:並行處理任務,可以變快
3.1 創建DataBunch詳細講解
共分4個步驟:創建圖片合集、訓練集劃分、打標籤、(圖片變形)、創建數據集
3.2 從頭創建一個卷積神經網絡
初始圖片是28x28的尺寸,因為stride是2,所以每一次Conv2d後尺寸就會縮小一倍,但是kernel有8個,所以輸出的channel有8個。
最後Flatten將矩陣轉化成一個10個數的vector,從而可以和結果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
是不是層越多,效果越好呢?實驗證明並不是,但為什麼呢?也許是方法不對,所以就發現了ResNet
這就是ResNet的核心,一個ResBlock的工作原理:2個卷積層之後,把結果和輸入值相加
為什麼ResNet的效果好,如下圖y軸表示的是loss,ResNet可以更平滑的找到低點
近些年還流行一個DenseNet,適用於小規模數據/圖像分割,可以達到更好的效果。而它和ResNet的唯一區別就是最後相加的時候,採取合併的方式,cat([x,x.orig])。
3.4 U-net
看形狀就知道這是U-net,而且很容易看出分2部分,下降的部分和stride 2 的cnn一樣,叫做encoder;
而上升的部分,叫decoder,類似於放大一張圖,試想一下可以有幾種方式:
- 相當於Stride = 0.5的conv,但是一個4像素的圖像和45個白點合成的圖像,就像是被稀釋過一樣,並沒有什麼意義,所以這種方式不好
- nearest neighbor interpolation:無腦複製,不好不壞
- bilinear interpolation:根據周圍8個點取均值,有點好
- cross connection: 用下降過程對應結果,合併到上升過程,如圖白色部分,非常好
更多細節請參考源代碼
UnetBlock DynamicUnet
unet_learner
3.5 GAN
GAN的本質就是一個具備複雜的loss function的神經網絡,本課講解了這個loss fn是如何一步步進化的:
- MSE loss:只比較生成圖像和目標圖像每個像素點的MSE,能實現去水印的效果,但是並沒有讓圖片變清晰
- Critic:增加一個評論家的角色,訓練成可以鑑別清晰和模糊圖像的神經網絡,然後將區分效果作為loss,也就是越分不清哪張圖是清晰的,loss就越低。所以這樣圖片就清晰了,但是動物的眼睛還是模糊的
- Feature loss/Perceptual loss:來衡量圖片特徵的接近程度,運用pytorch的hook函數,將訓練過程中每個Activations的特徵值存下來,進行比較
- GAN:將generator和critic整合到一起,相當於Generator每次輸出圖片,都用於critic的訓練,而critic訓練好的模型,可以作為generator的loss function
Crappify:把高質量圖片處理成低質量圖片(function)
Generator:目標是生成高質量圖片(Model)
Critic:高低質量圖片分類器(Model)
3.6 RNN 遞歸神經網絡/循環神經網絡
這裡的例子是,根據一句話預測下一個單詞。
先從一個最基本的神經網絡開始,瞭解圖形和箭頭的含義
然後搭建一個最基本的原型,根據單詞1,2,預測單詞3
然後再下一步,根據單詞123預測4
於是找到規律,根據n-1個單詞,預測第n個單詞
然後發現預測第n個詞時,不用每次都把之前n-1個單詞算一遍,他們有之前算過的,所以可以存下來,作為輸入值,在下一次預測時會用到
於是生成了一個結構,每次輸出前的Activation都可以作為下一次運算的輸入值,就是有個遞歸關係的RNN
閱讀更多 增長浩克 的文章