commit acc144969426f9bacd514fd9e44a99564e0243f4
parent 4a51fdcf8f570deb5dba6b14aa4649c359eabb47
Author: Andrew <andrewlaack1@gmail.com>
Date: Mon, 1 Jul 2024 18:20:00 -0500
implemented data augmentation.
Diffstat:
1 file changed, 209 insertions(+), 0 deletions(-)
diff --git a/fashionMNIST/BetterMLPFashionMNIST.ipynb b/fashionMNIST/BetterMLPFashionMNIST.ipynb
@@ -0,0 +1,209 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import tensorflow as tf\n",
+ "import numpy as np\n",
+ "\n",
+ "fashion_mnist = tf.keras.datasets.fashion_mnist.load_data()\n",
+ "\n",
+ "# Split train, validation, test\n",
+ "(X_train_full, y_train_full) , (X_test, y_test) = fashion_mnist\n",
+ "X_train, y_train = X_train_full[:-5000], y_train_full[:-5000]\n",
+ "X_valid, y_valid = X_train_full[-5000:], y_train_full[-5000:]\n",
+ "X_train, X_valid, X_test = X_train / 255., X_valid / 255., X_test / 255.\n",
+ "\n",
+ "\n",
+ "X_train_flipped = np.flip(X_train, axis=2) # Flip images horizontally\n",
+ "\n",
+ "X_train = np.concatenate([X_train, X_train_flipped], axis=0)\n",
+ "y_train = np.concatenate([y_train, y_train], axis=0)\n",
+ "\n",
+ "X_train_flipped = np.flip(X_train, axis=1) # Flip images vertically\n",
+ "\n",
+ "X_train = np.concatenate([X_train, X_train_flipped], axis=0)\n",
+ "y_train = np.concatenate([y_train, y_train], axis=0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import keras\n",
+ "\n",
+ "\n",
+ "model = keras.Sequential(layers=[\n",
+ " keras.layers.Input(shape=(28,28)),\n",
+ " keras.layers.Flatten(),\n",
+ " \n",
+ " keras.layers.Dense(512, activation='relu'),\n",
+ " keras.layers.BatchNormalization(),\n",
+ "\n",
+ " keras.layers.Dense(256, activation='relu'),\n",
+ " keras.layers.Dense(256, activation='relu'),\n",
+ " keras.layers.BatchNormalization(),\n",
+ "\n",
+ " keras.layers.Dropout(.5),\n",
+ " keras.layers.Dense(128, activation='relu'),\n",
+ " keras.layers.Dropout(.5),\n",
+ " keras.layers.Dense(128, activation='relu'),\n",
+ " keras.layers.Dropout(.5),\n",
+ " keras.layers.Dense(128, activation='relu'),\n",
+ " keras.layers.Dropout(.5),\n",
+ " keras.layers.BatchNormalization(),\n",
+ "\n",
+ " keras.layers.Dense(10, activation='softmax')\n",
+ "])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model.compile(optimizer='adam', loss=keras.losses.sparse_categorical_crossentropy, metrics=['accuracy'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/30\n",
+ "\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",
+ "Epoch 2/30\n",
+ "\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",
+ "Epoch 3/30\n",
+ "\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",
+ "Epoch 4/30\n",
+ "\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",
+ "Epoch 5/30\n",
+ "\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",
+ "Epoch 6/30\n",
+ "\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",
+ "Epoch 7/30\n",
+ "\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",
+ "Epoch 8/30\n",
+ "\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",
+ "Epoch 9/30\n",
+ "\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",
+ "Epoch 10/30\n",
+ "\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",
+ "Epoch 11/30\n",
+ "\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",
+ "Epoch 12/30\n",
+ "\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",
+ "Epoch 13/30\n",
+ "\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",
+ "Epoch 14/30\n",
+ "\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",
+ "Epoch 15/30\n",
+ "\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",
+ "Epoch 16/30\n",
+ "\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",
+ "Epoch 17/30\n",
+ "\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",
+ "Epoch 18/30\n",
+ "\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",
+ "Epoch 19/30\n",
+ "\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",
+ "Epoch 20/30\n",
+ "\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",
+ "Epoch 21/30\n",
+ "\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",
+ "Epoch 22/30\n",
+ "\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",
+ "Epoch 23/30\n",
+ "\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",
+ "Epoch 24/30\n",
+ "\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",
+ "Epoch 25/30\n",
+ "\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",
+ "Epoch 26/30\n",
+ "\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",
+ "Epoch 27/30\n",
+ "\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",
+ "Epoch 28/30\n",
+ "\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",
+ "Epoch 29/30\n",
+ "\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",
+ "Epoch 30/30\n",
+ "\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"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "<keras.src.callbacks.history.History at 0x7fd2b8301c10>"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model.fit(X_train,y_train, epochs=30, validation_data=[X_valid, y_valid], batch_size=512)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\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"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[0.45343443751335144, 0.8859999775886536]"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model.evaluate(X_test,y_test)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}