產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

正文共: 2336字 22圖

預計閱讀時間: 6分鐘

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

最後一節課了,很多更細緻的內容會在part2展開,新的part2會在6月28號放出來,據說共7節,並且會有2節專門講swift。

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

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個步驟:創建圖片合集、訓練集劃分、打標籤、(圖片變形)、創建數據集

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

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

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

這就是ResNet的核心,一個ResBlock的工作原理:2個卷積層之後,把結果和輸入值相加

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

為什麼ResNet的效果好,如下圖y軸表示的是loss,ResNet可以更平滑的找到低點

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

近些年還流行一個DenseNet,適用於小規模數據/圖像分割,可以達到更好的效果。而它和ResNet的唯一區別就是最後相加的時候,採取合併的方式,cat([x,x.orig])。

3.4 U-net

看形狀就知道這是U-net,而且很容易看出分2部分,下降的部分和stride 2 的cnn一樣,叫做encoder;

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

而上升的部分,叫decoder,類似於放大一張圖,試想一下可以有幾種方式:

  1. 相當於Stride = 0.5的conv,但是一個4像素的圖像和45個白點合成的圖像,就像是被稀釋過一樣,並沒有什麼意義,所以這種方式不好
產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN


  1. nearest neighbor interpolation:無腦複製,不好不壞
產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN


  1. bilinear interpolation:根據周圍8個點取均值,有點好
產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN


  1. cross connection: 用下降過程對應結果,合併到上升過程,如圖白色部分,非常好
產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN


更多細節請參考源代碼

UnetBlock DynamicUnet

unet_learner

3.5 GAN

GAN的本質就是一個具備複雜的loss function的神經網絡,本課講解了這個loss fn是如何一步步進化的:

  1. MSE loss:只比較生成圖像和目標圖像每個像素點的MSE,能實現去水印的效果,但是並沒有讓圖片變清晰
  2. Critic:增加一個評論家的角色,訓練成可以鑑別清晰和模糊圖像的神經網絡,然後將區分效果作為loss,也就是越分不清哪張圖是清晰的,loss就越低。所以這樣圖片就清晰了,但是動物的眼睛還是模糊的
  3. Feature loss/Perceptual loss:來衡量圖片特徵的接近程度,運用pytorch的hook函數,將訓練過程中每個Activations的特徵值存下來,進行比較
  4. GAN:將generator和critic整合到一起,相當於Generator每次輸出圖片,都用於critic的訓練,而critic訓練好的模型,可以作為generator的loss function
產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

Crappify:把高質量圖片處理成低質量圖片(function)

Generator:目標是生成高質量圖片(Model)

Critic:高低質量圖片分類器(Model)

3.6 RNN 遞歸神經網絡/循環神經網絡

這裡的例子是,根據一句話預測下一個單詞。

先從一個最基本的神經網絡開始,瞭解圖形和箭頭的含義

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

然後搭建一個最基本的原型,根據單詞1,2,預測單詞3

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

然後再下一步,根據單詞123預測4

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

於是找到規律,根據n-1個單詞,預測第n個單詞

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

然後發現預測第n個詞時,不用每次都把之前n-1個單詞算一遍,他們有之前算過的,所以可以存下來,作為輸入值,在下一次預測時會用到

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN

於是生成了一個結構,每次輸出前的Activation都可以作為下一次運算的輸入值,就是有個遞歸關係的RNN

產品經理也能動手實踐的AI(八)- Resnet Unet GANS RNN


分享到:


相關文章: