diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..3dcd909 Binary files /dev/null and b/.DS_Store differ diff --git a/Solution Challengue 2.png b/Solution Challengue 2.png new file mode 100644 index 0000000..d49ede3 Binary files /dev/null and b/Solution Challengue 2.png differ diff --git a/your-code/challenge-1.ipynb b/your-code/challenge-1.ipynb index 2487c5f..e20a0c9 100644 --- a/your-code/challenge-1.ipynb +++ b/your-code/challenge-1.ipynb @@ -34,11 +34,102 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " TL TM TR ML MM MR BL BM BR class\n", + "0 x x x x o o x o o True\n", + "1 x x x x o o o x o True\n", + "2 x x x x o o o o x True\n", + "3 x x x x o o o b b True\n", + "4 x x x x o o b o b True\n", + "\n", + "RangeIndex: 958 entries, 0 to 957\n", + "Data columns (total 10 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 TL 958 non-null object\n", + " 1 TM 958 non-null object\n", + " 2 TR 958 non-null object\n", + " 3 ML 958 non-null object\n", + " 4 MM 958 non-null object\n", + " 5 MR 958 non-null object\n", + " 6 BL 958 non-null object\n", + " 7 BM 958 non-null object\n", + " 8 BR 958 non-null object\n", + " 9 class 958 non-null bool \n", + "dtypes: bool(1), object(9)\n", + "memory usage: 68.4+ KB\n", + "None\n", + "(958, 10)\n", + " TL TM TR ML MM MR BL BM BR class\n", + "count 958 958 958 958 958 958 958 958 958 958\n", + "unique 3 3 3 3 3 3 3 3 3 2\n", + "top x x x x x x x x x True\n", + "freq 418 378 418 378 458 378 418 378 418 626\n", + "TL 0\n", + "TM 0\n", + "TR 0\n", + "ML 0\n", + "MM 0\n", + "MR 0\n", + "BL 0\n", + "BM 0\n", + "BR 0\n", + "class 0\n", + "dtype: int64\n", + " class TL_b TL_o TL_x TM_b TM_o TM_x TR_b TR_o TR_x ... \\\n", + "0 True False False True False False True False False True ... \n", + "1 True False False True False False True False False True ... \n", + "2 True False False True False False True False False True ... \n", + "3 True False False True False False True False False True ... \n", + "4 True False False True False False True False False True ... \n", + "\n", + " MR_x BL_b BL_o BL_x BM_b BM_o BM_x BR_b BR_o BR_x \n", + "0 False False False True False True False False True False \n", + "1 False False True False False False True False True False \n", + "2 False False True False False True False False False True \n", + "3 False False True False True False False True False False \n", + "4 False True False False False True False True False False \n", + "\n", + "[5 rows x 28 columns]\n" + ] + } + ], "source": [ - "# your code here" + "# Import pandas to handel data set and read the data\n", + "import pandas as pd \n", + "\n", + "df = pd.read_csv(\"/Users/zone/Desktop/Week 3/Day 1/lab-neural-networks/your-code/tic-tac-toe.csv\") # Transforms csv into a data frame\n", + "\n", + "# Analyze the data frame\n", + "print(df.head())\n", + "print(df.info())\n", + "print(df.shape)\n", + "print(df.describe())\n", + "print(df.isnull().sum())\n", + "\n", + "# Convert categorical values in all columns throug One Hot Encoding\n", + "df_encoded = pd.get_dummies(df, columns=df.columns[:-1])\n", + "\n", + "print(df_encoded.head())\n", + "\n", + "# Sepparate Inputs and Outputs\n", + "predictors = df_encoded.drop('class', axis=1)\n", + "target = df_encoded['class']\n", + "\n", + "# Importing libraries first\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "# Use Standard Scaler to normalize\n", + "scaler = StandardScaler()\n", + "predictors_scaled = scaler.fit_transform(predictors)\n", + "\n" ] }, { @@ -60,11 +151,303 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 90, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data shape (766, 27)\n", + "Testing data shape (192, 27)\n", + "27\n", + "Epoch 1/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 649us/step - accuracy: 0.6050 - loss: 0.6495 \n", + "Epoch 2/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 496us/step - accuracy: 0.6954 - loss: 0.5492\n", + "Epoch 3/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 620us/step - accuracy: 0.7647 - loss: 0.4615\n", + "Epoch 4/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 527us/step - accuracy: 0.8431 - loss: 0.3519\n", + "Epoch 5/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 0.9085 - loss: 0.2562\n", + "Epoch 6/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.9350 - loss: 0.1885\n", + "Epoch 7/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - accuracy: 0.9638 - loss: 0.1228\n", + "Epoch 8/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 503us/step - accuracy: 0.9690 - loss: 0.0938\n", + "Epoch 9/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 479us/step - accuracy: 0.9881 - loss: 0.0478\n", + "Epoch 10/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 490us/step - accuracy: 0.9963 - loss: 0.0241\n", + "Epoch 11/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 478us/step - accuracy: 0.9952 - loss: 0.0203\n", + "Epoch 12/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 513us/step - accuracy: 0.9997 - loss: 0.0075\n", + "Epoch 13/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 498us/step - accuracy: 1.0000 - loss: 0.0044\n", + "Epoch 14/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 522us/step - accuracy: 1.0000 - loss: 0.0035\n", + "Epoch 15/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 505us/step - accuracy: 1.0000 - loss: 0.0022\n", + "Epoch 16/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 441us/step - accuracy: 1.0000 - loss: 0.0012 \n", + "Epoch 17/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 517us/step - accuracy: 1.0000 - loss: 0.0010\n", + "Epoch 18/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 525us/step - accuracy: 1.0000 - loss: 8.4321e-04\n", + "Epoch 19/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 505us/step - accuracy: 1.0000 - loss: 8.2208e-04\n", + "Epoch 20/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 6.8689e-04\n", + "Epoch 21/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 489us/step - accuracy: 1.0000 - loss: 5.9163e-04\n", + "Epoch 22/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 503us/step - accuracy: 1.0000 - loss: 5.7435e-04\n", + "Epoch 23/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 497us/step - accuracy: 1.0000 - loss: 4.8710e-04\n", + "Epoch 24/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 532us/step - accuracy: 1.0000 - loss: 3.7437e-04\n", + "Epoch 25/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 500us/step - accuracy: 1.0000 - loss: 3.4923e-04\n", + "Epoch 26/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 3.5734e-04 \n", + "Epoch 27/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 485us/step - accuracy: 1.0000 - loss: 3.2268e-04\n", + "Epoch 28/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 509us/step - accuracy: 1.0000 - loss: 3.0623e-04\n", + "Epoch 29/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 530us/step - accuracy: 1.0000 - loss: 2.2560e-04\n", + "Epoch 30/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 489us/step - accuracy: 1.0000 - loss: 2.5758e-04\n", + "Epoch 31/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 484us/step - accuracy: 1.0000 - loss: 1.9816e-04\n", + "Epoch 32/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 1.0000 - loss: 2.0862e-04\n", + "Epoch 33/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 507us/step - accuracy: 1.0000 - loss: 1.6942e-04\n", + "Epoch 34/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 496us/step - accuracy: 1.0000 - loss: 1.6762e-04\n", + "Epoch 35/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 455us/step - accuracy: 1.0000 - loss: 1.8198e-04\n", + "Epoch 36/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 439us/step - accuracy: 1.0000 - loss: 1.3957e-04\n", + "Epoch 37/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 474us/step - accuracy: 1.0000 - loss: 1.2444e-04\n", + "Epoch 38/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 429us/step - accuracy: 1.0000 - loss: 1.0766e-04\n", + "Epoch 39/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 439us/step - accuracy: 1.0000 - loss: 1.1414e-04\n", + "Epoch 40/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 454us/step - accuracy: 1.0000 - loss: 9.5667e-05\n", + "Epoch 41/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 1.0000 - loss: 9.5528e-05\n", + "Epoch 42/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450us/step - accuracy: 1.0000 - loss: 9.2975e-05\n", + "Epoch 43/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 433us/step - accuracy: 1.0000 - loss: 9.7772e-05\n", + "Epoch 44/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 1.0000 - loss: 8.6589e-05\n", + "Epoch 45/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 423us/step - accuracy: 1.0000 - loss: 8.1747e-05\n", + "Epoch 46/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 477us/step - accuracy: 1.0000 - loss: 8.2645e-05\n", + "Epoch 47/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 1.0000 - loss: 6.8697e-05\n", + "Epoch 48/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 436us/step - accuracy: 1.0000 - loss: 6.5512e-05\n", + "Epoch 49/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 472us/step - accuracy: 1.0000 - loss: 6.8505e-05\n", + "Epoch 50/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 1.0000 - loss: 5.8030e-05\n", + "Epoch 51/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 452us/step - accuracy: 1.0000 - loss: 6.4947e-05\n", + "Epoch 52/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 459us/step - accuracy: 1.0000 - loss: 6.0150e-05\n", + "Epoch 53/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 466us/step - accuracy: 1.0000 - loss: 6.0929e-05\n", + "Epoch 54/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 1.0000 - loss: 5.1451e-05\n", + "Epoch 55/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 1.0000 - loss: 5.5479e-05\n", + "Epoch 56/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 459us/step - accuracy: 1.0000 - loss: 5.4717e-05\n", + "Epoch 57/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 424us/step - accuracy: 1.0000 - loss: 4.7059e-05\n", + "Epoch 58/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 1.0000 - loss: 4.5050e-05\n", + "Epoch 59/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 466us/step - accuracy: 1.0000 - loss: 5.1311e-05\n", + "Epoch 60/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451us/step - accuracy: 1.0000 - loss: 4.3972e-05\n", + "Epoch 61/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 1.0000 - loss: 4.5062e-05\n", + "Epoch 62/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 462us/step - accuracy: 1.0000 - loss: 4.6382e-05\n", + "Epoch 63/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 425us/step - accuracy: 1.0000 - loss: 4.6184e-05\n", + "Epoch 64/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 1.0000 - loss: 4.2031e-05\n", + "Epoch 65/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 1.0000 - loss: 3.0951e-05\n", + "Epoch 66/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 455us/step - accuracy: 1.0000 - loss: 3.6071e-05\n", + "Epoch 67/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 1.0000 - loss: 3.1871e-05\n", + "Epoch 68/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 471us/step - accuracy: 1.0000 - loss: 3.1028e-05\n", + "Epoch 69/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 458us/step - accuracy: 1.0000 - loss: 2.8196e-05\n", + "Epoch 70/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 2.9961e-05 \n", + "Epoch 71/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 488us/step - accuracy: 1.0000 - loss: 3.0411e-05\n", + "Epoch 72/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 1.0000 - loss: 2.9562e-05\n", + "Epoch 73/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 1.0000 - loss: 3.3462e-05\n", + "Epoch 74/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 1.0000 - loss: 3.3285e-05\n", + "Epoch 75/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 457us/step - accuracy: 1.0000 - loss: 2.5716e-05\n", + "Epoch 76/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 458us/step - accuracy: 1.0000 - loss: 2.0265e-05\n", + "Epoch 77/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 1.0000 - loss: 2.3244e-05\n", + "Epoch 78/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 438us/step - accuracy: 1.0000 - loss: 2.2874e-05\n", + "Epoch 79/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step - accuracy: 1.0000 - loss: 2.3963e-05\n", + "Epoch 80/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 430us/step - accuracy: 1.0000 - loss: 2.0509e-05\n", + "Epoch 81/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 495us/step - accuracy: 1.0000 - loss: 2.0314e-05\n", + "Epoch 82/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 1.8114e-05 \n", + "Epoch 83/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 1.0000 - loss: 2.1024e-05\n", + "Epoch 84/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 1.0000 - loss: 2.0340e-05\n", + "Epoch 85/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 472us/step - accuracy: 1.0000 - loss: 1.7292e-05\n", + "Epoch 86/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 527us/step - accuracy: 1.0000 - loss: 1.7012e-05\n", + "Epoch 87/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - accuracy: 1.0000 - loss: 1.6013e-05\n", + "Epoch 88/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 430us/step - accuracy: 1.0000 - loss: 1.8827e-05\n", + "Epoch 89/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 458us/step - accuracy: 1.0000 - loss: 1.4055e-05\n", + "Epoch 90/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 424us/step - accuracy: 1.0000 - loss: 1.6400e-05\n", + "Epoch 91/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 1.0000 - loss: 1.5964e-05\n", + "Epoch 92/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 489us/step - accuracy: 1.0000 - loss: 1.8148e-05\n", + "Epoch 93/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 1.0000 - loss: 1.4919e-05\n", + "Epoch 94/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 1.3853e-05 \n", + "Epoch 95/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 460us/step - accuracy: 1.0000 - loss: 1.2973e-05\n", + "Epoch 96/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 1.0000 - loss: 1.2397e-05\n", + "Epoch 97/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451us/step - accuracy: 1.0000 - loss: 1.3003e-05\n", + "Epoch 98/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 456us/step - accuracy: 1.0000 - loss: 1.0756e-05\n", + "Epoch 99/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - accuracy: 1.0000 - loss: 1.3677e-05\n", + "Epoch 100/100\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 456us/step - accuracy: 1.0000 - loss: 1.2465e-05\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split data set into training and testing sets\n", + "X_train, X_test, y_train, y_test = train_test_split(predictors_scaled, target, test_size=0.2, random_state=42)\n", + "\n", + "print(f\"Training data shape {X_train.shape}\")\n", + "print(f\"Testing data shape {X_test.shape}\")\n", + "\n", + "# Import Keras models and layers and create Sequential model\n", + "from tensorflow import keras\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from tensorflow.keras.optimizers import Adam\n", + "\n", + "\n", + "# Before creating the Sequential model, we save the number of predictors to n_col. We will need the number when building the network\n", + "n_cols = predictors_scaled.shape[1]\n", + "print(n_cols)\n", + "\n", + "# Define the Regression Model\n", + "def regression_model():\n", + " # Create model\n", + " model = Sequential()\n", + " model.add(Dense(50, activation='relu', input_shape=(n_cols,)))\n", + " model.add(Dense(50, activation='relu'))\n", + " model.add(Dense(50, activation='relu'))\n", + " model.add(Dense(50, activation='relu'))\n", + " model.add(Dense(50, activation='relu'))\n", + "\n", + "\n", + "\n", + "\n", + " # Output layer with Softmax activation\n", + " model.add(Dense(2, activation='softmax'))\n", + "\n", + " #Compile model using Adam optimizer, sparse_categorical_crossentropy loss and accuracy as metric\n", + " model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + " return model\n", + "\n", + "# Build and the model\n", + "\n", + "model = regression_model()\n", + "\n", + "\n", + "# Fit the training data\n", + "model.fit(X_train, y_train, epochs=100)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 782us/step - accuracy: 0.9376 - loss: 0.2449\n", + "Test accuracy: 0.9427083134651184\n", + "Test loss: 0.19278554618358612\n" + ] + } + ], "source": [ - "# your code here" + "# Evaluate the model on the test set\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test)\n", + "\n", + "print(f\"Test accuracy: {test_accuracy}\")\n", + "print(f\"Test loss: {test_loss}\")\n", + "\n", + "# The model is not performing bad with a 93% accuracy and a loss of 0.14. Both metrics can can be improved\n", + "\n", + "# Save model\n", + "model.save('tic-tac-toe.keras')\n" ] }, { @@ -78,11 +461,218 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 92, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 520us/step\n", + "[[9.99999404e-01 5.54073608e-07]\n", + " [1.45432473e-16 1.00000000e+00]\n", + " [8.37521384e-06 9.99991655e-01]\n", + " [6.43673658e-01 3.56326282e-01]\n", + " [9.99999762e-01 1.97873732e-07]\n", + " [8.49591382e-03 9.91504073e-01]\n", + " [1.25285530e-16 1.00000000e+00]\n", + " [5.53439861e-07 9.99999404e-01]\n", + " [2.90262094e-03 9.97097373e-01]\n", + " [8.34312476e-03 9.91656840e-01]\n", + " [1.03373893e-07 9.99999881e-01]\n", + " [6.08896542e-08 9.99999881e-01]\n", + " [1.99113365e-10 1.00000000e+00]\n", + " [3.76916985e-04 9.99623060e-01]\n", + " [5.15176168e-09 1.00000000e+00]\n", + " [2.08389235e-08 1.00000000e+00]\n", + " [1.42319725e-04 9.99857724e-01]\n", + " [3.74458485e-11 1.00000000e+00]\n", + " [9.99999881e-01 1.67285265e-07]\n", + " [9.99528468e-01 4.71512700e-04]\n", + " [9.99999285e-01 7.41760516e-07]\n", + " [3.41714461e-08 1.00000000e+00]\n", + " [9.99997973e-01 2.06139453e-06]\n", + " [3.60070779e-10 1.00000000e+00]\n", + " [9.99980271e-01 1.97387581e-05]\n", + " [3.61750717e-04 9.99638200e-01]\n", + " [5.32978479e-12 1.00000000e+00]\n", + " [3.86401695e-07 9.99999642e-01]\n", + " [5.85139394e-01 4.14860606e-01]\n", + " [4.82504592e-11 1.00000000e+00]\n", + " [6.02405766e-15 1.00000000e+00]\n", + " [1.81405292e-12 1.00000000e+00]\n", + " [1.19106081e-12 1.00000000e+00]\n", + " [3.33219285e-11 1.00000000e+00]\n", + " [9.99999762e-01 2.21880001e-07]\n", + " [9.99997497e-01 2.45204251e-06]\n", + " [1.67490555e-07 9.99999881e-01]\n", + " [7.71275876e-10 1.00000000e+00]\n", + " [7.93398058e-09 1.00000000e+00]\n", + " [9.99999881e-01 1.71030038e-07]\n", + " [7.07862791e-09 1.00000000e+00]\n", + " [2.68825344e-11 1.00000000e+00]\n", + " [3.86117220e-01 6.13882720e-01]\n", + " [9.99900401e-01 9.97083625e-05]\n", + " [7.97790766e-01 2.02209204e-01]\n", + " [9.99988675e-01 1.13603910e-05]\n", + " [7.25702554e-11 1.00000000e+00]\n", + " [6.72115974e-10 1.00000000e+00]\n", + " [9.99578953e-01 4.20993776e-04]\n", + " [9.63447094e-01 3.65530290e-02]\n", + " [9.99999762e-01 2.78740828e-07]\n", + " [9.99993324e-01 6.62031698e-06]\n", + " [7.70840856e-13 1.00000000e+00]\n", + " [2.20004722e-07 9.99999762e-01]\n", + " [2.59176046e-01 7.40823984e-01]\n", + " [1.30942357e-14 1.00000000e+00]\n", + " [1.03039252e-11 1.00000000e+00]\n", + " [7.16147482e-01 2.83852488e-01]\n", + " [1.00000000e+00 2.34289370e-08]\n", + " [1.95646255e-09 1.00000000e+00]\n", + " [1.03740326e-14 1.00000000e+00]\n", + " [1.05242515e-09 1.00000000e+00]\n", + " [3.05509984e-01 6.94489956e-01]\n", + " [2.81895218e-08 1.00000000e+00]\n", + " [3.84881815e-09 1.00000000e+00]\n", + " [6.27761316e-16 1.00000000e+00]\n", + " [2.93237863e-05 9.99970734e-01]\n", + " [9.99992490e-01 7.50144454e-06]\n", + " [1.99621745e-14 1.00000000e+00]\n", + " [4.60440935e-10 1.00000000e+00]\n", + " [9.99998927e-01 1.13027284e-06]\n", + " [9.99999881e-01 6.23682155e-08]\n", + " [9.99999404e-01 5.70249370e-07]\n", + " [1.70950720e-03 9.98290539e-01]\n", + " [9.99987364e-01 1.26118766e-05]\n", + " [1.53942330e-15 1.00000000e+00]\n", + " [6.31023113e-07 9.99999404e-01]\n", + " [2.91393846e-02 9.70860720e-01]\n", + " [2.51987431e-16 1.00000000e+00]\n", + " [9.99990821e-01 9.14698194e-06]\n", + " [1.76098265e-08 1.00000000e+00]\n", + " [1.09288678e-09 1.00000000e+00]\n", + " [3.70909170e-08 1.00000000e+00]\n", + " [1.72979037e-06 9.99998212e-01]\n", + " [1.31020833e-10 1.00000000e+00]\n", + " [3.80613103e-14 1.00000000e+00]\n", + " [9.99999166e-01 8.64132971e-07]\n", + " [9.99983013e-01 1.70129024e-05]\n", + " [1.59739089e-09 1.00000000e+00]\n", + " [1.58714028e-10 1.00000000e+00]\n", + " [1.68704495e-10 1.00000000e+00]\n", + " [9.99999285e-01 6.72779663e-07]\n", + " [6.08227607e-13 1.00000000e+00]\n", + " [9.99229968e-01 7.69987877e-04]\n", + " [8.24735558e-04 9.99175251e-01]\n", + " [8.47802312e-07 9.99999166e-01]\n", + " [9.99502182e-01 4.97793255e-04]\n", + " [3.12832225e-12 1.00000000e+00]\n", + " [2.22619718e-07 9.99999762e-01]\n", + " [7.92537314e-13 1.00000000e+00]\n", + " [5.72670297e-06 9.99994278e-01]\n", + " [5.69543059e-11 1.00000000e+00]\n", + " [9.99998093e-01 1.92651919e-06]\n", + " [8.30125725e-12 1.00000000e+00]\n", + " [1.73957903e-06 9.99998212e-01]\n", + " [1.09811715e-12 1.00000000e+00]\n", + " [6.12667250e-09 1.00000000e+00]\n", + " [5.71204759e-13 1.00000000e+00]\n", + " [7.41268377e-05 9.99925852e-01]\n", + " [2.31209764e-04 9.99768734e-01]\n", + " [4.45200159e-04 9.99554813e-01]\n", + " [4.77138849e-04 9.99522924e-01]\n", + " [1.09355662e-08 1.00000000e+00]\n", + " [9.97737646e-01 2.26233434e-03]\n", + " [3.12081741e-13 1.00000000e+00]\n", + " [2.66634885e-07 9.99999762e-01]\n", + " [9.99979556e-01 2.05413180e-05]\n", + " [2.54379101e-10 1.00000000e+00]\n", + " [9.99999642e-01 3.74518720e-07]\n", + " [9.99999523e-01 4.32002992e-07]\n", + " [1.07858285e-10 1.00000000e+00]\n", + " [2.16438383e-01 7.83561647e-01]\n", + " [6.32266253e-02 9.36773419e-01]\n", + " [9.99999642e-01 3.86030422e-07]\n", + " [4.01234217e-02 9.59876597e-01]\n", + " [3.29958533e-10 1.00000000e+00]\n", + " [9.99142647e-01 8.57383420e-04]\n", + " [1.13521359e-09 1.00000000e+00]\n", + " [9.99999881e-01 1.34158284e-07]\n", + " [2.10305999e-14 1.00000000e+00]\n", + " [6.42800373e-08 9.99999881e-01]\n", + " [1.79224335e-05 9.99982178e-01]\n", + " [9.99974668e-01 2.53576673e-05]\n", + " [1.50324428e-14 1.00000000e+00]\n", + " [1.00000000e+00 1.51342220e-11]\n", + " [6.97743119e-14 1.00000000e+00]\n", + " [4.64481289e-08 1.00000000e+00]\n", + " [2.47273556e-11 1.00000000e+00]\n", + " [9.99999881e-01 9.90937608e-08]\n", + " [5.05472090e-05 9.99949455e-01]\n", + " [1.20670165e-05 9.99987960e-01]\n", + " [5.63265097e-08 1.00000000e+00]\n", + " [1.61807066e-17 1.00000000e+00]\n", + " [1.95450211e-05 9.99980509e-01]\n", + " [9.99828458e-01 1.71477004e-04]\n", + " [9.74445939e-01 2.55540144e-02]\n", + " [1.54561242e-09 1.00000000e+00]\n", + " [9.47832167e-01 5.21678589e-02]\n", + " [3.85769499e-06 9.99996185e-01]\n", + " [1.79978387e-13 1.00000000e+00]\n", + " [2.65990940e-12 1.00000000e+00]\n", + " [9.99999881e-01 1.06792122e-07]\n", + " [9.99962509e-01 3.75316122e-05]\n", + " [1.00000000e+00 5.70067762e-08]\n", + " [2.42916746e-11 1.00000000e+00]\n", + " [7.22394322e-09 1.00000000e+00]\n", + " [9.99751925e-01 2.48189666e-04]\n", + " [3.67433245e-06 9.99996305e-01]\n", + " [9.99999762e-01 2.70520673e-07]\n", + " [1.01208861e-04 9.99898851e-01]\n", + " [1.00000000e+00 1.58229057e-08]\n", + " [9.97578681e-01 2.42131809e-03]\n", + " [6.15851517e-17 1.00000000e+00]\n", + " [1.54764916e-11 1.00000000e+00]\n", + " [8.55975113e-09 1.00000000e+00]\n", + " [8.00043989e-11 1.00000000e+00]\n", + " [3.89283734e-08 1.00000000e+00]\n", + " [4.80412109e-06 9.99995232e-01]\n", + " [5.98598719e-02 9.40140128e-01]\n", + " [4.18113545e-04 9.99581814e-01]\n", + " [1.81306592e-17 1.00000000e+00]\n", + " [1.00000000e+00 5.20277723e-08]\n", + " [9.99892712e-01 1.07301879e-04]\n", + " [9.76084650e-01 2.39153747e-02]\n", + " [1.21918803e-11 1.00000000e+00]\n", + " [4.17367855e-13 1.00000000e+00]\n", + " [9.99999762e-01 2.63791520e-07]\n", + " [5.21834468e-14 1.00000000e+00]\n", + " [4.41603568e-12 1.00000000e+00]\n", + " [9.94628668e-01 5.37123531e-03]\n", + " [4.21802762e-18 1.00000000e+00]\n", + " [1.48842372e-09 1.00000000e+00]\n", + " [1.00000000e+00 5.06241403e-11]\n", + " [1.00000000e+00 2.94922025e-08]\n", + " [7.74366904e-10 1.00000000e+00]\n", + " [8.58581040e-10 1.00000000e+00]\n", + " [5.85234016e-02 9.41476583e-01]\n", + " [1.59953013e-02 9.84004676e-01]\n", + " [9.99636054e-01 3.63918487e-04]\n", + " [9.62231752e-07 9.99999046e-01]\n", + " [1.92418233e-01 8.07581663e-01]\n", + " [9.99927998e-01 7.20220996e-05]]\n" + ] + } + ], "source": [ - "# your code here" + "from tensorflow.keras.models import load_model\n", + "\n", + "\n", + "model = load_model('tic-tac-toe.keras') \n", + "\n", + "y_pred = model.predict(X_test)\n", + "\n", + "print(y_pred)" ] }, { @@ -104,11 +694,718 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 95, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/150\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/zone/.local/lib/python3.12/site-packages/keras/src/layers/core/dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 512us/step - accuracy: 0.5903 - loss: 0.6504\n", + "Epoch 2/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 403us/step - accuracy: 0.7326 - loss: 0.5193\n", + "Epoch 3/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - accuracy: 0.7627 - loss: 0.4602\n", + "Epoch 4/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 730us/step - accuracy: 0.8165 - loss: 0.3899\n", + "Epoch 5/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 434us/step - accuracy: 0.8566 - loss: 0.3444\n", + "Epoch 6/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 403us/step - accuracy: 0.8911 - loss: 0.2892\n", + "Epoch 7/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 434us/step - accuracy: 0.9291 - loss: 0.2265\n", + "Epoch 8/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 426us/step - accuracy: 0.9686 - loss: 0.1758\n", + "Epoch 9/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 0.9870 - loss: 0.1263\n", + "Epoch 10/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 417us/step - accuracy: 0.9781 - loss: 0.1035\n", + "Epoch 11/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 0.9946 - loss: 0.0881\n", + "Epoch 12/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 426us/step - accuracy: 0.9935 - loss: 0.0692\n", + "Epoch 13/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 0.9964 - loss: 0.0467\n", + "Epoch 14/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - accuracy: 0.9954 - loss: 0.0434\n", + "Epoch 15/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 405us/step - accuracy: 0.9994 - loss: 0.0338\n", + "Epoch 16/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 387us/step - accuracy: 1.0000 - loss: 0.0265\n", + "Epoch 17/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 417us/step - accuracy: 1.0000 - loss: 0.0240\n", + "Epoch 18/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 395us/step - accuracy: 1.0000 - loss: 0.0180\n", + "Epoch 19/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 1.0000 - loss: 0.0146\n", + "Epoch 20/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 390us/step - accuracy: 1.0000 - loss: 0.0139\n", + "Epoch 21/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 405us/step - accuracy: 1.0000 - loss: 0.0107\n", + "Epoch 22/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 427us/step - accuracy: 1.0000 - loss: 0.0091\n", + "Epoch 23/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 393us/step - accuracy: 1.0000 - loss: 0.0083\n", + "Epoch 24/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 440us/step - accuracy: 1.0000 - loss: 0.0074\n", + "Epoch 25/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 385us/step - accuracy: 1.0000 - loss: 0.0078\n", + "Epoch 26/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 399us/step - accuracy: 1.0000 - loss: 0.0060\n", + "Epoch 27/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 0.0056\n", + "Epoch 28/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 403us/step - accuracy: 1.0000 - loss: 0.0046\n", + "Epoch 29/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 390us/step - accuracy: 1.0000 - loss: 0.0046\n", + "Epoch 30/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 436us/step - accuracy: 1.0000 - loss: 0.0042\n", + "Epoch 31/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 1.0000 - loss: 0.0036\n", + "Epoch 32/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 670us/step - accuracy: 1.0000 - loss: 0.0031\n", + "Epoch 33/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 515us/step - accuracy: 1.0000 - loss: 0.0029\n", + "Epoch 34/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 1.0000 - loss: 0.0024\n", + "Epoch 35/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - accuracy: 1.0000 - loss: 0.0025\n", + "Epoch 36/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 1.0000 - loss: 0.0023\n", + "Epoch 37/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 1.0000 - loss: 0.0023\n", + "Epoch 38/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 391us/step - accuracy: 1.0000 - loss: 0.0021\n", + "Epoch 39/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 432us/step - accuracy: 1.0000 - loss: 0.0019\n", + "Epoch 40/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 422us/step - accuracy: 1.0000 - loss: 0.0018\n", + "Epoch 41/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 0.0017\n", + "Epoch 42/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 1.0000 - loss: 0.0018\n", + "Epoch 43/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - accuracy: 1.0000 - loss: 0.0015 \n", + "Epoch 44/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 417us/step - accuracy: 1.0000 - loss: 0.0014 \n", + "Epoch 45/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 399us/step - accuracy: 1.0000 - loss: 0.0013\n", + "Epoch 46/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 1.0000 - loss: 0.0012 \n", + "Epoch 47/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 1.0000 - loss: 0.0012\n", + "Epoch 48/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 384us/step - accuracy: 1.0000 - loss: 0.0012\n", + "Epoch 49/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 427us/step - accuracy: 1.0000 - loss: 0.0010\n", + "Epoch 50/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 400us/step - accuracy: 1.0000 - loss: 0.0011\n", + "Epoch 51/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 8.6869e-04\n", + "Epoch 52/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 1.0000 - loss: 9.3465e-04\n", + "Epoch 53/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 472us/step - accuracy: 1.0000 - loss: 7.8284e-04\n", + "Epoch 54/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 401us/step - accuracy: 1.0000 - loss: 7.6329e-04\n", + "Epoch 55/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 403us/step - accuracy: 1.0000 - loss: 7.5516e-04\n", + "Epoch 56/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 380us/step - accuracy: 1.0000 - loss: 6.6934e-04\n", + "Epoch 57/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 1.0000 - loss: 6.2356e-04\n", + "Epoch 58/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 406us/step - accuracy: 1.0000 - loss: 7.3208e-04\n", + "Epoch 59/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 1.0000 - loss: 7.1415e-04\n", + "Epoch 60/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - accuracy: 1.0000 - loss: 6.3324e-04\n", + "Epoch 61/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 359us/step - accuracy: 1.0000 - loss: 6.3679e-04\n", + "Epoch 62/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 433us/step - accuracy: 1.0000 - loss: 5.7668e-04\n", + "Epoch 63/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 407us/step - accuracy: 1.0000 - loss: 6.5952e-04\n", + "Epoch 64/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 440us/step - accuracy: 1.0000 - loss: 4.7307e-04\n", + "Epoch 65/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 5.1412e-04\n", + "Epoch 66/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 399us/step - accuracy: 1.0000 - loss: 5.2715e-04\n", + "Epoch 67/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 413us/step - accuracy: 1.0000 - loss: 4.7158e-04\n", + "Epoch 68/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 405us/step - accuracy: 1.0000 - loss: 4.6851e-04\n", + "Epoch 69/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - accuracy: 1.0000 - loss: 4.3912e-04\n", + "Epoch 70/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 418us/step - accuracy: 1.0000 - loss: 4.6365e-04\n", + "Epoch 71/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 393us/step - accuracy: 1.0000 - loss: 4.0678e-04\n", + "Epoch 72/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 427us/step - accuracy: 1.0000 - loss: 4.1280e-04\n", + "Epoch 73/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 1.0000 - loss: 3.8196e-04\n", + "Epoch 74/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 440us/step - accuracy: 1.0000 - loss: 3.5783e-04\n", + "Epoch 75/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - accuracy: 1.0000 - loss: 3.4952e-04\n", + "Epoch 76/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 409us/step - accuracy: 1.0000 - loss: 3.0157e-04\n", + "Epoch 77/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 409us/step - accuracy: 1.0000 - loss: 3.4348e-04\n", + "Epoch 78/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - accuracy: 1.0000 - loss: 3.4204e-04\n", + "Epoch 79/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 371us/step - accuracy: 1.0000 - loss: 2.9533e-04\n", + "Epoch 80/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 415us/step - accuracy: 1.0000 - loss: 3.0838e-04\n", + "Epoch 81/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 3.1958e-04\n", + "Epoch 82/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 417us/step - accuracy: 1.0000 - loss: 2.6719e-04\n", + "Epoch 83/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 344us/step - accuracy: 1.0000 - loss: 3.1068e-04\n", + "Epoch 84/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 2.6131e-04\n", + "Epoch 85/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 371us/step - accuracy: 1.0000 - loss: 2.5903e-04\n", + "Epoch 86/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 413us/step - accuracy: 1.0000 - loss: 2.2883e-04\n", + "Epoch 87/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 2.5856e-04\n", + "Epoch 88/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 1.0000 - loss: 2.4212e-04\n", + "Epoch 89/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 1.0000 - loss: 2.4571e-04\n", + "Epoch 90/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 720us/step - accuracy: 1.0000 - loss: 2.3749e-04\n", + "Epoch 91/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 436us/step - accuracy: 1.0000 - loss: 2.2444e-04\n", + "Epoch 92/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - accuracy: 1.0000 - loss: 1.9680e-04\n", + "Epoch 93/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 486us/step - accuracy: 1.0000 - loss: 2.2504e-04\n", + "Epoch 94/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 401us/step - accuracy: 1.0000 - loss: 2.1061e-04\n", + "Epoch 95/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 421us/step - accuracy: 1.0000 - loss: 1.8713e-04\n", + "Epoch 96/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 1.0000 - loss: 1.9671e-04\n", + "Epoch 97/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 1.0000 - loss: 1.9924e-04\n", + "Epoch 98/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 473us/step - accuracy: 1.0000 - loss: 1.8268e-04\n", + "Epoch 99/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 478us/step - accuracy: 1.0000 - loss: 2.0270e-04\n", + "Epoch 100/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 1.0000 - loss: 2.0397e-04\n", + "Epoch 101/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 356us/step - accuracy: 1.0000 - loss: 1.4485e-04\n", + "Epoch 102/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 391us/step - accuracy: 1.0000 - loss: 1.5298e-04\n", + "Epoch 103/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 1.0000 - loss: 1.5612e-04\n", + "Epoch 104/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 1.5175e-04\n", + "Epoch 105/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 1.4972e-04\n", + "Epoch 106/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 352us/step - accuracy: 1.0000 - loss: 1.4624e-04\n", + "Epoch 107/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 1.5305e-04\n", + "Epoch 108/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 401us/step - accuracy: 1.0000 - loss: 1.3649e-04\n", + "Epoch 109/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 1.2405e-04\n", + "Epoch 110/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 1.2499e-04\n", + "Epoch 111/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 352us/step - accuracy: 1.0000 - loss: 1.3003e-04\n", + "Epoch 112/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 373us/step - accuracy: 1.0000 - loss: 1.1776e-04\n", + "Epoch 113/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 362us/step - accuracy: 1.0000 - loss: 1.4132e-04\n", + "Epoch 114/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 1.1974e-04\n", + "Epoch 115/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 1.0948e-04\n", + "Epoch 116/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 1.0341e-04\n", + "Epoch 117/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 1.0452e-04\n", + "Epoch 118/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 356us/step - accuracy: 1.0000 - loss: 1.1888e-04\n", + "Epoch 119/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 347us/step - accuracy: 1.0000 - loss: 1.2141e-04\n", + "Epoch 120/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 343us/step - accuracy: 1.0000 - loss: 1.1602e-04\n", + "Epoch 121/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 1.0000 - loss: 1.0147e-04\n", + "Epoch 122/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 9.5138e-05\n", + "Epoch 123/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 351us/step - accuracy: 1.0000 - loss: 9.4022e-05\n", + "Epoch 124/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 357us/step - accuracy: 1.0000 - loss: 9.6795e-05\n", + "Epoch 125/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 333us/step - accuracy: 1.0000 - loss: 8.0188e-05\n", + "Epoch 126/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 1.0000 - loss: 1.0068e-04\n", + "Epoch 127/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 9.7333e-05\n", + "Epoch 128/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 357us/step - accuracy: 1.0000 - loss: 8.9280e-05\n", + "Epoch 129/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 534us/step - accuracy: 1.0000 - loss: 8.4881e-05\n", + "Epoch 130/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 1.0000 - loss: 7.5235e-05\n", + "Epoch 131/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 406us/step - accuracy: 1.0000 - loss: 8.0178e-05\n", + "Epoch 132/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 350us/step - accuracy: 1.0000 - loss: 8.3735e-05\n", + "Epoch 133/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 8.5222e-05\n", + "Epoch 134/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 7.4826e-05\n", + "Epoch 135/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 345us/step - accuracy: 1.0000 - loss: 8.3263e-05\n", + "Epoch 136/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - accuracy: 1.0000 - loss: 7.3571e-05\n", + "Epoch 137/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 6.8911e-05\n", + "Epoch 138/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 6.8982e-05\n", + "Epoch 139/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 342us/step - accuracy: 1.0000 - loss: 6.5350e-05\n", + "Epoch 140/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 7.2308e-05\n", + "Epoch 141/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 374us/step - accuracy: 1.0000 - loss: 6.2855e-05\n", + "Epoch 142/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 358us/step - accuracy: 1.0000 - loss: 7.5560e-05\n", + "Epoch 143/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 1.0000 - loss: 6.5700e-05\n", + "Epoch 144/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 357us/step - accuracy: 1.0000 - loss: 6.9912e-05\n", + "Epoch 145/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 6.3182e-05\n", + "Epoch 146/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 1.0000 - loss: 5.5283e-05\n", + "Epoch 147/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 6.6047e-05\n", + "Epoch 148/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 6.0650e-05\n", + "Epoch 149/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 358us/step - accuracy: 1.0000 - loss: 5.5961e-05\n", + "Epoch 150/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 348us/step - accuracy: 1.0000 - loss: 5.8975e-05\n", + "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 494us/step - accuracy: 0.9868 - loss: 0.0172\n", + "Test accuracy: 0.9895833134651184\n", + "Test loss: 0.015178960748016834\n" + ] + } + ], "source": [ - "# your code here" + "# ADJUSTED MODEL\n", + "def regression_model():\n", + " # Create model\n", + " new_model = Sequential()\n", + " new_model.add(Dense(85, activation='relu', input_shape=(n_cols,)))\n", + " new_model.add(Dense(85, activation='relu'))\n", + "\n", + "\n", + " # Output layer with Softmax activation\n", + " new_model.add(Dense(2, activation='softmax'))\n", + "\n", + " #Compile model using Adam optimizer, sparse_categorical_crossentropy loss and accuracy as metric\n", + " new_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + " return new_model\n", + "\n", + "# Build and the model\n", + "\n", + "new_model = regression_model()\n", + "\n", + "\n", + "# Fit the training data\n", + "new_model.fit(X_train, y_train, epochs=150)\n", + "\n", + "\n", + "# Evaluate the model on the test set\n", + "test_loss, test_accuracy = new_model.evaluate(X_test, y_test)\n", + "\n", + "print(f\"Test accuracy: {test_accuracy}\")\n", + "print(f\"Test loss: {test_loss}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 425us/step - accuracy: 0.6735 - loss: 0.6132\n", + "Epoch 2/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 412us/step - accuracy: 0.8415 - loss: 0.3985\n", + "Epoch 3/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 0.9369 - loss: 0.2012\n", + "Epoch 4/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 385us/step - accuracy: 0.9667 - loss: 0.0936\n", + "Epoch 5/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.9823 - loss: 0.0489\n", + "Epoch 6/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 0.0153\n", + "Epoch 7/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 1.0000 - loss: 0.0062\n", + "Epoch 8/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 0.0036\n", + "Epoch 9/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 1.0000 - loss: 0.0023\n", + "Epoch 10/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 406us/step - accuracy: 1.0000 - loss: 0.0019\n", + "Epoch 11/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 1.0000 - loss: 0.0014\n", + "Epoch 12/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 1.0000 - loss: 0.0010\n", + "Epoch 13/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 0.0010\n", + "Epoch 14/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 348us/step - accuracy: 1.0000 - loss: 8.6567e-04\n", + "Epoch 15/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 377us/step - accuracy: 1.0000 - loss: 7.5325e-04\n", + "Epoch 16/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 360us/step - accuracy: 1.0000 - loss: 6.8974e-04\n", + "Epoch 17/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 1.0000 - loss: 5.5525e-04\n", + "Epoch 18/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 4.2852e-04\n", + "Epoch 19/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 3.9877e-04\n", + "Epoch 20/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 3.6958e-04\n", + "Epoch 21/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 3.4292e-04\n", + "Epoch 22/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 2.4687e-04\n", + "Epoch 23/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 2.8618e-04\n", + "Epoch 24/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 1.0000 - loss: 2.5262e-04\n", + "Epoch 25/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 401us/step - accuracy: 1.0000 - loss: 2.3413e-04\n", + "Epoch 26/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 1.0000 - loss: 2.0153e-04\n", + "Epoch 27/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 433us/step - accuracy: 1.0000 - loss: 2.0033e-04\n", + "Epoch 28/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 407us/step - accuracy: 1.0000 - loss: 1.8713e-04\n", + "Epoch 29/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 1.0000 - loss: 1.6112e-04\n", + "Epoch 30/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 437us/step - accuracy: 1.0000 - loss: 1.6445e-04\n", + "Epoch 31/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - accuracy: 1.0000 - loss: 1.6348e-04\n", + "Epoch 32/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 440us/step - accuracy: 1.0000 - loss: 1.4951e-04\n", + "Epoch 33/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 1.0000 - loss: 1.1001e-04\n", + "Epoch 34/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 1.0000 - loss: 1.0817e-04\n", + "Epoch 35/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 418us/step - accuracy: 1.0000 - loss: 1.1052e-04\n", + "Epoch 36/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 1.0000 - loss: 9.6857e-05\n", + "Epoch 37/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 421us/step - accuracy: 1.0000 - loss: 8.7629e-05\n", + "Epoch 38/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 1.0000 - loss: 1.0124e-04\n", + "Epoch 39/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 380us/step - accuracy: 1.0000 - loss: 8.5921e-05\n", + "Epoch 40/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 1.0000 - loss: 8.3911e-05\n", + "Epoch 41/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 411us/step - accuracy: 1.0000 - loss: 8.5823e-05\n", + "Epoch 42/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 7.9213e-05 \n", + "Epoch 43/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 478us/step - accuracy: 1.0000 - loss: 7.4379e-05\n", + "Epoch 44/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 480us/step - accuracy: 1.0000 - loss: 6.8052e-05\n", + "Epoch 45/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 387us/step - accuracy: 1.0000 - loss: 6.6269e-05\n", + "Epoch 46/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 1.0000 - loss: 6.9135e-05\n", + "Epoch 47/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 460us/step - accuracy: 1.0000 - loss: 5.2481e-05\n", + "Epoch 48/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 449us/step - accuracy: 1.0000 - loss: 5.5314e-05\n", + "Epoch 49/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 5.2699e-05\n", + "Epoch 50/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 1.0000 - loss: 5.6099e-05\n", + "Epoch 51/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 1.0000 - loss: 4.6521e-05\n", + "Epoch 52/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 351us/step - accuracy: 1.0000 - loss: 4.7316e-05\n", + "Epoch 53/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 341us/step - accuracy: 1.0000 - loss: 4.2553e-05\n", + "Epoch 54/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 385us/step - accuracy: 1.0000 - loss: 4.5851e-05\n", + "Epoch 55/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 4.3842e-05\n", + "Epoch 56/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 4.2531e-05\n", + "Epoch 57/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 4.0022e-05\n", + "Epoch 58/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 397us/step - accuracy: 1.0000 - loss: 3.4085e-05\n", + "Epoch 59/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 390us/step - accuracy: 1.0000 - loss: 3.6001e-05\n", + "Epoch 60/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 1.0000 - loss: 3.0761e-05\n", + "Epoch 61/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 3.3687e-05 \n", + "Epoch 62/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 430us/step - accuracy: 1.0000 - loss: 3.0586e-05\n", + "Epoch 63/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 1.0000 - loss: 3.1748e-05\n", + "Epoch 64/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 2.7269e-05\n", + "Epoch 65/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 358us/step - accuracy: 1.0000 - loss: 2.6955e-05\n", + "Epoch 66/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 362us/step - accuracy: 1.0000 - loss: 2.7645e-05\n", + "Epoch 67/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 358us/step - accuracy: 1.0000 - loss: 2.7275e-05\n", + "Epoch 68/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 356us/step - accuracy: 1.0000 - loss: 2.6758e-05\n", + "Epoch 69/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 2.5287e-05\n", + "Epoch 70/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 2.2368e-05\n", + "Epoch 71/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 2.3294e-05\n", + "Epoch 72/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 357us/step - accuracy: 1.0000 - loss: 1.9729e-05\n", + "Epoch 73/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 2.0934e-05\n", + "Epoch 74/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 394us/step - accuracy: 1.0000 - loss: 1.9817e-05\n", + "Epoch 75/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 1.9400e-05\n", + "Epoch 76/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 1.6344e-05\n", + "Epoch 77/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 396us/step - accuracy: 1.0000 - loss: 1.9216e-05\n", + "Epoch 78/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 1.6686e-05\n", + "Epoch 79/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 1.0000 - loss: 1.7193e-05\n", + "Epoch 80/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 1.8050e-05\n", + "Epoch 81/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 1.5242e-05\n", + "Epoch 82/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 380us/step - accuracy: 1.0000 - loss: 1.8276e-05\n", + "Epoch 83/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 354us/step - accuracy: 1.0000 - loss: 1.5296e-05\n", + "Epoch 84/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 1.0000 - loss: 1.6412e-05\n", + "Epoch 85/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 1.3007e-05\n", + "Epoch 86/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 533us/step - accuracy: 1.0000 - loss: 1.2743e-05\n", + "Epoch 87/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 423us/step - accuracy: 1.0000 - loss: 1.4120e-05\n", + "Epoch 88/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 1.0000 - loss: 1.6486e-05\n", + "Epoch 89/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 394us/step - accuracy: 1.0000 - loss: 1.3674e-05\n", + "Epoch 90/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 1.1903e-05\n", + "Epoch 91/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 1.2265e-05\n", + "Epoch 92/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 352us/step - accuracy: 1.0000 - loss: 1.1367e-05\n", + "Epoch 93/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 344us/step - accuracy: 1.0000 - loss: 1.2041e-05\n", + "Epoch 94/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 1.0000 - loss: 1.1710e-05\n", + "Epoch 95/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 1.2441e-05\n", + "Epoch 96/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 1.0000 - loss: 1.0950e-05\n", + "Epoch 97/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 352us/step - accuracy: 1.0000 - loss: 1.0419e-05\n", + "Epoch 98/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 9.8006e-06\n", + "Epoch 99/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 426us/step - accuracy: 1.0000 - loss: 1.1234e-05\n", + "Epoch 100/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 362us/step - accuracy: 1.0000 - loss: 1.0177e-05\n", + "Epoch 101/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 8.9186e-06\n", + "Epoch 102/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 9.3150e-06\n", + "Epoch 103/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 1.0000 - loss: 8.6516e-06\n", + "Epoch 104/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 1.0000 - loss: 1.0037e-05\n", + "Epoch 105/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 9.3014e-06\n", + "Epoch 106/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 1.0000 - loss: 8.4271e-06\n", + "Epoch 107/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 1.0000 - loss: 7.7965e-06\n", + "Epoch 108/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 1.0000 - loss: 7.2200e-06\n", + "Epoch 109/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 1.0000 - loss: 7.2850e-06\n", + "Epoch 110/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 342us/step - accuracy: 1.0000 - loss: 7.3583e-06\n", + "Epoch 111/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 7.4388e-06\n", + "Epoch 112/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 363us/step - accuracy: 1.0000 - loss: 7.2453e-06\n", + "Epoch 113/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 339us/step - accuracy: 1.0000 - loss: 8.4379e-06\n", + "Epoch 114/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 7.4204e-06\n", + "Epoch 115/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 346us/step - accuracy: 1.0000 - loss: 6.9465e-06\n", + "Epoch 116/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 1.0000 - loss: 6.4155e-06\n", + "Epoch 117/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 353us/step - accuracy: 1.0000 - loss: 7.0823e-06\n", + "Epoch 118/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 1.0000 - loss: 7.1648e-06\n", + "Epoch 119/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 7.4212e-06\n", + "Epoch 120/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 379us/step - accuracy: 1.0000 - loss: 5.1765e-06\n", + "Epoch 121/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 338us/step - accuracy: 1.0000 - loss: 6.4045e-06\n", + "Epoch 122/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 394us/step - accuracy: 1.0000 - loss: 6.5640e-06\n", + "Epoch 123/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 4.8502e-06 \n", + "Epoch 124/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 452us/step - accuracy: 1.0000 - loss: 4.4842e-06\n", + "Epoch 125/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 456us/step - accuracy: 1.0000 - loss: 5.3973e-06\n", + "Epoch 126/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 1.0000 - loss: 5.5139e-06\n", + "Epoch 127/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - accuracy: 1.0000 - loss: 5.0343e-06\n", + "Epoch 128/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 358us/step - accuracy: 1.0000 - loss: 5.5278e-06\n", + "Epoch 129/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 421us/step - accuracy: 1.0000 - loss: 4.9843e-06\n", + "Epoch 130/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 380us/step - accuracy: 1.0000 - loss: 4.5848e-06\n", + "Epoch 131/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 380us/step - accuracy: 1.0000 - loss: 4.8728e-06\n", + "Epoch 132/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 349us/step - accuracy: 1.0000 - loss: 4.6397e-06\n", + "Epoch 133/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 1.0000 - loss: 4.7250e-06\n", + "Epoch 134/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 374us/step - accuracy: 1.0000 - loss: 4.5664e-06\n", + "Epoch 135/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 346us/step - accuracy: 1.0000 - loss: 3.6023e-06\n", + "Epoch 136/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 638us/step - accuracy: 1.0000 - loss: 4.1913e-06\n", + "Epoch 137/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - accuracy: 1.0000 - loss: 4.4044e-06\n", + "Epoch 138/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 413us/step - accuracy: 1.0000 - loss: 4.3367e-06\n", + "Epoch 139/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 375us/step - accuracy: 1.0000 - loss: 4.3176e-06\n", + "Epoch 140/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 359us/step - accuracy: 1.0000 - loss: 4.2211e-06\n", + "Epoch 141/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 371us/step - accuracy: 1.0000 - loss: 4.5157e-06\n", + "Epoch 142/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 4.8446e-06\n", + "Epoch 143/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 1.0000 - loss: 4.1452e-06\n", + "Epoch 144/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 355us/step - accuracy: 1.0000 - loss: 3.5851e-06\n", + "Epoch 145/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 1.0000 - loss: 3.9892e-06\n", + "Epoch 146/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 1.0000 - loss: 3.2200e-06\n", + "Epoch 147/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 361us/step - accuracy: 1.0000 - loss: 3.9845e-06\n", + "Epoch 148/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 609us/step - accuracy: 1.0000 - loss: 3.4471e-06\n", + "Epoch 149/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 424us/step - accuracy: 1.0000 - loss: 3.6542e-06\n", + "Epoch 150/150\n", + "\u001b[1m24/24\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 393us/step - accuracy: 1.0000 - loss: 3.1967e-06\n", + "\u001b[1m6/6\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 513us/step - accuracy: 0.9717 - loss: 0.1255\n", + "Test accuracy: 0.9791666865348816\n", + "Test loss: 0.07649371773004532\n" + ] + } + ], + "source": [ + "# ADJUSTED MODEL WITH LEARNING RATE\n", + "\n", + "# Define learning rate\n", + "learning_rate = 0.005\n", + "\n", + "# Create Adam optimizer with the custom learning rate\n", + "custom_adam = Adam(learning_rate=learning_rate)\n", + "\n", + "def regression_model():\n", + " # Create model\n", + " new_model_learning_rate = Sequential()\n", + " new_model_learning_rate.add(Dense(85, activation='relu', input_shape=(n_cols,)))\n", + " new_model_learning_rate.add(Dense(85, activation='relu'))\n", + "\n", + "\n", + " # Output layer with Softmax activation\n", + " new_model_learning_rate.add(Dense(2, activation='softmax'))\n", + "\n", + " #Compile model using Adam optimizer, sparse_categorical_crossentropy loss and accuracy as metric\n", + " new_model_learning_rate.compile(optimizer=custom_adam, loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + " return new_model_learning_rate\n", + "\n", + "# Build and the model\n", + "\n", + "new_model_learning_rate = regression_model()\n", + "\n", + "\n", + "# Fit the training data\n", + "new_model_learning_rate.fit(X_train, y_train, epochs=150)\n", + "\n", + "\n", + "# Evaluate the model on the test set\n", + "test_loss, test_accuracy = new_model_learning_rate.evaluate(X_test, y_test)\n", + "\n", + "print(f\"Test accuracy: {test_accuracy}\")\n", + "print(f\"Test loss: {test_loss}\")\n", + "\n" ] }, { @@ -120,11 +1417,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ - "# your answer here" + "# By reducing the number of layers to only 2, I already achieved an accuracy of 0,97% and a loss of 0,06. That means that adding more layers in some cases like this, which is a simple dataset, can be detrimential to the model.\n", + "# Using more neurons is also increasing the accuracy although the more neurons also increases the loss even the accuracy keeps increasing.\n", + "# Increasing the epocs by 100 did not bring any better result, increasing the loss. Incresing it by 50 to 150 did improve the accuracy up to 0.98 and lower the loss to 0.06.\n", + "# I did not notice any improvement applying the learning rate so far." ] } ], @@ -144,7 +1444,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/your-code/tic-tac-toe.keras b/your-code/tic-tac-toe.keras new file mode 100644 index 0000000..99d6a35 Binary files /dev/null and b/your-code/tic-tac-toe.keras differ diff --git a/your-code/tic_tac_toe.keras b/your-code/tic_tac_toe.keras new file mode 100644 index 0000000..37ca021 Binary files /dev/null and b/your-code/tic_tac_toe.keras differ