L14|中文 F3 學生的學習紀錄
L14|中文 F3 學生的學習紀錄
角色設定:我是中三學生,只看得懂中文。Python 學過變數、for 迴圈和 list,數學讀到一元二次方程。我靠中文課程筆記、YouTube 自動翻譯字幕和查字典來學。Kaggle 筆記本的操作步驟,是依官方 notebook 流程寫下的練習紀錄。
我讀懂了什麼(用自己的話)
- 程式越寫越長時,要把重複的部分包成類別和函數。
- nn.Module 會幫我記住模型裡所有要訓練的數字。
- Optimizer 把「更新參數」和「清除梯度」包起來,一行就能做。
- DataLoader 把資料切成一批一批,每個 epoch 還會打亂順序。
我卡住的地方,和我怎麼解決
| 卡住的地方 | 我怎麼解決 |
|---|---|
| **kwargs 看不懂 | 寫了一個小函數印出 kwargs,發現它就是把多餘的具名參數收進一個字典。 |
| 不知道為什麼要打亂資料順序 | 想到如果資料按類別排好,模型會先只看到貓再只看到狗,學得很偏。 |
練習作答
Q1. Dataset 和 DataLoader 分工有什麼不同?
Dataset 管「單筆資料」:有幾筆、第 i 筆的輸入和標籤是什麼。DataLoader 管「怎麼送」:把資料分成批次、每個 epoch 打亂順序,一批批交給模型。
Q2. 為什麼每次更新參數後都要 zero_grad()?
因為 PyTorch 預設會把新算的梯度加到舊的上面。如果不歸零,梯度會越積越大,參數更新就錯了。
Q3. 用 nn.Module 取代自己手動管理參數,有什麼好處?
nn.Module 會自動收集所有子層的參數,parameters() 一次全部拿到,不用自己一個個列;也能輕鬆搬到 GPU、存檔和載入,程式更短、更不容易漏掉。
我的卡片盒筆記
卡片|程式寫得好,是讓下一個人一眼看懂
這課沒有新的數學,而是把上一課很長的程式一步步整理成 Module、Optimizer、Dataset、DataLoader。整理之後,訓練迴圈只剩幾行,每一行都清楚表達一件事。
我做小組專題時,負責整理大家的程式。原本每個人都把所有東西寫在一個大檔案,變數名稱叫 a、b、temp,改一個地方就壞三個地方。後來我們把讀資料、計算、顯示結果拆成三個函數,各自負責,後來加功能就容易很多。不過我也覺得拆太細會變成要跳很多檔案才看得懂,適當的分層比較重要。那次之後,組員要加新功能時,只要找到負責的那個函數就好,不用再翻遍整個檔案。
這週我要做的小行動:把自己 L05 的鐵達尼號程式改寫成 Dataset、模型、訓練迴圈三個部分。
🔗 推薦產生關聯的筆記: → 程式設計類:「一個函數只做一件事」 → 團隊協作類:「好的程式結構是給隊友的禮物」 → 學習方法類:「整理是理解的第二遍」
回到課程筆記:L14_反向傳播重構_202611041526