type
status
date
slug
summary
tags
category
icon
password
 

前言

  • 我是誰
  • 我們當初用到的套件(各給個簡介)
  • 有需要都可以幫忙
  • 今天主要的主題
 

複習 pdm

Pytorch 基礎時間

安裝 Pytorch

官網可以選擇你的裝置和需求,就會有他提供的 pip install code
notion image
 
 
 
目前的 code
 

下載 MNIST

這個部分會把資料下載下來

transform: ToTensor()

你可以使用以下程式碼真的把 tensor print 出來
將資料轉換為 ToTensor() 格式是為了將圖像資料轉換為PyTorch所需的張量形式,以便進行後續的數據處理和模型訓練。ToTensor() 轉換將圖像資料轉換為範圍在0到1之間的浮點數張量。
以下是一個簡單的示例,展示如何將一張圖片轉換為 ToTensor() 格式:
這樣的轉換可以幫助您將圖像資料準備好,以便在PyTorch中進行處理和訓練。如果您有任何其他問題或需要進一步的說明,請隨時告訴我。
基本上就是把 jpg 之類的圖片,轉換成以下的二維向量的形式

5. 數據處理

Dataloader

裡面主要只是設定關於這個 dataset 的一些參數
畢竟這邊是 mnist ,所以做 dataloader 很方便
假如要把自己的資料處理成 dataloader 要查一下
GPT 提供的一些教學資料
這裡有幾篇教學文章,詳細說明了如何將自定義資料轉換成 PyTorch 的 DataLoader
  1. PyTorch 官方教程: 這篇文章介紹了如何編寫自定義數據集、數據加載器和轉換。它詳細說明了如何繼承 torch.utils.data.Dataset 並實現必要的方法,如 __len____getitem__,以便將自定義數據集與 DataLoader 一起使用。[1]
  1. Medium 教學文章: 這篇文章展示了如何創建自定義數據集和數據加載器。文章提供了實際的程式碼範例,展示了如何在主函數中創建自定義數據集的實例,並使用 DataLoader 進行數據加載。[2]
  1. Squash.io 教學文章: 這篇教學文章詳細介紹了如何為自定義圖像數據集實現自定義數據加載器。文章提供了從創建數據集實例到使用 DataLoader 的完整步驟和程式碼範例。[3]
  1. Towards Data Science 教學文章: 這篇文章專注於如何使用 PyTorch 的 DatasetDataLoader 處理自定義文本數據。它介紹了如何使用 pandas 來管理數據,並展示了如何創建自定義數據集類別和數據加載器。[4]
這些資源應該能幫助您了解如何將自定義數據轉換為 PyTorch 的 DataLoader。如果您有任何其他問題或需要進一步的說明,請隨時告訴我。

處理 test data

我們一個一個看
  • 將測試數據轉換為浮點型並進行正規化。這裡使用 torch.unsqueeze 函數將測試數據的維度從 (N, 28, 28) 調整為 (N, 1, 28, 28),其中 N 是樣本數。 原因是因為 CNN 需要有通道數(如 RGB 是 3)
轉換前轉換後想像
您說得對,讓我重新檢查並更正之前的說明。
在處理圖像數據時,特別是灰度圖像和 RGB 圖像,應該注意通道的維度位置。以下是正確的說明和模擬結果:

灰度圖像

對於灰度圖像,原始數據形狀為 (N, 28, 28),我們希望將其轉換為 (N, 1, 28, 28),這樣每個樣本有一個單獨的通道。
模擬結果:

RGB 圖像

對於 RGB 圖像,原始數據形狀為 (N, H, W, 3),我們希望將其轉換為 (N, 3, H, W),這樣每個樣本有三個通道(紅色、綠色、藍色)。
假設原始數據形狀為 (2, 3, 28, 28),即兩個樣本,每個樣本有三個通道,每個通道的大小為 28x28。
模擬結果:
在這個例子中,RGB 圖像本身已經有三個通道,因此不需要使用 torch.unsqueeze 來增加維度。
希望這樣的模擬能幫助您理解轉換前後具有三個通道的張量的外觀。如果您有任何其他問題或需要進一步的說明,請隨時告訴我。
  • 接著將數據類型轉換為 torch.FloatTensor,並將像素值除以255進行正規化。最後,僅保留前2000個樣本。
 

6. 建立 CNN

 
看一下這個架構是三小
 

7. optimization & loss function

就不要開搞就好
 

