diff --git a/your-code/challenge-1.ipynb b/your-code/challenge-1.ipynb index 2487c5f..d3b8274 100644 --- a/your-code/challenge-1.ipynb +++ b/your-code/challenge-1.ipynb @@ -34,11 +34,356 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, + "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", + "
TLTMTRMLMMMRBLBMBRclass
0xxxxooxooTrue
1xxxxoooxoTrue
2xxxxooooxTrue
3xxxxooobbTrue
4xxxxoobobTrue
\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" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# your code here\n", + "\n", + "import pandas as pd\n", + "\n", + "data = pd.read_csv('tic-tac-toe.csv')\n", + "\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "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", + "
classTL_bTL_oTL_xTM_bTM_oTM_xTR_bTR_oTR_x...MR_xBL_bBL_oBL_xBM_bBM_oBM_xBR_bBR_oBR_x
0True001001001...0001010010
1True001001001...0010001010
2True001001001...0010010001
3True001001001...0010100100
4True001001001...0100010100
\n", + "

5 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " class TL_b TL_o TL_x TM_b TM_o TM_x TR_b TR_o TR_x ... MR_x \\\n", + "0 True 0 0 1 0 0 1 0 0 1 ... 0 \n", + "1 True 0 0 1 0 0 1 0 0 1 ... 0 \n", + "2 True 0 0 1 0 0 1 0 0 1 ... 0 \n", + "3 True 0 0 1 0 0 1 0 0 1 ... 0 \n", + "4 True 0 0 1 0 0 1 0 0 1 ... 0 \n", + "\n", + " BL_b BL_o BL_x BM_b BM_o BM_x BR_b BR_o BR_x \n", + "0 0 0 1 0 1 0 0 1 0 \n", + "1 0 1 0 0 0 1 0 1 0 \n", + "2 0 1 0 0 1 0 0 0 1 \n", + "3 0 1 0 1 0 0 1 0 0 \n", + "4 1 0 0 0 1 0 1 0 0 \n", + "\n", + "[5 rows x 28 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_dummys = pd.get_dummies(data, columns=['TL','TM','TR','ML','MM','MR','BL','BM','BR'])\n", + "data_dummys.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "# your code here" + "data_dummys['class'] = data_dummys['class'].apply(lambda x : 1 if x == True else 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "inputs = data_dummys.drop(columns='class')\n", + "outputs = data_dummys['class']" ] }, { @@ -60,11 +405,145 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ - "# your code here" + "# your code here\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "import numpy as np\n", + "\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(inputs, outputs, test_size=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/20\n", + "24/24 [==============================] - 1s 2ms/step - loss: 0.6367 - accuracy: 0.6292\n", + "Epoch 2/20\n", + "24/24 [==============================] - 0s 1ms/step - loss: 0.5410 - accuracy: 0.6423\n", + "Epoch 3/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.4817 - accuracy: 0.7480\n", + "Epoch 4/20\n", + "24/24 [==============================] - 0s 1ms/step - loss: 0.4208 - accuracy: 0.8107\n", + "Epoch 5/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.3593 - accuracy: 0.8786\n", + "Epoch 6/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.3125 - accuracy: 0.9295\n", + "Epoch 7/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.2782 - accuracy: 0.9569\n", + "Epoch 8/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.2533 - accuracy: 0.9739\n", + "Epoch 9/20\n", + "24/24 [==============================] - 0s 1ms/step - loss: 0.2352 - accuracy: 0.9791\n", + "Epoch 10/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.2163 - accuracy: 0.9817\n", + "Epoch 11/20\n", + "24/24 [==============================] - 0s 1ms/step - loss: 0.2050 - accuracy: 0.9909\n", + "Epoch 12/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1936 - accuracy: 0.9935\n", + "Epoch 13/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1845 - accuracy: 0.9896\n", + "Epoch 14/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1772 - accuracy: 0.9922\n", + "Epoch 15/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1693 - accuracy: 0.9974\n", + "Epoch 16/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1593 - accuracy: 0.9987\n", + "Epoch 17/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1563 - accuracy: 0.9987\n", + "Epoch 18/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1471 - accuracy: 0.9987\n", + "Epoch 19/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1395 - accuracy: 1.0000\n", + "Epoch 20/20\n", + "24/24 [==============================] - 0s 2ms/step - loss: 0.1354 - accuracy: 1.0000\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "from tensorflow.keras import layers\n", + "\n", + "model = keras.Sequential()\n", + "model.add(Dense(2000, input_dim=27, activation='relu'))\n", + "model.add(Dense(2, activation='relu'))\n", + "model.add(Dense(2, activation='relu'))\n", + "model.add(Dense(2, activation=tf.nn.softmax))\n", + "\n", + "model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics='accuracy')\n", + "\n", + "model.fit(X_train, y_train, epochs=20)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6/6 [==============================] - 0s 1ms/step - loss: 0.1230 - accuracy: 1.0000\n", + "0.12295224517583847 1.0\n" + ] + } + ], + "source": [ + "val_loss, val_acc = model.evaluate(X_test, y_test)\n", + "print(val_loss, val_acc)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:Found untraced functions such as dense_165_layer_call_and_return_conditional_losses, dense_165_layer_call_fn, dense_166_layer_call_and_return_conditional_losses, dense_166_layer_call_fn, dense_167_layer_call_and_return_conditional_losses while saving (showing 5 of 20). These functions will not be directly callable after loading.\n" + ] + }, + { + "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" + ] + } + ], + "source": [ + "model.save('tic-tac-toe.model')" ] }, { @@ -78,11 +557,247 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 90, "metadata": {}, "outputs": [], "source": [ - "# your code here" + "# your code here\n", + "\n", + "new_model = tf.keras.models.load_model('tic-tac-toe.model')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "pred = new_model.predict([X_test])" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[6.97950184e-01 3.02049845e-01]\n", + " [1.40568325e-02 9.85943198e-01]\n", + " [8.75236758e-04 9.99124825e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.13603380e-02 9.88639712e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.77341406e-03 9.96226549e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.37096800e-03 9.97629106e-01]\n", + " [4.99476213e-03 9.95005310e-01]\n", + " [1.53118508e-05 9.99984741e-01]\n", + " [3.81132384e-04 9.99618888e-01]\n", + " [5.04464954e-02 9.49553490e-01]\n", + " [1.97817991e-03 9.98021841e-01]\n", + " [1.45169976e-03 9.98548329e-01]\n", + " [2.50081852e-04 9.99749959e-01]\n", + " [1.05828256e-03 9.98941720e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [4.33226378e-05 9.99956727e-01]\n", + " [1.30842312e-03 9.98691618e-01]\n", + " [2.82234745e-04 9.99717772e-01]\n", + " [1.66751090e-02 9.83324885e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.68159325e-03 9.98318434e-01]\n", + " [7.45474303e-04 9.99254525e-01]\n", + " [4.25814791e-03 9.95741844e-01]\n", + " [1.33289667e-02 9.86671031e-01]\n", + " [2.59804004e-03 9.97401953e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.44404056e-03 9.98555958e-01]\n", + " [2.51642149e-02 9.74835753e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [5.20712114e-04 9.99479353e-01]\n", + " [4.21752827e-03 9.95782495e-01]\n", + " [2.05677142e-03 9.97943223e-01]\n", + " [6.44248867e-05 9.99935627e-01]\n", + " [1.15282566e-03 9.98847127e-01]\n", + " [7.04802515e-04 9.99295235e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [5.31226117e-03 9.94687796e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.39792018e-04 9.99760211e-01]\n", + " [1.87103808e-01 8.12896252e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.68464831e-03 9.96315420e-01]\n", + " [2.56695808e-03 9.97433007e-01]\n", + " [4.86250734e-03 9.95137513e-01]\n", + " [1.00391340e-02 9.89960909e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.06033820e-04 9.99693990e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.79127306e-02 9.82087195e-01]\n", + " [1.07968748e-02 9.89203155e-01]\n", + " [1.60373107e-03 9.98396218e-01]\n", + " [9.11637209e-03 9.90883648e-01]\n", + " [3.17813159e-04 9.99682188e-01]\n", + " [1.79040413e-02 9.82095957e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.24686795e-01 6.75313234e-01]\n", + " [5.82618406e-04 9.99417424e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.31346022e-03 9.97686505e-01]\n", + " [1.33825149e-02 9.86617506e-01]\n", + " [3.52719039e-01 6.47280931e-01]\n", + " [4.66465838e-02 9.53353405e-01]\n", + " [6.11362513e-03 9.93886411e-01]\n", + " [2.51542922e-04 9.99748409e-01]\n", + " [3.79340636e-04 9.99620676e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [5.63552696e-03 9.94364500e-01]\n", + " [2.43734592e-03 9.97562647e-01]\n", + " [4.35864407e-04 9.99564111e-01]\n", + " [5.07127610e-04 9.99492884e-01]\n", + " [1.00613181e-02 9.89938736e-01]\n", + " [3.98470573e-02 9.60152984e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.82535999e-04 9.99717414e-01]\n", + " [2.88236042e-04 9.99711692e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.04424944e-02 9.89557564e-01]\n", + " [1.12273474e-03 9.98877227e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [9.20183898e-04 9.99079823e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [7.82859046e-03 9.92171407e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.60719035e-03 9.98392761e-01]\n", + " [8.82632798e-04 9.99117315e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.83706277e-03 9.98162925e-01]\n", + " [1.00625278e-02 9.89937425e-01]\n", + " [3.31276911e-03 9.96687233e-01]\n", + " [2.16772154e-01 7.83227801e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.62450524e-04 9.99837518e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.77581525e-03 9.96224165e-01]\n", + " [8.52158875e-04 9.99147773e-01]\n", + " [1.80439337e-03 9.98195589e-01]\n", + " [6.90935791e-01 3.09064209e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [4.55581212e-05 9.99954462e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.31715853e-02 9.86828446e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [4.29501757e-03 9.95704949e-01]\n", + " [2.16746759e-02 9.78325248e-01]\n", + " [1.59099640e-03 9.98408973e-01]\n", + " [1.18313991e-02 9.88168657e-01]\n", + " [9.10586641e-06 9.99990940e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [4.51368076e-04 9.99548614e-01]\n", + " [5.06338431e-03 9.94936585e-01]\n", + " [3.70058743e-03 9.96299446e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [7.39741430e-04 9.99260247e-01]\n", + " [3.30183568e-04 9.99669790e-01]\n", + " [5.31035662e-03 9.94689703e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.94904220e-03 9.98050928e-01]\n", + " [1.28049776e-02 9.87195075e-01]\n", + " [2.51326896e-03 9.97486711e-01]\n", + " [4.40054282e-04 9.99559939e-01]\n", + " [4.42144898e-04 9.99557793e-01]\n", + " [1.23907824e-03 9.98760939e-01]\n", + " [2.80551554e-04 9.99719441e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.28396253e-04 9.99771655e-01]\n", + " [1.79079417e-02 9.82092023e-01]\n", + " [1.68334373e-05 9.99983191e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.26816213e-01 8.73183727e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.93008587e-03 9.97069836e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.35948914e-02 9.66405094e-01]\n", + " [5.55325532e-03 9.94446754e-01]\n", + " [2.35831201e-01 7.64168799e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [7.62978429e-03 9.92370248e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.32646121e-03 9.98673558e-01]\n", + " [3.63731757e-03 9.96362746e-01]\n", + " [7.56995846e-03 9.92430031e-01]\n", + " [1.03921375e-04 9.99896049e-01]\n", + " [7.59556796e-03 9.92404401e-01]\n", + " [3.99881741e-03 9.96001184e-01]\n", + " [2.33447048e-04 9.99766529e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [3.57242348e-03 9.96427596e-01]\n", + " [2.86710821e-02 9.71328914e-01]\n", + " [8.95216223e-03 9.91047800e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.17187817e-02 9.88281190e-01]\n", + " [1.19461399e-03 9.98805404e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [5.55265462e-03 9.94447351e-01]\n", + " [2.45769750e-02 9.75423038e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.27423380e-04 9.99872565e-01]\n", + " [1.26057261e-04 9.99873877e-01]\n", + " [1.72411948e-02 9.82758820e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [7.54591264e-03 9.92454112e-01]\n", + " [6.04291970e-04 9.99395728e-01]\n", + " [1.73750147e-03 9.98262465e-01]\n", + " [8.24654635e-05 9.99917507e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [5.69329038e-03 9.94306743e-01]\n", + " [3.63442884e-03 9.96365547e-01]\n", + " [5.15417099e-01 4.84582931e-01]\n", + " [2.65899598e-05 9.99973416e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [2.03785487e-03 9.97962117e-01]\n", + " [6.06198795e-03 9.93937969e-01]\n", + " [2.09396705e-03 9.97906089e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [4.86254925e-03 9.95137513e-01]\n", + " [1.16290071e-03 9.98837173e-01]\n", + " [6.97950184e-01 3.02049845e-01]\n", + " [1.52746201e-04 9.99847174e-01]]\n" + ] + } + ], + "source": [ + "print(pred)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "print(np.argmax(pred[0]))" ] }, { @@ -108,7 +823,9 @@ "metadata": {}, "outputs": [], "source": [ - "# your code here" + "# your code here\n", + "\n", + "# My model had 100% accuracy and a low loss." ] }, { @@ -144,7 +861,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.5" } }, "nbformat": 4, diff --git a/your-code/tic-tac-toe.model/keras_metadata.pb b/your-code/tic-tac-toe.model/keras_metadata.pb new file mode 100644 index 0000000..cf6bb1e --- /dev/null +++ b/your-code/tic-tac-toe.model/keras_metadata.pb @@ -0,0 +1,8 @@ + + root"_tf_keras_sequential* {"name": "sequential_47", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential_47", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 27]}, "dtype": "uint8", "sparse": false, "ragged": false, "name": "module_wrapper_156_input"}}, {"class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}, {"class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}, {"class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}, {"class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}]}, "shared_object_id": 1, "build_input_shape": {"class_name": "TensorShape", "items": [null, 27]}, "is_graph_network": true, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 27]}, "uint8", "module_wrapper_156_input"]}, "keras_version": "2.5.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential"}, "training_config": {"loss": "sparse_categorical_crossentropy", "metrics": [[{"class_name": "MeanMetricWrapper", "config": {"name": "accuracy", "dtype": "float32", "fn": "sparse_categorical_accuracy"}, "shared_object_id": 2}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 +root.layer_with_weights-0"_tf_keras_layer*{"name": "module_wrapper_156", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}2 +root.layer_with_weights-1"_tf_keras_layer*{"name": "module_wrapper_157", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}2 +root.layer_with_weights-2"_tf_keras_layer*{"name": "module_wrapper_158", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}2 +root.layer_with_weights-3"_tf_keras_layer*{"name": "module_wrapper_159", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "ModuleWrapper", "config": {"layer was saved without config": true}}2 +Uroot.keras_api.metrics.0"_tf_keras_metric*{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 3}2 +Vroot.keras_api.metrics.1"_tf_keras_metric*{"class_name": "MeanMetricWrapper", "name": "accuracy", "dtype": "float32", "config": {"name": "accuracy", "dtype": "float32", "fn": "sparse_categorical_accuracy"}, "shared_object_id": 2}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 0000000..8ee26a5 Binary files /dev/null and b/your-code/tic-tac-toe.model/saved_model.pb differ diff --git a/your-code/tic-tac-toe.model/variables/variables.data-00000-of-00001 b/your-code/tic-tac-toe.model/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000..8c6a67a Binary files /dev/null and b/your-code/tic-tac-toe.model/variables/variables.data-00000-of-00001 differ 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 0000000..0cd7af1 Binary files /dev/null and b/your-code/tic-tac-toe.model/variables/variables.index differ