BetterMLPFashionMNIST.ipynb (11920B)
1 { 2 "cells": [ 3 { 4 "cell_type": "code", 5 "execution_count": 39, 6 "metadata": {}, 7 "outputs": [], 8 "source": [ 9 "import tensorflow as tf\n", 10 "import numpy as np\n", 11 "\n", 12 "fashion_mnist = tf.keras.datasets.fashion_mnist.load_data()\n", 13 "\n", 14 "# Split train, validation, test\n", 15 "(X_train_full, y_train_full) , (X_test, y_test) = fashion_mnist\n", 16 "X_train, y_train = X_train_full[:-5000], y_train_full[:-5000]\n", 17 "X_valid, y_valid = X_train_full[-5000:], y_train_full[-5000:]\n", 18 "X_train, X_valid, X_test = X_train / 255., X_valid / 255., X_test / 255.\n", 19 "\n", 20 "\n", 21 "X_train_flipped = np.flip(X_train, axis=2) # Flip images horizontally\n", 22 "\n", 23 "X_train = np.concatenate([X_train, X_train_flipped], axis=0)\n", 24 "y_train = np.concatenate([y_train, y_train], axis=0)\n", 25 "\n", 26 "X_train_flipped = np.flip(X_train, axis=1) # Flip images vertically\n", 27 "\n", 28 "X_train = np.concatenate([X_train, X_train_flipped], axis=0)\n", 29 "y_train = np.concatenate([y_train, y_train], axis=0)\n" 30 ] 31 }, 32 { 33 "cell_type": "code", 34 "execution_count": 40, 35 "metadata": {}, 36 "outputs": [], 37 "source": [ 38 "import keras\n", 39 "\n", 40 "\n", 41 "model = keras.Sequential(layers=[\n", 42 " keras.layers.Input(shape=(28,28)),\n", 43 " keras.layers.Flatten(),\n", 44 " \n", 45 " keras.layers.Dense(512, activation='relu'),\n", 46 " keras.layers.BatchNormalization(),\n", 47 "\n", 48 " keras.layers.Dense(256, activation='relu'),\n", 49 " keras.layers.Dense(256, activation='relu'),\n", 50 " keras.layers.BatchNormalization(),\n", 51 "\n", 52 " keras.layers.Dropout(.5),\n", 53 " keras.layers.Dense(128, activation='relu'),\n", 54 " keras.layers.Dropout(.5),\n", 55 " keras.layers.Dense(128, activation='relu'),\n", 56 " keras.layers.Dropout(.5),\n", 57 " keras.layers.Dense(128, activation='relu'),\n", 58 " keras.layers.Dropout(.5),\n", 59 " keras.layers.BatchNormalization(),\n", 60 "\n", 61 " keras.layers.Dense(10, activation='softmax')\n", 62 "])" 63 ] 64 }, 65 { 66 "cell_type": "code", 67 "execution_count": 41, 68 "metadata": {}, 69 "outputs": [], 70 "source": [ 71 "model.compile(optimizer='adam', loss=keras.losses.sparse_categorical_crossentropy, metrics=['accuracy'])" 72 ] 73 }, 74 { 75 "cell_type": "code", 76 "execution_count": 42, 77 "metadata": {}, 78 "outputs": [ 79 { 80 "name": "stdout", 81 "output_type": "stream", 82 "text": [ 83 "Epoch 1/30\n", 84 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 12ms/step - accuracy: 0.5246 - loss: 1.3562 - val_accuracy: 0.8034 - val_loss: 0.5545\n", 85 "Epoch 2/30\n", 86 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8276 - loss: 0.5314 - val_accuracy: 0.8412 - val_loss: 0.4490\n", 87 "Epoch 3/30\n", 88 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8533 - loss: 0.4551 - val_accuracy: 0.8244 - val_loss: 0.4879\n", 89 "Epoch 4/30\n", 90 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8630 - loss: 0.4189 - val_accuracy: 0.8534 - val_loss: 0.4157\n", 91 "Epoch 5/30\n", 92 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8728 - loss: 0.3853 - val_accuracy: 0.8632 - val_loss: 0.3915\n", 93 "Epoch 6/30\n", 94 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8778 - loss: 0.3679 - val_accuracy: 0.8710 - val_loss: 0.3670\n", 95 "Epoch 7/30\n", 96 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - accuracy: 0.8834 - loss: 0.3510 - val_accuracy: 0.8770 - val_loss: 0.3710\n", 97 "Epoch 8/30\n", 98 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 13ms/step - accuracy: 0.8870 - loss: 0.3356 - val_accuracy: 0.8774 - val_loss: 0.3548\n", 99 "Epoch 9/30\n", 100 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 13ms/step - accuracy: 0.8905 - loss: 0.3190 - val_accuracy: 0.8808 - val_loss: 0.3496\n", 101 "Epoch 10/30\n", 102 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.8957 - loss: 0.3048 - val_accuracy: 0.8770 - val_loss: 0.3518\n", 103 "Epoch 11/30\n", 104 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9004 - loss: 0.2918 - val_accuracy: 0.8866 - val_loss: 0.3485\n", 105 "Epoch 12/30\n", 106 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 13ms/step - accuracy: 0.9029 - loss: 0.2812 - val_accuracy: 0.8806 - val_loss: 0.3427\n", 107 "Epoch 13/30\n", 108 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - accuracy: 0.9060 - loss: 0.2720 - val_accuracy: 0.8844 - val_loss: 0.3476\n", 109 "Epoch 14/30\n", 110 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9075 - loss: 0.2653 - val_accuracy: 0.8820 - val_loss: 0.3504\n", 111 "Epoch 15/30\n", 112 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9103 - loss: 0.2556 - val_accuracy: 0.8846 - val_loss: 0.3560\n", 113 "Epoch 16/30\n", 114 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9143 - loss: 0.2479 - val_accuracy: 0.8762 - val_loss: 0.4009\n", 115 "Epoch 17/30\n", 116 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9180 - loss: 0.2367 - val_accuracy: 0.8806 - val_loss: 0.3516\n", 117 "Epoch 18/30\n", 118 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9179 - loss: 0.2342 - val_accuracy: 0.8836 - val_loss: 0.3528\n", 119 "Epoch 19/30\n", 120 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9217 - loss: 0.2227 - val_accuracy: 0.8844 - val_loss: 0.3653\n", 121 "Epoch 20/30\n", 122 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9239 - loss: 0.2167 - val_accuracy: 0.8784 - val_loss: 0.3841\n", 123 "Epoch 21/30\n", 124 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - accuracy: 0.9262 - loss: 0.2106 - val_accuracy: 0.8774 - val_loss: 0.3867\n", 125 "Epoch 22/30\n", 126 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 14ms/step - accuracy: 0.9283 - loss: 0.2008 - val_accuracy: 0.8818 - val_loss: 0.3576\n", 127 "Epoch 23/30\n", 128 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 13ms/step - accuracy: 0.9309 - loss: 0.1967 - val_accuracy: 0.8886 - val_loss: 0.3697\n", 129 "Epoch 24/30\n", 130 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9317 - loss: 0.1937 - val_accuracy: 0.8702 - val_loss: 0.4344\n", 131 "Epoch 25/30\n", 132 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9352 - loss: 0.1827 - val_accuracy: 0.8888 - val_loss: 0.3815\n", 133 "Epoch 26/30\n", 134 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - accuracy: 0.9366 - loss: 0.1795 - val_accuracy: 0.8864 - val_loss: 0.4179\n", 135 "Epoch 27/30\n", 136 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 13ms/step - accuracy: 0.9369 - loss: 0.1750 - val_accuracy: 0.8810 - val_loss: 0.4238\n", 137 "Epoch 28/30\n", 138 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9400 - loss: 0.1693 - val_accuracy: 0.8868 - val_loss: 0.3935\n", 139 "Epoch 29/30\n", 140 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - accuracy: 0.9411 - loss: 0.1653 - val_accuracy: 0.8844 - val_loss: 0.4267\n", 141 "Epoch 30/30\n", 142 "\u001b[1m430/430\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 12ms/step - accuracy: 0.9412 - loss: 0.1663 - val_accuracy: 0.8872 - val_loss: 0.4196\n" 143 ] 144 }, 145 { 146 "data": { 147 "text/plain": [ 148 "<keras.src.callbacks.history.History at 0x7fd2b8301c10>" 149 ] 150 }, 151 "execution_count": 42, 152 "metadata": {}, 153 "output_type": "execute_result" 154 } 155 ], 156 "source": [ 157 "model.fit(X_train,y_train, epochs=30, validation_data=[X_valid, y_valid], batch_size=512)" 158 ] 159 }, 160 { 161 "cell_type": "code", 162 "execution_count": 43, 163 "metadata": {}, 164 "outputs": [ 165 { 166 "name": "stdout", 167 "output_type": "stream", 168 "text": [ 169 "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 0.8873 - loss: 0.4575\n" 170 ] 171 }, 172 { 173 "data": { 174 "text/plain": [ 175 "[0.45343443751335144, 0.8859999775886536]" 176 ] 177 }, 178 "execution_count": 43, 179 "metadata": {}, 180 "output_type": "execute_result" 181 } 182 ], 183 "source": [ 184 "model.evaluate(X_test,y_test)" 185 ] 186 } 187 ], 188 "metadata": { 189 "kernelspec": { 190 "display_name": ".venv", 191 "language": "python", 192 "name": "python3" 193 }, 194 "language_info": { 195 "codemirror_mode": { 196 "name": "ipython", 197 "version": 3 198 }, 199 "file_extension": ".py", 200 "mimetype": "text/x-python", 201 "name": "python", 202 "nbconvert_exporter": "python", 203 "pygments_lexer": "ipython3", 204 "version": "3.11.2" 205 } 206 }, 207 "nbformat": 4, 208 "nbformat_minor": 2 209 }