From 4f8dedf3c07236df2cb0d4bf6463c8f07680fc98 Mon Sep 17 00:00:00 2001 From: ankitask Date: Sun, 6 Oct 2024 23:48:15 +0530 Subject: [PATCH] Lab- complete --- your-code/challenge-1.ipynb | 870 +++++++++++++++++- your-code/tic-tac-toe.keras | Bin 0 -> 64978 bytes your-code/tic-tac-toe.model/fingerprint.pb | 1 + your-code/tic-tac-toe.model/saved_model.pb | Bin 0 -> 55995 bytes .../variables/variables.data-00000-of-00001 | Bin 0 -> 28206 bytes .../variables/variables.index | Bin 0 -> 1017 bytes 6 files changed, 858 insertions(+), 13 deletions(-) create mode 100644 your-code/tic-tac-toe.keras create mode 100644 your-code/tic-tac-toe.model/fingerprint.pb create mode 100644 your-code/tic-tac-toe.model/saved_model.pb create mode 100644 your-code/tic-tac-toe.model/variables/variables.data-00000-of-00001 create mode 100644 your-code/tic-tac-toe.model/variables/variables.index diff --git a/your-code/challenge-1.ipynb b/your-code/challenge-1.ipynb index 2487c5f..f950193 100644 --- a/your-code/challenge-1.ipynb +++ b/your-code/challenge-1.ipynb @@ -34,11 +34,344 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TLTMTRMLMMMRBLBMBRclass
0xxxxooxooTrue
1xxxxoooxoTrue
2xxxxooooxTrue
3xxxxooobbTrue
4xxxxoobobTrue
.................................
953oxxxoooxxFalse
954oxoxxoxoxFalse
955oxoxoxxoxFalse
956oxooxxxoxFalse
957ooxxxooxxFalse
\n", + "

