2023年1月18日 星期三

PyTorch 深度學習攻略筆記 (二)

今天繼續記錄閱讀 "PyTorch 深度學習攻略" 的心得筆記, 本系列之前的文章參考 :


第二章筆記摘要如下 : 
  1. 預訓練模型可以看做是一段定義好的程式, 可讓使用者輸入資料並傳回輸出的結果. 此程式之特性由模型之架構與訓練資料集所決定. 模型已經用大量的輸入-輸出對訓練過, 並具有固定之輸出資料格式. 使用現成的預訓練模型可快速實作一個深度學習應用, 可省去自行訓練所需的時間. PyTorch Hub 網站提供了統一的介面可讓使用者下載預訓練模型. 學習如何用 PyTorch 執行一個預訓練模型是非常有用的技能.
  2. ImageNet 是一個由史丹福大學維護的龐大圖像資料集, 起源於 2010 年起之影 ILSVRC 像辨識學術競賽, 裡面有超過 1400 萬張圖片, 全部都經過人工標註 (遵循 WordNet 關於標籤之名詞層次規範). ImageNet 競賽每年的任務不同, 例如 : 
    (1). 圖片分類 (貓, 狗, 巴士等)
    (2). 物體定位 (物體在圖片中之位置)
    (3). 物體辨識 (識別並標記圖片中之多個物體)
    (4). 場景分類 
    (5). 場景解析 (將圖片分割成不同之語義類別)
  3. ILSVRC 競賽主辦單位提供的訓練集包含 120 萬張圖片, 並使用 1000 個詞彙進行人工標籤. 輸入之圖片需先預處理成 torch.Tensor 3D 浮點數張量 (包含一個色彩通道軸與長寬兩個空間軸). 接著將處理過的圖片輸入到預訓練模型, 模型會輸出個類別的分數, 得分最高者即模型認為是該圖片之類別, 1000 種類別就會給出 1000 個分數 (包含 1000 個元素之張量). 
  4. PyTorch 的 TorchVision 函式庫包含數個電腦視覺模型, 例如 AlexNet, ResNet, 與 Inception v3 等, 也包含與 ImageNet 類似的資料集. 可用下列指令檢視模型種類 :

    from torchvision import models  
    dir(models)   

    在 Colab 的執行結果如下 (很長的 list) :


    其中首字母大寫的是 Python 類別, 都是不同結構的神經網路模型, 小寫的則是函式, 很多是前面那些神經網路模型類別的建構式, 呼叫它們會傳回這些網路的模型實體. 本章主要介紹最有名的 AlexNet 與 ResNet. 
  5. 在殘差網路 (ResNet) 出現之前, 層數很多的神經網路很難訓練. 
  6.  AlexNet 是 2012 年的 ILSVRC 競賽的冠軍, 以 15.4% 的預測錯誤率勝過亞軍的 26.2%. 此成就使人們開始注意到深度學習在視覺辨識任務中的潛力, 此後陸續提出的架構與模型不斷使錯誤率下降, 目前最新的 FixEfficientNet-L2 模型之錯誤率已降至 1.3%.
  7. AlexNet 在結構上由前面五層過濾層對圖片進行縮小轉換 (96->256->384->384->256), 最後一個過濾層輸出一個 4096 個元素的向量, 然後經過一個 4096 神經元的全連接層後接到輸出層輸出 1000 個元素的向量 (分數), 其中最大者即為預測的結果. 
  8. 建立 AlexNet 模型的指令如下 : 

    from torchvision import models 
    alexnet=models.AlexNet()

    此指令會建立預設層數與神經元數的 AlexNet 模型.
  9. 典型的電腦視覺深層神經網路的架構是由大量的過濾器與非線性函式組成的連續序列. 
  10. 在對神經網路進行訓練之前, 必須對輸入資料做預處理 (preprocessing), 例如圖片要符合尺寸, RGB 數值要在相近範圍內 (即有相近之平均值與標準差). PyTorch 的 torchvision 模組提供的 transform 函式庫可用來對圖片做預處理. 
  11. 生成對抗網路 (GAN) 使用兩個神經網路模型, 一個扮演創作贗品的畫家 (生成器); 另一個扮演鑑別贗品的藝術家 (鑑別器), 兩者互相競爭, 不斷重複創作與鑑別的動作. 這種雙網路設計並非典型的深度學習架構, 但用在遊戲中卻有意想不到的結果.  

沒有留言 :