8. training

 

9. testing

 

Wandb

簡介

Wandb 是一個協助機器學習「監測」的工具
試想一個問題:當今天的 model 要持續 24 小時學習新的資料, 那我們要怎麼確保它的學習狀況
因此 Wandb 是要來解決這個問題
 
以下主要會介紹 Wandb 的基本功能,為了方便說明和想像, 主要會用 MNIST 數字手寫辨識來說明
另外下面是官方的教學連結,主要使用 Pytorch
 
另外以下是 Docs

從註冊到開始

notion image
從官網註冊之後,參考第一頁的樣子
  1. 先將 wandb 的部分裝好
  1. 登入以及跑測試的程式碼
觀察程式碼以及 terminal
 
💡
Wandb 也有 Docker 版本,但我後來在使用 Docker 版本時遇到了一些 bug (印象中是分享的網址會出問題),因此我後來使用的是官網的

名詞簡介

  • project:
  • run:
  • Artifact:
 
 

結合剛剛的手寫辨識 & 主要功能

我們依照官網給出的範例,結合剛剛的手寫辨識,讓大家了解 Wandb 的主要功能
The following tutorials take you through the fundamentals of Weights & Biases for machine learning experiment tracking, model evaluation, hyperparameter tuning, model and dataset versioning, and more.
  1. Track experiments
  1. Visualize predictions
  1. Tune hyperparameters
  1. Track models and datasets
  1. Register models
  1. Iterate on LLMs
 

紀錄訓練過程 (log)

首先最直覺的第一個方案:把整個神經網路的過程表現出來
平常只能在終端機看到跑了幾個 epoch, loss ,這些沒表現,只讓評審看到最後的模型太可惜
完整的 Code
我們在剛剛 training 的部分,每 50 個 step 就會在終端機跑出一次 train_loss 和 test_accuracy
我們使用 wandb.log 把它記錄上去
 
『如何看到你的東東』
先找到 wandb 官網,左邊有一排 『Project』
notion image
點進去就可以看到裡面的東西了
notion image
💡
延伸:把 gradient, step size 視覺化

把預測結果可視化 (log)

有時候你的 Model 體感上怪怪的,但你不知道怎麼調整
這個時候可以把一些樣本的預測結果丟上去 Wandb 一起監測,以下是個簡單的範例
完整的 Code
我們在模型預測之後,把 Code 改成這樣
一樣,我們使用 wandb.log() 來把我們想要看的數據記錄上去
注意,這邊我們 log 上去的物件是 wandb.Image,其中 caption 指的是圖片的描述,不一定要加
 
💡
延伸:可以製造 wandb table 物件,讓 prediction 的結果更好看
 

調整 HyperParameter (Sweep)

你在想要怎麼調整 epoch, batch-size, learning-rate 好像只能靠玄學或者拼運氣
我們希望可以有一個更好的方式去觀察,我們的資料更適合什麼參數
那我們就可以用 sweep 的功能,讓這些 hyperparameter 排列組合
完整程式碼
可以注意完整程式碼
  1. 多了 sweep config 去做 sweep 的設定
    1. Code
  1. sweep_id
    1. Code
  1. train 的部分,變成一個 function
    1. Code
  1. 讓 wandb.agent 去啟動那個 function
    1. Code
 

Track models & dataset (Artifact)

假如你要去追蹤 models 或資料,那 Artifact 就是你的最佳夥伴
就是在使用資料或 model 之前,先上傳到 wandb
並且每次使用的時候再下載一次,就可以追蹤每次的 run 是使用哪一筆
由於使用 MNIST 來示範這個有點雞肋,因此以口述帶過這個邏輯
notion image
例如這個是當初訓練 SOM 的 Lieage,可以看出這個 model 經歷了哪些 run 以及使用了哪些資料,還有上一版的資料是什麼,可以讓你看到
 
第一個官方文件是在說明 Artifact 的基本概念
第二個官方文件更加說明的 Artifact 的應用,例如怎麼 roll-back 等等的
 
 

總結: Wandb 之於畢業專案

  1. 訓練過程更公開化
  1. 有美美的東西可以給評審或者路過的人看 避免有人要看 train 的細節,結果 demo 那天翻車
  1. Wandb 有一個 report 的功能,可以更順的接到畢專的前端裡
  1. 把整個機器學習再複習一次:)
 
 
相关文章
NCCU Server Setting備課 GDSC 課程專區