958 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " 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", + "953 o x x x o o o x x False\n", + "954 o x o x x o x o x False\n", + "955 o x o x o x x o x False\n", + "956 o x o o x x x o x False\n", + "957 o o x x x o o x x False\n", + "\n", + "[958 rows x 10 columns]" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# your code here\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "data = pd.read_csv('tic-tac-toe.csv')\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "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" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.shape\n", + "data.describe()\n", + "data.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " TL TM TR ML MM MR BL BM BR class\n", + "0 1 1 1 1 0 0 1 0 0 1\n", + "1 1 1 1 1 0 0 0 1 0 1\n", + "2 1 1 1 1 0 0 0 0 1 1\n", + "3 1 1 1 1 0 0 0 2 2 1\n", + "4 1 1 1 1 0 0 2 0 2 1\n", + ".. .. .. .. .. .. .. .. .. .. ...\n", + "953 0 1 1 1 0 0 0 1 1 0\n", + "954 0 1 0 1 1 0 1 0 1 0\n", + "955 0 1 0 1 0 1 1 0 1 0\n", + "956 0 1 0 0 1 1 1 0 1 0\n", + "957 0 0 1 1 1 0 0 1 1 0\n", + "\n", + "[958 rows x 10 columns]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/h4/hbwp12nd2pv6bypw4ypm6q280000gn/T/ipykernel_23158/773542222.py:4: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " df = df.replace(mapping)\n" + ] + } + ], + "source": [ + "# Convert the categorical values to numeric in all columns.\n", + "df = pd.DataFrame(data)\n", + "mapping = {'x': 1, 'o': 0, 'b': 2}\n", + "df = df.replace(mapping)\n", + "\n", + "df['class'] = df['class'].astype(int)\n", + "\n", + "print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ - "# your code here" + "# Separate the inputs and output.\n", + "X = df.drop(columns=['class'])\n", + "y = df['class']" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " TL TM TR ML MM MR BL \\\n", + "0 0.183675 0.10789 0.183675 0.10789 -1.163573 -1.184095 0.183675 \n", + "1 0.183675 0.10789 0.183675 0.10789 -1.163573 -1.184095 -1.169866 \n", + "2 0.183675 0.10789 0.183675 0.10789 -1.163573 -1.184095 -1.169866 \n", + "3 0.183675 0.10789 0.183675 0.10789 -1.163573 -1.184095 -1.169866 \n", + "4 0.183675 0.10789 0.183675 0.10789 -1.163573 -1.184095 1.537216 \n", + "\n", + " BM BR \n", + "0 -1.184095 -1.169866 \n", + "1 0.107890 -1.169866 \n", + "2 -1.184095 0.183675 \n", + "3 1.399876 1.537216 \n", + "4 -1.184095 1.537216 \n" + ] + } + ], + "source": [ + "# Normalize the input data.\n", + "X_norm = (X - X.mean()) / X.std()\n", + "print(X_norm.head())\n", + "\n", + "# from sklearn.preprocessing import MinMaxScaler\n", + "# scaler = MinMaxScaler()\n", + "# X_norm = scaler.fit_transform(X)\n", + "# print(X_norm)" ] }, { @@ -60,11 +393,190 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_cols = X_norm.shape[1]\n", + "n_cols\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, "metadata": {}, "outputs": [], "source": [ - "# your code here" + "# your code here\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X_norm, y, test_size= 0.3, random_state=12)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/anaconda3/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" + ] + } + ], + "source": [ + "from tensorflow import keras\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "model.add(Dense(64, activation='relu', input_shape=(n_cols,)))\n", + "model.add(Dense(32, activation='relu'))\n", + "model.add(Dense(16, activation='relu'))\n", + "\n", + "# Softmax activation in the output layer for multi-class classification\n", + "model.add(Dense(2, activation='softmax'))\n", + "\n", + "model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/20\n", + "21/21 - 0s - 15ms/step - accuracy: 0.6507 - loss: 0.6508\n", + "Epoch 2/20\n", + "21/21 - 0s - 760us/step - accuracy: 0.6657 - loss: 0.6055\n", + "Epoch 3/20\n", + "21/21 - 0s - 704us/step - accuracy: 0.6731 - loss: 0.5735\n", + "Epoch 4/20\n", + "21/21 - 0s - 683us/step - accuracy: 0.6955 - loss: 0.5412\n", + "Epoch 5/20\n", + "21/21 - 0s - 647us/step - accuracy: 0.7537 - loss: 0.5054\n", + "Epoch 6/20\n", + "21/21 - 0s - 631us/step - accuracy: 0.7687 - loss: 0.4679\n", + "Epoch 7/20\n", + "21/21 - 0s - 622us/step - accuracy: 0.8090 - loss: 0.4332\n", + "Epoch 8/20\n", + "21/21 - 0s - 620us/step - accuracy: 0.8522 - loss: 0.3923\n", + "Epoch 9/20\n", + "21/21 - 0s - 625us/step - accuracy: 0.8657 - loss: 0.3558\n", + "Epoch 10/20\n", + "21/21 - 0s - 617us/step - accuracy: 0.8716 - loss: 0.3236\n", + "Epoch 11/20\n", + "21/21 - 0s - 624us/step - accuracy: 0.8985 - loss: 0.2920\n", + "Epoch 12/20\n", + "21/21 - 0s - 630us/step - accuracy: 0.8970 - loss: 0.2774\n", + "Epoch 13/20\n", + "21/21 - 0s - 625us/step - accuracy: 0.9090 - loss: 0.2506\n", + "Epoch 14/20\n", + "21/21 - 0s - 644us/step - accuracy: 0.9045 - loss: 0.2339\n", + "Epoch 15/20\n", + "21/21 - 0s - 651us/step - accuracy: 0.9224 - loss: 0.2162\n", + "Epoch 16/20\n", + "21/21 - 0s - 641us/step - accuracy: 0.9209 - loss: 0.2012\n", + "Epoch 17/20\n", + "21/21 - 0s - 650us/step - accuracy: 0.9403 - loss: 0.1830\n", + "Epoch 18/20\n", + "21/21 - 0s - 630us/step - accuracy: 0.9433 - loss: 0.1684\n", + "Epoch 19/20\n", + "21/21 - 0s - 632us/step - accuracy: 0.9493 - loss: 0.1528\n", + "Epoch 20/20\n", + "21/21 - 0s - 616us/step - accuracy: 0.9597 - loss: 0.1449\n" + ] + } + ], + "source": [ + "history = model.fit(X_train, y_train, epochs=20, verbose=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m9/9\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 400us/step - accuracy: 0.8624 - loss: 0.3150\n", + "test loss 0.32062458992004395\n", + "test accuracy 0.8611111044883728\n" + ] + } + ], + "source": [ + "# Evaluate the model with the test data\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test)\n", + "print('test loss', test_loss)\n", + "print('test accuracy', test_accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: tic-tac-toe.model/assets\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: tic-tac-toe.model/assets\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved artifact at 'tic-tac-toe.model'. The following endpoints are available:\n", + "\n", + "* Endpoint 'serve'\n", + " args_0 (POSITIONAL_ONLY): TensorSpec(shape=(None, 9), dtype=tf.float32, name='keras_tensor_291')\n", + "Output Type:\n", + " TensorSpec(shape=(None, 2), dtype=tf.float32, name=None)\n", + "Captures:\n", + " 14021117136: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021118288: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021118672: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021116944: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021127120: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021118480: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021118096: TensorSpec(shape=(), dtype=tf.resource, name=None)\n", + " 14021126160: TensorSpec(shape=(), dtype=tf.resource, name=None)\n" + ] + } + ], + "source": [ + "model.save('tic-tac-toe.keras')\n", + "model.export('tic-tac-toe.model')" ] }, { @@ -78,11 +590,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 96, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step\n", + "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 63ms/step - accuracy: 1.0000 - loss: 0.0878\n", + "loss 0.08782690763473511\n", + "accuracy 1.0\n" + ] + } + ], "source": [ - "# your code here" + "# your code here\n", + "from keras.models import load_model\n", + "\n", + "saved_model = load_model('tic-tac-toe.keras')\n", + "\n", + "# Randomly select a few rows from the test set\n", + "num_samples = 5\n", + "random_indices = np.random.choice(X_test.shape[0], num_samples, replace=False)\n", + "\n", + "# Get the corresponding input and actual labels\n", + "X_sample = X_test.iloc[random_indices].values\n", + "y_actual = y_test.iloc[random_indices].values\n", + "\n", + "predictions = saved_model.predict(X_sample)\n", + "\n", + "predictions\n", + "\n", + "loss, accuracy = saved_model.evaluate(X_sample, y_actual)\n", + "print('loss', loss)\n", + "print('accuracy', accuracy)" ] }, { @@ -104,11 +646,311 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 97, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(5, 9)" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_sample.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/anaconda3/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" + ] + } + ], + "source": [ + "# your code her\n", + "improved_model = Sequential()\n", + "\n", + "improved_model.add(Dense(128, activation='relu', input_shape=(X_train.shape[1],))) # More neurons\n", + "improved_model.add(Dense(64, activation='relu')) # Hidden layer 1\n", + "improved_model.add(Dense(32, activation='relu')) # Hidden layer 2\n", + "improved_model.add(Dense(16, activation='relu')) # Hidden layer 3\n", + "improved_model.add(Dense(2, activation='softmax')) \n", + "\n", + "# improved_model.add(Dense(16, activation='relu', input_shape=(X_sample.shape[1], )))\n", + "# improved_model.add(Dense(8, activation='relu'))\n", + "# improved_model.add(Dense(2, activation='softmax'))\n", + "\n", + "# improved_model.compile(optimizer='adam', loss='mean_squared_error')\n", + "\n", + "# improved_model.fit(X_train, y_train, epochs=100, verbose=2)\n", + "\n", + "# y_pred = model.predict(X_sample)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 1.0000 - loss: 1.2534e-08 - val_accuracy: 0.9236 - val_loss: 0.6381\n", + "Epoch 2/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 949us/step - accuracy: 1.0000 - loss: 7.8420e-09 - val_accuracy: 0.9271 - val_loss: 0.6386\n", + "Epoch 3/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 909us/step - accuracy: 1.0000 - loss: 1.1095e-08 - val_accuracy: 0.9271 - val_loss: 0.6401\n", + "Epoch 4/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 905us/step - accuracy: 1.0000 - loss: 5.0581e-09 - val_accuracy: 0.9271 - val_loss: 0.6440\n", + "Epoch 5/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 883us/step - accuracy: 1.0000 - loss: 4.6943e-09 - val_accuracy: 0.9271 - val_loss: 0.6461\n", + "Epoch 6/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 841us/step - accuracy: 1.0000 - loss: 4.0089e-09 - val_accuracy: 0.9271 - val_loss: 0.6484\n", + "Epoch 7/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 830us/step - accuracy: 1.0000 - loss: 3.9341e-09 - val_accuracy: 0.9306 - val_loss: 0.6504\n", + "Epoch 8/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 835us/step - accuracy: 1.0000 - loss: 2.4971e-09 - val_accuracy: 0.9306 - val_loss: 0.6530\n", + "Epoch 9/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 832us/step - accuracy: 1.0000 - loss: 2.0598e-09 - val_accuracy: 0.9306 - val_loss: 0.6527\n", + "Epoch 10/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 848us/step - accuracy: 1.0000 - loss: 2.1864e-09 - val_accuracy: 0.9306 - val_loss: 0.6540\n", + "Epoch 11/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 820us/step - accuracy: 1.0000 - loss: 9.9536e-10 - val_accuracy: 0.9306 - val_loss: 0.6558\n", + "Epoch 12/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 1.0000 - loss: 1.1459e-09 - val_accuracy: 0.9306 - val_loss: 0.6575\n", + "Epoch 13/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 807us/step - accuracy: 1.0000 - loss: 1.8063e-10 - val_accuracy: 0.9306 - val_loss: 0.6576\n", + "Epoch 14/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 812us/step - accuracy: 1.0000 - loss: 1.6700e-09 - val_accuracy: 0.9306 - val_loss: 0.6583\n", + "Epoch 15/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 815us/step - accuracy: 1.0000 - loss: 4.8732e-10 - val_accuracy: 0.9306 - val_loss: 0.6607\n", + "Epoch 16/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 844us/step - accuracy: 1.0000 - loss: 3.0036e-10 - val_accuracy: 0.9306 - val_loss: 0.6611\n", + "Epoch 17/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 845us/step - accuracy: 1.0000 - loss: 4.5894e-10 - val_accuracy: 0.9306 - val_loss: 0.6626\n", + "Epoch 18/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 812us/step - accuracy: 1.0000 - loss: 1.9927e-10 - val_accuracy: 0.9306 - val_loss: 0.6631\n", + "Epoch 19/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 846us/step - accuracy: 1.0000 - loss: 3.1152e-10 - val_accuracy: 0.9306 - val_loss: 0.6638\n", + "Epoch 20/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 845us/step - accuracy: 1.0000 - loss: 6.2539e-10 - val_accuracy: 0.9340 - val_loss: 0.6640\n", + "Epoch 21/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 807us/step - accuracy: 1.0000 - loss: 9.9914e-11 - val_accuracy: 0.9340 - val_loss: 0.6637\n", + "Epoch 22/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 810us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6648\n", + "Epoch 23/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 816us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6653\n", + "Epoch 24/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 793us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6654\n", + "Epoch 25/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6657\n", + "Epoch 26/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 798us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6666\n", + "Epoch 27/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 799us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6661\n", + "Epoch 28/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 799us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6666\n", + "Epoch 29/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 783us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6664\n", + "Epoch 30/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 770us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6666\n", + "Epoch 31/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 784us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6669\n", + "Epoch 32/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 827us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6671\n", + "Epoch 33/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6679\n", + "Epoch 34/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 792us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6677\n", + "Epoch 35/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 800us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6682\n", + "Epoch 36/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6678\n", + "Epoch 37/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6684\n", + "Epoch 38/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6686\n", + "Epoch 39/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 836us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6692\n", + "Epoch 40/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 798us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6690\n", + "Epoch 41/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 792us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6691\n", + "Epoch 42/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 793us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6691\n", + "Epoch 43/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 785us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6697\n", + "Epoch 44/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 767us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6696\n", + "Epoch 45/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 771us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6697\n", + "Epoch 46/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 783us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6700\n", + "Epoch 47/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 773us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6706\n", + "Epoch 48/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9340 - val_loss: 0.6709\n", + "Epoch 49/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 787us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6709\n", + "Epoch 50/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 813us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6712\n", + "Epoch 51/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 786us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6713\n", + "Epoch 52/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 781us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6714\n", + "Epoch 53/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 787us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6720\n", + "Epoch 54/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 783us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6722\n", + "Epoch 55/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 771us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6726\n", + "Epoch 56/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 779us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6725\n", + "Epoch 57/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 763us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9375 - val_loss: 0.6730\n", + "Epoch 58/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 771us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6733\n", + "Epoch 59/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 780us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6737\n", + "Epoch 60/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 809us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6737\n", + "Epoch 61/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 954us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6740\n", + "Epoch 62/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6741\n", + "Epoch 63/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 787us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6745\n", + "Epoch 64/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 769us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6748\n", + "Epoch 65/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 769us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6748\n", + "Epoch 66/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 795us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6748\n", + "Epoch 67/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 796us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6750\n", + "Epoch 68/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 797us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6756\n", + "Epoch 69/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 788us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9410 - val_loss: 0.6758\n", + "Epoch 70/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 789us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6760\n", + "Epoch 71/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 798us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6760\n", + "Epoch 72/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 786us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6762\n", + "Epoch 73/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 806us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6766\n", + "Epoch 74/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 789us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6767\n", + "Epoch 75/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 780us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6771\n", + "Epoch 76/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 763us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6771\n", + "Epoch 77/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 766us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6774\n", + "Epoch 78/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 795us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6776\n", + "Epoch 79/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 783us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6777\n", + "Epoch 80/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 785us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6778\n", + "Epoch 81/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6781\n", + "Epoch 82/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 819us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6784\n", + "Epoch 83/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 801us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6787\n", + "Epoch 84/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 781us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6787\n", + "Epoch 85/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 767us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6792\n", + "Epoch 86/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 792us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6792\n", + "Epoch 87/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 786us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6795\n", + "Epoch 88/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 768us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6796\n", + "Epoch 89/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 825us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6798\n", + "Epoch 90/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 799us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6800\n", + "Epoch 91/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 778us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6802\n", + "Epoch 92/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 795us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6804\n", + "Epoch 93/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 778us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6807\n", + "Epoch 94/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 781us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6807\n", + "Epoch 95/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 787us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6807\n", + "Epoch 96/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 779us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6811\n", + "Epoch 97/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 779us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6813\n", + "Epoch 98/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 787us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6814\n", + "Epoch 99/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 777us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6815\n", + "Epoch 100/100\n", + "\u001b[1m21/21\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 969us/step - accuracy: 1.0000 - loss: 0.0000e+00 - val_accuracy: 0.9444 - val_loss: 0.6817\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + " # Compile the model\n", + "improved_model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + "\n", + "# Fit the model for a greater number of epochs\n", + "improved_model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=100, batch_size=32)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss 0.6817036271095276\n", + "accuracy 0.9444444179534912\n" + ] + } + ], "source": [ - "# your code here" + " # Evaluate the improved model\n", + "loss, accuracy = improved_model.evaluate(X_test, y_test, verbose=0)\n", + "print('loss', loss)\n", + "print('accuracy', accuracy)" ] }, { @@ -120,11 +962,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 125, "metadata": {}, "outputs": [], "source": [ - "# your answer here" + "# your answer here\n", + "\n", + "## Neural network improves the performance" ] } ], @@ -144,7 +988,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 0000000000000000000000000000000000000000..b7299f99704d252867a7d5537ea4f1b7c2099f6d GIT binary patch literal 64978 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 literal 0 HcmV?d00001 diff --git a/your-code/tic-tac-toe.model/fingerprint.pb b/your-code/tic-tac-toe.model/fingerprint.pb new file mode 100644 index 0000000..77af10f --- /dev/null +++ b/your-code/tic-tac-toe.model/fingerprint.pb @@ -0,0 +1 @@ +ο䯯դő КѺ.(঴2 \ No newline at end of file diff --git a/your-code/tic-tac-toe.model/saved_model.pb b/your-code/tic-tac-toe.model/saved_model.pb new file mode 100644 index 0000000000000000000000000000000000000000..aeccb7d445eb984d9ca09f65b6d911b52a2d729f GIT binary patch literal 55995 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 E4aVwE$^ZZW literal 0 HcmV?d00001 diff --git a/your-code/tic-tac-toe.model/variables/variables.index b/your-code/tic-tac-toe.model/variables/variables.index new file mode 100644 index 0000000000000000000000000000000000000000..af52e6507d5dae27d39206709acac46a8efc55d7 GIT binary patch literal 1017 zcmZQzVB=tvV&Y(AkP(P?_HcFf4)FK%3vqPvagFzP@^W3`_zSl<>wS*FLa^lMpi!u|Fa#D-+4fORKLqdW)okBxggZ0B4gFL}zggN?zx^gfI zu?R772q>IL({M1Y@3x=7FC%0~SOb$nN4f@w>1=K5UHmfQM));w0Bzs|Vh4o@=^70} zrjDU(Y(QPcgmpOpbtx!JsMKh1Fx|J{q9nhJgb86?3Sb{i*vY8TAYj@X_(O+ZM#L1q zHc%h{EjkI*!f5IdbAAI*iy2`pKp&j~YGE?H-fC41beuVUEuer90AePE31`4Isfrj+ zV^9+zIK%hNDM^!^8 zET*_*goubK0fmNCXmVvx6Gwy|ffz#s|AADHGeMybw2(lgfjq{fa3Bqu+!=sCjhTUg z3B;K7Nd6*-W&{xjJ}un9z{p(Au$Ub#mbmWDkrnJ5TiN+RLij=W?}l!bQuo^cg(>a8 literal 0 HcmV?d00001