2018年2月12日 星期一

fast.ai 學習筆記 - mnist 篇

簡單筆記

搭配資料:https://github.com/fastai/courses/blob/master/deeplearning1/nbs/mnist.ipynb

MNIST

手寫數字資料集,每個數字解析度都相同,固定為 28 x 28 的大小,ML界中的"Hello World!"
在 keras 中的匯入方式很簡單
```
from keras.datasets import mnist
```

np.expand_dims (numpy.expand_dims)

增加"一個"指定的維度在傳入的資料上,指定維度的範圍為被操作資料維度(n)的 n+1 中
例如:傳為的資料為 2 維資料,所以可以增度的維度為 0, 1, 2
在 mnist.ipynb 中,增加第二個維度,用以代表字體的灰階
Test code: http://ec2-35-163-5-73.us-west-2.compute.amazonaws.com:8888/notebooks/workspace/%5Btest%5D%20expand_dims%20.ipynb#

```
# 參數1:被操作的資料(不一定要是 Array )
# 參數2:增加在那一個維度
X_test = np.expand_dims(X_test,1)
```

onehot (OneHotEncoder)

簡化資料的一種手段,類似把填空變成選擇題
例如:原本的有[白天]、[晚上]兩種資料,經過 on hot encoder 後就會變為 [1,0] [0,1]
又例如,[眼睛][鼻子][嘴巴][耳朵]會轉換為[1,0,0,0][0,1,0,0][0,0,1,0][0,0,0,1]
在 mnist.ipynb 中用來轉換 0-9 的數字,數字5 就變成 [ 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]

pn.mean

求取均值,義意不明

pn.std

求標準差,義意不明

Sequential

Linear stack of layers

Flatten

把Array 從多維變單維
Test code: http://ec2-35-163-5-73.us-west-2.compute.amazonaws.com:8888/notebooks/workspace/%5Btest%5D%20Flatten.ipynb


Linear model

第一層:Lambda - normalize 圖檔,每張圖的資訊為 彩度灰階 1,  寬 28, 高 28px
第二層:Flatten - 攤平圖檔資訊 1x28x28
第三層:Dense - 歸類為 10 類 ( 數字 0-9)