---
# System prepended metadata

title: 人工神經網路與深度學習 Artificial Neural Networks and Deep Learning
tags: [CSnote]

---

# 人工神經網路與深度學習 Artificial Neural Networks and Deep Learning
## 注意事項
* 這門課整體學起來有點弔詭，初學真的會頭破血流，故做這篇，希望後人可以少走一些彎路
## 成績標準
* Project 3 times(15% * 3 = 45%) + Final proj(25%) + Final Exam(30%)
* 3 個 proj 的 15% 再拆成單看驗收時準確率的 11.25%，跟 proj 驗收後的個人輪流報告 3.75%，因此，11.25%會直接乘上你的準確率得到該次 proj 的大部分分數。
* Project 1: 不仰賴套件，單純使用 Back propagation 的概念來辨識數字，使用的資料集為MNIST，其中神經網路、loss function、learning rule 自己決定。
* Project 2: 允許使用套件，用CNN的方式辨識10類圖片，使用資料集為CIFAR-10
* Project 3: 用 Semi-supervised learning 的方式來辨識圖片，使用資料集為STL-10
* Final proj: 109-2 學期沒有報告，所以單純拼準確率，用 CNN 就能獲得好結果

## 一些待整理的經驗談
（以下經驗均以 Keras 套件出發，我不會 Pytorch）

* 實作前有什麼要注意的嗎？
記得觀察網路上程式碼的各環節的對接資料格式，numpy/keras 的函數參數要早點搞懂，沒事多用numpy.shape來看看張量的形狀
* 如果 CNN 平常在弄的時候一切正常，但驗收的時候餵資料準確率很低怎辦？
檢查資料傳遞過程，跟平常訓練的過程是否一致？
檢查一下測試資料格式有沒有對？進NN之前的各階段資料格式跟平常訓練是否相同？
之前遇到這狀況的原因為忘記將測試資料/255，數值對 NN 來講太大了！
* 如果訓練時 val_accuracy，甚至 training set accuracy 一直都是爛的呢？
一樣先檢查資料格式，然後如果是 CNN，記得每個 conv2d 後面要上 batch normalization，整個 conv 的流程就會是 conv2d->batch normalzation->activation function (通常是 ReLU 啦)
* 訓練過程 accuracy 抖動幅度過大？
這樣就可以判讀成學習的速度不夠快，Batch normalization 會加速學習速度，學術上來說就是讓loss 更快收斂。
* 越大張的圖片，就用越深的網路
###### tags: `CSnote`