diff --git a/POET_Training.ipynb b/POET_Training.ipynb index 5f51402..5942f4c 100644 --- a/POET_Training.ipynb +++ b/POET_Training.ipynb @@ -27,14 +27,26 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 1, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-01-15 14:03:45.613137: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1736946225.710416 5544 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1736946225.737063 5544 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-01-15 14:03:45.952881: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Running Keras in version 3.6.0\n" + "Running Keras in version 3.7.0\n" ] } ], @@ -50,7 +62,10 @@ "import matplotlib.pyplot as plt\n", "from sklearn.cluster import KMeans\n", "from imblearn.over_sampling import SMOTE\n", - "from collections import Counter" + "from imblearn.under_sampling import RandomUnderSampler\n", + "from imblearn.over_sampling import RandomOverSampler\n", + "from collections import Counter\n", + "import os" ] }, { @@ -62,9 +77,17 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "I0000 00:00:1736946248.679800 5544 gpu_device.cc:2022] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13393 MB memory: -> device: 0, name: NVIDIA A2, pci bus id: 0000:82:00.0, compute capability: 8.6\n" + ] + } + ], "source": [ "dtype = \"float32\"\n", "activation = \"relu\"\n", @@ -95,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -196,17 +219,17 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Model: \"sequential_4\"\n", + "Model: \"sequential_1\"\n", "\n" ], "text/plain": [ - "\u001b[1mModel: \"sequential_4\"\u001b[0m\n" + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" ] }, "metadata": {}, @@ -218,13 +241,13 @@ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", - "│ dense_15 (Dense) │ (None, 512) │ 6,656 │\n", + "│ dense_3 (Dense) │ (None, 512) │ 6,656 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_16 (Dense) │ (None, 1024) │ 525,312 │\n", + "│ dense_4 (Dense) │ (None, 1024) │ 525,312 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_17 (Dense) │ (None, 512) │ 524,800 │\n", + "│ dense_5 (Dense) │ (None, 512) │ 524,800 │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_18 (Dense) │ (None, 12) │ 6,156 │\n", + "│ dense_6 (Dense) │ (None, 12) │ 6,156 │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n", "\n" ], @@ -232,13 +255,13 @@ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", - "│ dense_15 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m6,656\u001b[0m │\n", + "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m6,656\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_16 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m525,312\u001b[0m │\n", + "│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m525,312\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_17 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m524,800\u001b[0m │\n", + "│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m512\u001b[0m) │ \u001b[38;5;34m524,800\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_18 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m) │ \u001b[38;5;34m6,156\u001b[0m │\n", + "│ dense_6 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m) │ \u001b[38;5;34m6,156\u001b[0m │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, @@ -377,10 +400,11 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ + "os.chdir('/mnt/beegfs/home/signer/projects/model-training')\n", "data_file = h5py.File(\"Barite_50_Data_training.h5\")\n", "\n", "design = data_file[\"design\"]\n", @@ -401,14 +425,14 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/home/signer/bin/miniconda3/envs/training/lib/python3.11/site-packages/sklearn/base.py:1473: ConvergenceWarning: Number of distinct clusters (1) found smaller than n_clusters (2). Possibly due to duplicate points in X.\n", + "/mnt/beegfs/home/signer/.conda/envs/ai/lib/python3.11/site-packages/sklearn/base.py:1473: ConvergenceWarning: Number of distinct clusters (1) found smaller than n_clusters (2). Possibly due to duplicate points in X.\n", " return fit_method(estimator, *args, **kwargs)\n" ] } @@ -439,7 +463,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -452,22 +476,42 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Amount class 0: 0.9879380619380619\n", + "Amount class 1: 0.012061938061938062\n" + ] + } + ], + "source": [ + "counter = Counter(df_design.iloc[:,-1])\n", + "print(\"Amount class 0:\", counter[0] / (counter[0] + counter[1]) )\n", + "print(\"Amount class 1:\", counter[1] / (counter[0] + counter[1]) )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + " " ] }, - "execution_count": 89, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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VH9NFEVav3699u3bd9zfUy6XVSwWJ20AgKVhxhE6ePCgmpubFUWRPvOZz+iRRx7RRRddpP7+fklSe3v7pNe3t7fXn5tOd3e32tra6tvq1atnuksAgAVqxhF697vfrQMHDujpp5/WZz/7Wd1yyy168cUX688bYya93jk35bGJtmzZooGBgfrW19c3010CACxQ4Ux/IJ/P68ILL5QkXX755dq/f7++/vWv188D9ff3a+XKlfXXHzlyZMroaKIoihRF0Ux3AwCwCMz6c0LOOZXLZa1Zs0YdHR3q6empP1epVNTb26t169bN9s8AABahGY2E7r33Xl177bVavXq1BgcHtXv3bj311FN6/PHHZYzR5s2btX37dnV1damrq0vbt29XY2OjbrrpptO1/wCABWxGEfrFL36hT37yk3r99dfV1tamSy65RI8//rg2btwoSbrnnns0Ojqq22+/XUePHtUVV1yhPXv2qKWl5bTsPABgYZv154TmGp8TAoCF7Yx8TggAgNkiQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMCbGUWou7tb73//+9XS0qIVK1boox/9qF566aVJr3HOadu2bers7FRDQ4M2bNigQ4cOzelOAwAWhxlFqLe3V3fccYeefvpp9fT0KI5jbdq0ScPDw/XX7NixQzt37tSuXbu0f/9+dXR0aOPGjRocHJzznQcALGzGOedO9YffeOMNrVixQr29vfrgBz8o55w6Ozu1efNmff7zn5cklctltbe36/7779dtt932jr+zWCyqra1NG3SDQpM71V0DAHgSu6qe0g81MDCg1tbWE752VueEBgYGJEnLly+XJB0+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vIgQAMAbIgQA8IYIAQC8mfcRms+3Cfdh7969uv7669XZ2SljjH7wgx9Met45p23btqmzs1MNDQ3asGGDDh065GdnPenu7tb73/9+tbS0aMWKFfroRz+ql156adJrOE7Sgw8+qEsuuUStra1qbW3VlVdeqR/96Ef15zlG0+vu7pYxRps3b64/xrE6dfM6QmO3Cd+6dauef/55/dZv/ZauvfZa/fznP/e9a94MDw/r0ksv1a5du6Z9fseOHdq5c6d27dql/fv3q6OjQxs3btTg4OAZ3lN/ent7dccdd+jpp59WT0+P4jjWpk2bNDw8XH8Nx0latWqV7rvvPj3zzDN65pln9OEPf1g33HBD/c2TYzTV/v379c1vflOXXHLJpMc5VrMwi+uUnnYf+MAH3Gc+85lJj73nPe9xX/jCFzzt0fwiyT3yyCP179M0dR0dHe6+++6rP1YqlVxbW5v7i7/4Cw97OD8cOXLESXK9vb3OOY7TiSxbtsz99V//NcdoGoODg66rq8v19PS49evXu7vuuss5x3+fZmvejoSW8m3CT9Xhw4fV398/6ZhFUaT169cv6WM2MDAgSVq+fLkkjtN0kiTR7t27NTw8rCuvvJJjNI077rhD1113na655ppJj3OsZue0XEV7Lsz0NuFQ/bhMd8xeffVVH7vknXNOd999t6666iqtXbtWEsdpooMHD+rKK69UqVRSc3OzHnnkEV100UX1N0+OUWb37t167rnntH///inP8d+n2Zm3ERpzsrcJxziO2bg777xTL7zwgn7yk59MeY7jJL373e/WgQMH9Pbbb+v73/++brnlFvX29taf5xhJfX19uuuuu7Rnzx4VCoXjvo5jdWrm7XTcTG8TDqmjo0OSOGY1n/vc5/Too4/qySef1KpVq+qPc5zG5fN5XXjhhbr88svV3d2tSy+9VF//+tc5RhM8++yzOnLkiC677DKFYagwDNXb26s/+7M/UxiG9ePBsTo18zZCE28TPlFPT4/WrVvnaa/mtzVr1qijo2PSMatUKurt7V1Sx8w5pzvvvFMPP/ywnnjiCa1Zs2bS8xyn43POqVwuc4wmuPrqq3Xw4EEdOHCgvl1++eW6+eabdeDAAV1wwQUcq9nwtybinc3mNuGL1eDgoHv++efd888/7yS5nTt3uueff969+uqrzjnn7rvvPtfW1uYefvhhd/DgQfeJT3zCrVy50hWLRc97fuZ89rOfdW1tbe6pp55yr7/+en0bGRmpv4bj5NyWLVvc3r173eHDh90LL7zg7r33XmetdXv27HHOcYxOZOLqOOc4VrMxryPknHN//ud/7s4//3yXz+fdb/zGb9SX2S5VTz755LT3cr/lllucc9ly0S9/+cuuo6PDRVHkPvjBD7qDBw/63ekzbLrjI8l95zvfqb+G4+TcrbfeWv/f1rnnnuuuvvrqeoCc4xidyLER4lidOm7lAADwZt6eEwIALH5ECADgDRECAHhDhAAA3hAhAIA3RAgA4A0RAgB4Q4QAAN4QIQCAN0QIAOANEQIAeEOEAADe/H/cPLC05dn2LgAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGdCAYAAAC7EMwUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAojElEQVR4nO3db3BdZ2Hn8d/znHPuuZIsXdshlqzazRpiKKnXmSFxs85QbBLsnSxlQ+l02ial6dDOBOKw8eRFwASSlLJWMDOe0HWbDi1L6TKp+6IJpDtArd0kSplMduzEnnjNTLbMOEYtEYbgSLKk++ec8+yLc+/Vla3YliXnuZK+H+aMrXOvpMNJuF+e5/wzzjknAAA8sL43AACwfBEhAIA3RAgA4A0RAgB4Q4QAAN4QIQCAN0QIAOANEQIAeBP63oBzZVmmn/zkJ+ru7pYxxvfmAADmyDmn8fFx9ff3y9oLj3XaLkI/+clPtH79et+bAQCYp+HhYa1bt+6C72m7CHV3d0uS3q//pFCR560BAMxVopp+oO82P88vpO0i1JiCCxUpNEQIABad+h1JL+WQCicmAAC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAm3lFaGBgQMYY7d69u7nOOadHHnlE/f396ujo0Pbt23XixIn5bicAYAm67AgdPnxYX/va17R58+YZ6/ft26f9+/frwIEDOnz4sPr6+rRjxw6Nj4/Pe2MBAEvLZUXo7NmzuvPOO/VXf/VXWrVqVXO9c06PPfaYHnzwQX3sYx/Tpk2b9M1vflOTk5N64oknFmyjAQBLw2VFaNeuXfrwhz+sD33oQzPWnzx5UiMjI9q5c2dzXRzH2rZtm1544YVZf1alUtHY2NiMBQCwPIRz/YaDBw/q5Zdf1uHDh897bWRkRJLU29s7Y31vb69OnTo1688bGBjQn/zJn8x1MwAAS8CcRkLDw8O677779K1vfUvFYvEt32eMmfG1c+68dQ179uzR6OhocxkeHp7LJgEAFrE5jYReeuklnT59WjfccENzXZqmev7553XgwAG9+uqrkvIR0dq1a5vvOX369Hmjo4Y4jhXH8eVsOwBgkZvTSOjWW2/V8ePHdezYseZy44036s4779SxY8f0zne+U319fRocHGx+T7Va1dDQkG6++eYF33gAwOI2p5FQd3e3Nm3aNGNdV1eXrrrqqub63bt3a+/evdq4caM2btyovXv3qrOzU3fcccfCbTUAYEmY84kJF/PAAw9oampK99xzj86cOaObbrpJhw4dUnd390L/KgDAImecc873RrQaGxtTqVTSdt2u0ES+NwcAMEeJq+k5fUejo6Pq6em54Hu5dxwAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwBsiBADwhggBALyZU4Qef/xxbd68WT09Perp6dHWrVv1ve99r/m6c06PPPKI+vv71dHRoe3bt+vEiRMLvtEAgKVhThFat26dHn30UR05ckRHjhzRLbfcottvv70Zmn379mn//v06cOCADh8+rL6+Pu3YsUPj4+NXZOMBAIubcc65+fyA1atX6ytf+Yo+8YlPqL+/X7t379ZnPvMZSVKlUlFvb6++/OUv6+67776knzc2NqZSqaTtul2hieazaQAADxJX03P6jkZHR9XT03PB9172MaE0TXXw4EFNTExo69atOnnypEZG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D+rll1/W4cOHz3uNf5/mp20j1HCpjwnHNPbZtHvvvVevvPKKfvCDH5z3GvtJes973qNjx47pzTff1D/8wz/orrvu0tDQUPN19pE0PDys++67T4cOHVKxWHzL97GvLk/bTsfN9THhkPr6+iSJfVb36U9/Wk8//bSeffZZrVu3rrme/TStUCjo2muv1Y033qiBgQFdf/31+upXv8o+avHSSy/p9OnTuuGGGxSGocIw1NDQkP7sz/5MYRg29wf76vK0bYRaHxPeanBwUDfffLOnrWpvGzZsUF9f34x9Vq1WNTQ0tKz2mXNO9957r5588kk988wz2rBhw4zX2U9vzTmnSqXCPmpx66236vjx4zp27FhzufHGG3XnnXfq2LFjeuc738m+mg9/50Rc3HweE75UjY+Pu6NHj7qjR486SW7//v3u6NGj7tSpU8455x599FFXKpXck08+6Y4fP+5+7/d+z61du9aNjY153vK3z6c+9SlXKpXcc889515//fXmMjk52XwP+8m5PXv2uOeff96dPHnSvfLKK+5zn/ucs9a6Q4cOOefYRxfSenacc+yr+WjrCDnn3J//+Z+7a665xhUKBfe+972veZrtcvXss8/O+iz3u+66yzmXny768MMPu76+PhfHsfvABz7gjh8/7nej32az7R9J7hvf+EbzPewn5z7xiU80/7d19dVXu1tvvbUZIOfYRxdyboTYV5ePRzkAALxp22NCAICljwgBALwhQgAAb4gQAMAbIgQA8IYIAQC8IUIAAG+IEADAGyIEAPCGCAEAvCFCAABviBAAwJv/Dz2ghl1KO8iWAAAAAElFTkSuQmCC", "text/plain": [ " " ] @@ -477,7 +521,7 @@ } ], "source": [ - "i=1000\n", + "i=800\n", "\n", "plt.imshow(np.array(df_results['Barite'][(i*2500):(i*2500+2500)]).reshape(50,50), interpolation='bicubic', origin='lower')\n", "plt.contour(np.array(df_results['Class'][(i*2500):(i*2500+2500)]).reshape(50,50), levels=[0.1], colors='red', origin='lower')" @@ -492,7 +536,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -503,30 +547,59 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Perform SMOT Sampling on dataset to balance classes" + "## Perform Over and Under Sampling on dataset to balance classes" ] }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "Counter(df_design['Class'])\n", - "oversample = SMOTE()\n", + "sampling_strategy = 'none'\n", "\n", - "design_resampled, design_classes_resampled = oversample.fit_resample(X_train.iloc[:, :-1], X_train.iloc[:, -1])\n", - "target_resampled, target_classes_resampled = oversample.fit_resample(y_train.iloc[:, :-1], y_train.iloc[:, -1])\n" + "Counter(df_design['Class'])\n", + "\n", + "if sampling_strategy == 'smote':\n", + " print(\"Using SMOTE strategy\")\n", + " over = SMOTE(sampling_strategy=0.1)\n", + " design_resampled, design_classes_resampled = over.fit_resample(X_train.iloc[:, :-1], X_train.iloc[:, -1])\n", + " target_resampled, target_classes_resampled = over.fit_resample(y_train.iloc[:, :-1], y_train.iloc[:, -1])\n", + " \n", + "elif sampling_strategy == 'over':\n", + " print(\"Using Oversampling\")\n", + " over = RandomOverSampler()\n", + " design_resampled, design_classes_resampled = over.fit_resample(X_train.iloc[:, :-1], X_train.iloc[:, -1])\n", + " target_resampled, target_classes_resampled = over.fit_resample(y_train.iloc[:, :-1], y_train.iloc[:, -1])\n", + " \n", + "elif sampling_strategy == 'over/under':\n", + " pass\n", + "elif sampling_strategy == 'none':\n", + " pass\n", + "\n", + "if(sampling_strategy != 'none'):\n", + " X_train = pd.concat([design_resampled, design_classes_resampled], axis=1)\n", + " y_train = pd.concat([target_resampled, target_classes_resampled], axis=1)" ] }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Amount class 0: 0.9879670329670329\n", + "Amount class 1: 0.012032967032967032\n" + ] + } + ], "source": [ - "X_train = pd.concat([design_resampled, design_classes_resampled], axis=1)\n", - "y_train = pd.concat([target_resampled, target_classes_resampled], axis=1)" + "counter = Counter(X_train.iloc[:,-1])\n", + "print(\"Amount class 0:\", counter[0] / (counter[0] + counter[1]) )\n", + "print(\"Amount class 1:\", counter[1] / (counter[0] + counter[1]) )" ] }, { @@ -538,7 +611,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -572,7 +645,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -582,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -592,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -602,7 +675,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -642,7 +715,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -662,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -692,26 +765,6 @@ " return loss" ] }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(3559968, 12)" - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train.iloc[:, :-1].shape" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -721,19 +774,159 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/50\n", - "\u001b[1m6954/6954\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m91s\u001b[0m 13ms/step - loss: 0.0070 - val_loss: 0.0066\n", + "Epoch 1/50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "I0000 00:00:1736946361.112525 5608 service.cc:148] XLA service 0x7f55280081d0 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", + "I0000 00:00:1736946361.112832 5608 service.cc:156] StreamExecutor device (0): NVIDIA A2, Compute Capability 8.6\n", + "2025-01-15 14:06:01.159888: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:268] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n", + "I0000 00:00:1736946361.348701 5608 cuda_dnn.cc:529] Loaded cuDNN version 90300\n", + "2025-01-15 14:06:01.387004: W external/local_xla/xla/service/gpu/autotuning/gemm_fusion_autotuner.cc:868] Compiling 182 configs for 6 fusions on a single thread.\n", + "2025-01-15 14:06:03.621770: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163', 760 bytes spill stores, 708 bytes spill loads\n", + "\n", + "2025-01-15 14:06:10.257275: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163', 188 bytes spill stores, 188 bytes spill loads\n", + "\n", + "2025-01-15 14:06:12.491063: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170_0', 776 bytes spill stores, 724 bytes spill loads\n", + "\n", + "2025-01-15 14:06:14.767081: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 220 bytes spill stores, 220 bytes spill loads\n", + "\n", + "2025-01-15 14:06:19.678342: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 172 bytes spill stores, 384 bytes spill loads\n", + "\n", + "2025-01-15 14:06:28.467581: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 664 bytes spill stores, 636 bytes spill loads\n", + "\n", + "2025-01-15 14:06:35.654758: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 28 bytes spill stores, 28 bytes spill loads\n", + "\n", + "2025-01-15 14:06:37.946914: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 664 bytes spill stores, 636 bytes spill loads\n", + "\n", + "2025-01-15 14:06:45.130159: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 28 bytes spill stores, 28 bytes spill loads\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m 59/3520\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m9s\u001b[0m 3ms/step - loss: 0.0151 " + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "I0000 00:00:1736946413.659915 5608 device_compiler.h:188] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m3510/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 5.7823e-04" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-01-15 14:07:02.606589: W external/local_xla/xla/service/gpu/autotuning/gemm_fusion_autotuner.cc:868] Compiling 170 configs for 6 fusions on a single thread.\n", + "2025-01-15 14:07:04.595726: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163_0', 756 bytes spill stores, 444 bytes spill loads\n", + "\n", + "2025-01-15 14:07:11.174922: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163_0', 56 bytes spill stores, 68 bytes spill loads\n", + "\n", + "2025-01-15 14:07:11.599286: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163', 12 bytes spill stores, 12 bytes spill loads\n", + "\n", + "2025-01-15 14:07:12.141013: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_163', 204 bytes spill stores, 204 bytes spill loads\n", + "\n", + "2025-01-15 14:07:14.292978: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170_0', 756 bytes spill stores, 444 bytes spill loads\n", + "\n", + "2025-01-15 14:07:15.902316: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 4 bytes spill stores, 4 bytes spill loads\n", + "\n", + "2025-01-15 14:07:16.549503: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 236 bytes spill stores, 236 bytes spill loads\n", + "\n", + "2025-01-15 14:07:21.435252: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 12 bytes spill stores, 12 bytes spill loads\n", + "\n", + "2025-01-15 14:07:22.296584: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_170', 428 bytes spill stores, 704 bytes spill loads\n", + "\n", + "2025-01-15 14:07:30.646925: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 776 bytes spill stores, 792 bytes spill loads\n", + "\n", + "2025-01-15 14:07:34.111635: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 92 bytes spill stores, 92 bytes spill loads\n", + "\n", + "2025-01-15 14:07:34.831349: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 88 bytes spill stores, 88 bytes spill loads\n", + "\n", + "2025-01-15 14:07:36.594341: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 20 bytes spill stores, 28 bytes spill loads\n", + "\n", + "2025-01-15 14:07:37.378454: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 32 bytes spill stores, 56 bytes spill loads\n", + "\n", + "2025-01-15 14:07:39.469100: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_343', 52 bytes spill stores, 72 bytes spill loads\n", + "\n", + "2025-01-15 14:07:42.877171: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 776 bytes spill stores, 792 bytes spill loads\n", + "\n", + "2025-01-15 14:07:46.407965: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 92 bytes spill stores, 92 bytes spill loads\n", + "\n", + "2025-01-15 14:07:47.130611: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 88 bytes spill stores, 88 bytes spill loads\n", + "\n", + "2025-01-15 14:07:48.883431: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 20 bytes spill stores, 28 bytes spill loads\n", + "\n", + "2025-01-15 14:07:49.652582: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 32 bytes spill stores, 56 bytes spill loads\n", + "\n", + "2025-01-15 14:07:51.729864: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_345', 52 bytes spill stores, 72 bytes spill loads\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - loss: 5.7683e-04" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-01-15 14:08:00.788132: W external/local_xla/xla/service/gpu/autotuning/gemm_fusion_autotuner.cc:868] Compiling 72 configs for 3 fusions on a single thread.\n", + "2025-01-15 14:08:07.801469: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:397] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_31', 220 bytes spill stores, 220 bytes spill loads\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m140s\u001b[0m 25ms/step - loss: 5.7669e-04 - val_loss: 2.6423e-06\n", "Epoch 2/50\n", - "\u001b[1m6954/6954\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m104s\u001b[0m 15ms/step - loss: 0.0066 - val_loss: 0.0066\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 3ms/step - loss: 4.9671e-06 - val_loss: 2.3180e-06\n", "Epoch 3/50\n", - "\u001b[1m4644/6954\u001b[0m \u001b[32m━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━━━━\u001b[0m \u001b[1m35s\u001b[0m 15ms/step - loss: 0.0066" + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 3.2911e-06 - val_loss: 4.5144e-06\n", + "Epoch 4/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 2.4528e-06 - val_loss: 1.0435e-06\n", + "Epoch 5/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 1.7198e-06 - val_loss: 8.9310e-07\n", + "Epoch 6/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 1.5762e-06 - val_loss: 6.4216e-07\n", + "Epoch 7/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 1.1924e-06 - val_loss: 6.5215e-07\n", + "Epoch 8/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 1.0509e-06 - val_loss: 7.6646e-07\n", + "Epoch 9/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 9.9888e-07 - val_loss: 6.1071e-07\n", + "Epoch 10/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 1.0026e-06 - val_loss: 5.3742e-07\n", + "Epoch 11/50\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 3ms/step - loss: 8.9634e-07 - val_loss: 6.5116e-07\n", + "Epoch 12/50\n", + "\u001b[1m2968/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 9.6697e-07" ] }, { @@ -743,18 +936,12 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[118], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# measure time\u001b[39;00m\n\u001b[1;32m 2\u001b[0m start \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m----> 4\u001b[0m history \u001b[38;5;241m=\u001b[39m model_large\u001b[38;5;241m.\u001b[39mfit(X_train\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \n\u001b[1;32m 5\u001b[0m y_train\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \n\u001b[1;32m 6\u001b[0m batch_size \u001b[38;5;241m=\u001b[39m batch_size, \n\u001b[1;32m 7\u001b[0m epochs \u001b[38;5;241m=\u001b[39m epochs, \n\u001b[1;32m 8\u001b[0m validation_data \u001b[38;5;241m=\u001b[39m (X_val\u001b[38;5;241m.\u001b[39miloc[:,:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], y_val\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m])\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 11\u001b[0m end \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTraining took \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m seconds\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(end \u001b[38;5;241m-\u001b[39m start))\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback. .error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/keras/src/backend/tensorflow/trainer.py:320\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator\u001b[38;5;241m.\u001b[39menumerate_epoch():\n\u001b[1;32m 319\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m--> 320\u001b[0m logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrain_function(iterator)\n\u001b[1;32m 321\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_end(step, logs)\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstop_training:\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback. .error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:833\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 830\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 832\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 833\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds)\n\u001b[1;32m 835\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 836\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:878\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 876\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 878\u001b[0m results \u001b[38;5;241m=\u001b[39m tracing_compilation\u001b[38;5;241m.\u001b[39mcall_function(\n\u001b[1;32m 879\u001b[0m args, kwds, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_config\n\u001b[1;32m 880\u001b[0m )\n\u001b[1;32m 881\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables:\n\u001b[1;32m 882\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 883\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:139\u001b[0m, in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m bound_args \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mbind(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 138\u001b[0m flat_inputs \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39munpack_inputs(bound_args)\n\u001b[0;32m--> 139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m function\u001b[38;5;241m.\u001b[39m_call_flat( \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[1;32m 140\u001b[0m flat_inputs, captured_inputs\u001b[38;5;241m=\u001b[39mfunction\u001b[38;5;241m.\u001b[39mcaptured_inputs\n\u001b[1;32m 141\u001b[0m )\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py:1322\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1318\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1319\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1320\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_inference_function\u001b[38;5;241m.\u001b[39mcall_preflattened(args)\n\u001b[1;32m 1323\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1324\u001b[0m args,\n\u001b[1;32m 1325\u001b[0m possible_gradient_type,\n\u001b[1;32m 1326\u001b[0m executing_eagerly)\n\u001b[1;32m 1327\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:216\u001b[0m, in \u001b[0;36mAtomicFunction.call_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall_preflattened\u001b[39m(\u001b[38;5;28mself\u001b[39m, args: Sequence[core\u001b[38;5;241m.\u001b[39mTensor]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 215\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m flat_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcall_flat(\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mpack_output(flat_outputs)\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:251\u001b[0m, in \u001b[0;36mAtomicFunction.call_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m record\u001b[38;5;241m.\u001b[39mstop_recording():\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mexecuting_eagerly():\n\u001b[0;32m--> 251\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mcall_function(\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname,\n\u001b[1;32m 253\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 254\u001b[0m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mflat_outputs),\n\u001b[1;32m 255\u001b[0m )\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 257\u001b[0m outputs \u001b[38;5;241m=\u001b[39m make_call_op_in_graph(\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mfunction_call_options\u001b[38;5;241m.\u001b[39mas_attrs(),\n\u001b[1;32m 261\u001b[0m )\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/context.py:1552\u001b[0m, in \u001b[0;36mContext.call_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1550\u001b[0m cancellation_context \u001b[38;5;241m=\u001b[39m cancellation\u001b[38;5;241m.\u001b[39mcontext()\n\u001b[1;32m 1551\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1552\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute(\n\u001b[1;32m 1553\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1554\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[1;32m 1555\u001b[0m inputs\u001b[38;5;241m=\u001b[39mtensor_inputs,\n\u001b[1;32m 1556\u001b[0m attrs\u001b[38;5;241m=\u001b[39mattrs,\n\u001b[1;32m 1557\u001b[0m ctx\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1558\u001b[0m )\n\u001b[1;32m 1559\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1560\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 1561\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1562\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1566\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_context,\n\u001b[1;32m 1567\u001b[0m )\n", - "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/execute.py:53\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 52\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 53\u001b[0m tensors \u001b[38;5;241m=\u001b[39m pywrap_tfe\u001b[38;5;241m.\u001b[39mTFE_Py_Execute(ctx\u001b[38;5;241m.\u001b[39m_handle, device_name, op_name,\n\u001b[1;32m 54\u001b[0m inputs, attrs, num_outputs)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "Cell \u001b[0;32mIn[21], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# measure time\u001b[39;00m\n\u001b[1;32m 2\u001b[0m start \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m----> 4\u001b[0m history \u001b[38;5;241m=\u001b[39m model_large\u001b[38;5;241m.\u001b[39mfit(X_train\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \n\u001b[1;32m 5\u001b[0m y_train\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \n\u001b[1;32m 6\u001b[0m batch_size \u001b[38;5;241m=\u001b[39m batch_size, \n\u001b[1;32m 7\u001b[0m epochs \u001b[38;5;241m=\u001b[39m epochs, \n\u001b[1;32m 8\u001b[0m validation_data \u001b[38;5;241m=\u001b[39m (X_val\u001b[38;5;241m.\u001b[39miloc[:,:\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], y_val\u001b[38;5;241m.\u001b[39miloc[:, :\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m])\n\u001b[1;32m 9\u001b[0m )\n\u001b[1;32m 11\u001b[0m end \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTraining took \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m seconds\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(end \u001b[38;5;241m-\u001b[39m start))\n", + "File \u001b[0;32m~/.conda/envs/ai/lib/python3.11/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback. .error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/.conda/envs/ai/lib/python3.11/site-packages/keras/src/backend/tensorflow/trainer.py:368\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator:\n\u001b[1;32m 367\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m--> 368\u001b[0m logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrain_function(iterator)\n\u001b[1;32m 369\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_end(step, logs)\n\u001b[1;32m 370\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstop_training:\n", + "File \u001b[0;32m~/.conda/envs/ai/lib/python3.11/site-packages/keras/src/backend/tensorflow/trainer.py:217\u001b[0m, in \u001b[0;36mTensorFlowTrainer._make_function. .function\u001b[0;34m(iterator)\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m 214\u001b[0m iterator, (tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mIterator, tf\u001b[38;5;241m.\u001b[39mdistribute\u001b[38;5;241m.\u001b[39mDistributedIterator)\n\u001b[1;32m 215\u001b[0m ):\n\u001b[1;32m 216\u001b[0m opt_outputs \u001b[38;5;241m=\u001b[39m multi_step_on_iterator(iterator)\n\u001b[0;32m--> 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m opt_outputs\u001b[38;5;241m.\u001b[39mhas_value():\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m opt_outputs\u001b[38;5;241m.\u001b[39mget_value()\n", + "File \u001b[0;32m~/.conda/envs/ai/lib/python3.11/site-packages/tensorflow/python/data/ops/optional_ops.py:176\u001b[0m, in \u001b[0;36m_OptionalImpl.has_value\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mhas_value\u001b[39m(\u001b[38;5;28mself\u001b[39m, name\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 175\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ops\u001b[38;5;241m.\u001b[39mcolocate_with(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variant_tensor):\n\u001b[0;32m--> 176\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gen_optional_ops\u001b[38;5;241m.\u001b[39moptional_has_value(\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variant_tensor, name\u001b[38;5;241m=\u001b[39mname\n\u001b[1;32m 178\u001b[0m )\n", + "File \u001b[0;32m~/.conda/envs/ai/lib/python3.11/site-packages/tensorflow/python/ops/gen_optional_ops.py:172\u001b[0m, in \u001b[0;36moptional_has_value\u001b[0;34m(optional, name)\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m tld\u001b[38;5;241m.\u001b[39mis_eager:\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 172\u001b[0m _result \u001b[38;5;241m=\u001b[39m pywrap_tfe\u001b[38;5;241m.\u001b[39mTFE_Py_FastPathExecute(\n\u001b[1;32m 173\u001b[0m _ctx, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOptionalHasValue\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, optional)\n\u001b[1;32m 174\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _result\n\u001b[1;32m 175\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m _core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } @@ -1212,7 +1399,7 @@ ], "metadata": { "kernelspec": { - "display_name": "training", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" },