###### 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) ``` ![](https://i.imgur.com/5ONRemq.png) * 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: ![](https://i.imgur.com/85jpDpW.png) 翻轉後標籤依然預測正確: ![](https://i.imgur.com/TvrHRDl.png)