###### tags: `Computer Vision` `keras` `Fashion-MNIST` `TensorFlow` `image classification`
# Fashion-MNIST with Keras
[Github: Fashion-MNIST with Keras code (Jupyter)](https://github.com/chauuyun/Computer-Vision-Project/blob/main/Fashion-MNIST%20with%20Keras/Fashion-MNIST%20with%20Keras.ipynb)
#### 主要的神經網路程式碼:
```python=1
##Step 4
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
```
```python=1
keras.layers.Flatten(input_shape=(28, 28))
```
* 代表input的圖片size
```python=1
keras.layers.Dense(128, activation=tf.nn.relu)
```
* 其中128代表神經元個數 (可為32/128/512)
```python=1
keras.layers.Dense(10, activation=tf.nn.softmax)
```
* 10為Output Layers的數量,也就是Fashion-MNIST的種類(10種)
```python=1
for epoch in [5, 10, 15, 20]:
latest = checkpoint_path.format(epoch=epoch)
model.load_weights(latest)
```

* Epoch為執行週期,越多不一定越準確,因為會導致Overfitting
* Batch size: 為訓練多少樣本更新一次權重
batch_size的大小會決定訓練時梯度的平滑程度,而較大的batch_size會有利於模型收斂,但是在訓練模型時跌代的隨機性會變小,所以會影響模型的泛化能力。
較小的batch_size因為訓練資料有較多的隨機性(batch_size越大相鄰batch的差異越小),模型訓練出來的泛化能力較好。泛化能力就會進而影響到accuracy。
調整不同batch_size時,因為每次迭代所求出的loss平均(梯度)不同,這會影響到模型參數的更新造成最後的accuracy也不同。
```python=1
## Step 6
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
```
其中loss為損失函數
有不同種損失函數,舉例:
```
loss='categorical_crossentropy'
loss='sparse_categorical_crossentropy'
```
1. categorical_crossentropy可用於多分類任務,label為one-hot形式。
Example:
one-hot編碼:
``
[[0, 1, 0],
[1, 0, 0],
[0, 0, 1]]
``
每條每一行是一個label的編碼,1所在的位置代表label
2. sparse_categorical_crossentropy跟categorical_crossentropy的區別是其標籤不是one-hot的形式,而是integer。
比如在上述categorical_crossentropy的Example中是
``
[1,0,0]
``
在sparse_categorical_crossentropy中是3。
Example:
整數編碼:
``
[2, 0, 1, 5, 19]
``
每個整數都是label
#### Result:

翻轉後標籤依然預測正確:
