From f89228de067ac917453a8e0ec4557c64dcb91f5b Mon Sep 17 00:00:00 2001 From: Hannes Signer Date: Tue, 14 Jan 2025 17:48:41 +0100 Subject: [PATCH] add kmeans clustering --- POET_Training.ipynb | 586 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 506 insertions(+), 80 deletions(-) diff --git a/POET_Training.ipynb b/POET_Training.ipynb index 6d6dd9d..9bbcbb7 100644 --- a/POET_Training.ipynb +++ b/POET_Training.ipynb @@ -27,14 +27,23 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-01-14 17:26:34.798886: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2025-01-14 17:26:34.825591: 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: SSE4.1 SSE4.2 AVX AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Running Keras in version 3.8.0\n" + "Running Keras in version 3.6.0\n" ] } ], @@ -47,7 +56,8 @@ "import pandas as pd\n", "import time\n", "import sklearn.model_selection as sk\n", - "import matplotlib.pyplot as plt" + "import matplotlib.pyplot as plt\n", + "from sklearn.cluster import KMeans" ] }, { @@ -59,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -92,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -200,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -224,7 +234,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -242,7 +252,7 @@ " \"S_6_\" : np.log1p,\n", " \"Sr\" : np.log1p,\n", " \"Barite\" : np.log1p,\n", - " \"Celestite\" : np.log1p\n", + " \"Celestite\" : np.log1p,\n", "}\n", "\n", "func_dict_out = {\n", @@ -257,7 +267,7 @@ " \"S_6_\" : np.expm1,\n", " \"Sr\" : np.expm1,\n", " \"Barite\" : np.expm1,\n", - " \"Celestite\" : np.expm1\n", + " \"Celestite\" : np.expm1,\n", "}\n" ] }, @@ -270,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -285,6 +295,368 @@ "data_file.close()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classify each cell with kmeans" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "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", + " return fit_method(estimator, *args, **kwargs)\n" + ] + } + ], + "source": [ + "# widget with slider for the index\n", + "\n", + "class_label = np.array([])\n", + "i = 1000\n", + "for i in range(0,1001):\n", + " field = np.array(df_design['Barite'][(i*2500):(i*2500+2500)]).reshape(50,50)\n", + " kmeans = KMeans(n_clusters=2, random_state=0).fit(field.reshape(-1,1))\n", + " class_label = np.append(class_label.astype(int), kmeans.labels_)\n", + "\n", + "\n", + "class_label = pd.DataFrame(class_label, columns = [\"Class\"])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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J8c6nRzrdKyv2wF9yRsTAEgjQgCkGfMRqlar8eijj0a1Ws2eyphmnU6OdTo51unkWKfTN+bemADA+WPM74QAOHeJEABpRAiANCIEQJoxH6GnnnoqZsyYERdeeGHMnj07/vSnP2VPKdXWrVvjtttui+bm5qhUKvHSSy8NO19KibVr10Zzc3NMmjQpFi5cGHv27MmZbJKOjo647rrroq6uLi677LK444474r333ht2jXWK2LRpU8yaNav2Qct58+bFq6++WjtvjY6vo6MjKpVKtLW11cas1akb0xH6/e9/H21tbfHII4/Ezp0744YbbojFixfH+++/nz21NAcPHoxrrrkmNm7ceNzz69evjw0bNsTGjRuju7s7mpqaYtGiRbXv5DsfdHV1xfLly+Ott96Kzs7OOHLkSLS2tsbBgwdr11iniGnTpsW6deti+/btsX379rjpppvi9ttvrz15WqNjdXd3x9NPPx2zZs0aNm6tTkMZw374wx+W++67b9jY9773vfLQQw8lzWhsiYjy4osv1m5//vnnpampqaxbt6429umnn5aGhobyq1/9KmGGY0NfX1+JiNLV1VVKsU4ncskll5Rf//rX1ug4BgcHS0tLS+ns7CwLFiwoK1euLKX483S6xuxO6PDhw7Fjx45obW0dNt7a2hrbtm1LmtXYtnfv3ujt7R22ZtVqNRYsWHBer1l/f39EREyZMiUirNPxHD16NDZv3hwHDx6MefPmWaPjWL58edx6661xyy23DBu3VqdnzH2B6Zc+/PDDOHr0aDQ2Ng4bb2xsjN7e3qRZjW1frsvx1mzfvn0ZU0pXSolVq1bF9ddfHzNnzowI6/RVu3fvjnnz5sWnn34aF198cbz44otx9dVX1548rdEXNm/eHG+//XZ0d3cfc86fp9MzZiP0pUqlMux2KeWYMYazZv+0YsWKeOedd+LPf/7zMeesU8RVV10Vu3btio8++ij+8Ic/xNKlS6Orq6t23hpF9PT0xMqVK2PLli1x4YUX/tvrrNWpGbO/jrv00kvjggsuOGbX09fXd8z/cfCFpqamiAhr9r8eeOCBeOWVV+KNN94Y9teDWKd/mjhxYlx55ZUxZ86c6OjoiGuuuSaefPJJa/QVO3bsiL6+vpg9e3aMHz8+xo8fH11dXfGLX/wixo8fX1sPa3VqxmyEJk6cGLNnz47Ozs5h452dnTF//vykWY1tM2bMiKampmFrdvjw4ejq6jqv1qyUEitWrIgXXnghXn/99ZgxY8aw89bp3yulxNDQkDX6iptvvjl2794du3btqh1z5syJu+66K3bt2hVXXHGFtTodee+J+HqbN28uEyZMKL/5zW/Ku+++W9ra2spFF11U/vrXv2ZPLc3g4GDZuXNn2blzZ4mIsmHDhrJz586yb9++Ukop69atKw0NDeWFF14ou3fvLj/5yU/K1KlTy8DAQPLMvzn3339/aWhoKG+++WbZv39/7fjkk09q11inUtasWVO2bt1a9u7dW955553y8MMPl3HjxpUtW7aUUqzRiXz13XGlWKvTMaYjVEopv/zlL8vll19eJk6cWK699tra22zPV2+88UaJiGOOpUuXllK+eLvoo48+Wpqamkq1Wi033nhj2b17d+6kv2HHW5+IKM8++2ztGutUyj333FP7b+s73/lOufnmm2sBKsUanci/RshanTp/lQMAacbsa0IAnPtECIA0IgRAGhECII0IAZBGhABII0IApBEhANKIEABpRAiANCIEQBoRAiDN/wf760AGi+dbEwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = 1000\n", + "plt.imshow(class_label[(i*2500):(i*2500+2500)].reshape(50,50)) " + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Class column already exists\n" + ] + } + ], + "source": [ + "if(\"Class\" in df_design.columns):\n", + " print(\"Class column already exists\")\n", + "else:\n", + " df_design = pd.concat([df_design, class_label], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
HOChargeH_0_O_0_BaClS_2_S_6_SrBariteCelestiteClass
0111.01243455.508192-7.779554e-092.697041e-262.210590e-152.041069e-024.082138e-020.000000e+000.0004940.0004940.0011.0000000
1111.01243455.508427-4.736083e-091.446346e-262.473481e-151.094567e-022.189133e-020.000000e+000.0005530.0005530.0011.0000000
2111.01243455.508691-1.311169e-093.889826e-282.769320e-152.943745e-045.887491e-040.000000e+000.0006190.0006190.0011.0000000
3111.01243455.508698-1.220023e-091.442658e-292.777193e-151.091776e-052.183551e-050.000000e+000.0006200.0006200.0011.0000000
4111.01243455.508699-1.216643e-095.350528e-312.777485e-154.049176e-078.098352e-070.000000e+000.0006200.0006200.0011.0000000
..........................................
2502495111.01243455.5074883.573728e-095.424062e-1451.375204e-109.953520e-072.266555e-035.509534e-1490.0003180.0014500.0011.0000140
2502496111.01243455.5075013.494007e-092.011675e-1461.377139e-109.817216e-072.217997e-032.043375e-1500.0003210.0014290.0011.0000100
2502497111.01243455.5075123.429764e-097.460897e-1481.377819e-109.706451e-072.179066e-037.578467e-1520.0003240.0014120.0011.0000060
2502498111.01243455.5075203.381745e-092.767237e-1491.371144e-109.621074e-072.149820e-032.810844e-1530.0003260.0014000.0011.0000040
2502499111.01243455.5075253.348864e-095.321610e-1511.376026e-109.564401e-072.129912e-035.405468e-1550.0003270.0013910.0011.0000010
\n", + "

2502500 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " H O Charge H_0_ O_0_ \\\n", + "0 111.012434 55.508192 -7.779554e-09 2.697041e-26 2.210590e-15 \n", + "1 111.012434 55.508427 -4.736083e-09 1.446346e-26 2.473481e-15 \n", + "2 111.012434 55.508691 -1.311169e-09 3.889826e-28 2.769320e-15 \n", + "3 111.012434 55.508698 -1.220023e-09 1.442658e-29 2.777193e-15 \n", + "4 111.012434 55.508699 -1.216643e-09 5.350528e-31 2.777485e-15 \n", + "... ... ... ... ... ... \n", + "2502495 111.012434 55.507488 3.573728e-09 5.424062e-145 1.375204e-10 \n", + "2502496 111.012434 55.507501 3.494007e-09 2.011675e-146 1.377139e-10 \n", + "2502497 111.012434 55.507512 3.429764e-09 7.460897e-148 1.377819e-10 \n", + "2502498 111.012434 55.507520 3.381745e-09 2.767237e-149 1.371144e-10 \n", + "2502499 111.012434 55.507525 3.348864e-09 5.321610e-151 1.376026e-10 \n", + "\n", + " Ba Cl S_2_ S_6_ Sr \\\n", + "0 2.041069e-02 4.082138e-02 0.000000e+00 0.000494 0.000494 \n", + "1 1.094567e-02 2.189133e-02 0.000000e+00 0.000553 0.000553 \n", + "2 2.943745e-04 5.887491e-04 0.000000e+00 0.000619 0.000619 \n", + "3 1.091776e-05 2.183551e-05 0.000000e+00 0.000620 0.000620 \n", + "4 4.049176e-07 8.098352e-07 0.000000e+00 0.000620 0.000620 \n", + "... ... ... ... ... ... \n", + "2502495 9.953520e-07 2.266555e-03 5.509534e-149 0.000318 0.001450 \n", + "2502496 9.817216e-07 2.217997e-03 2.043375e-150 0.000321 0.001429 \n", + "2502497 9.706451e-07 2.179066e-03 7.578467e-152 0.000324 0.001412 \n", + "2502498 9.621074e-07 2.149820e-03 2.810844e-153 0.000326 0.001400 \n", + "2502499 9.564401e-07 2.129912e-03 5.405468e-155 0.000327 0.001391 \n", + "\n", + " Barite Celestite Class \n", + "0 0.001 1.000000 0 \n", + "1 0.001 1.000000 0 \n", + "2 0.001 1.000000 0 \n", + "3 0.001 1.000000 0 \n", + "4 0.001 1.000000 0 \n", + "... ... ... ... \n", + "2502495 0.001 1.000014 0 \n", + "2502496 0.001 1.000010 0 \n", + "2502497 0.001 1.000006 0 \n", + "2502498 0.001 1.000004 0 \n", + "2502499 0.001 1.000001 0 \n", + "\n", + "[2502500 rows x 13 columns]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_design" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -294,7 +666,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -304,8 +676,9 @@ " df_result = df_result.copy()\n", " \n", " for key in df_design.keys():\n", - " df_design[key] = np.vectorize(func_dict[key])(df_design[key])\n", - " df_result[key] = np.vectorize(func_dict[key])(df_result[key])\n", + " if key != \"Class\":\n", + " df_design[key] = np.vectorize(func_dict[key])(df_design[key])\n", + " df_result[key] = np.vectorize(func_dict[key])(df_result[key])\n", " \n", " return df_result, df_design\n", "\n", @@ -331,22 +704,24 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "def preprocess(data, func_dict, data_min, data_max):\n", " data = data.copy()\n", " for key in data.keys():\n", - " data[key] = (data[key] - data_min[key]) / (data_max[key] - data_min[key])\n", + " if key != \"Class\":\n", + " data[key] = (data[key] - data_min[key]) / (data_max[key] - data_min[key])\n", "\n", " return data\n", "\n", "def postprocess(data, func_dict, data_min, data_max):\n", " data = data.copy()\n", " for key in data.keys():\n", - " data[key] = data[key] * (data_max[key] - data_min[key]) + data_min[key]\n", - " data[key] = np.vectorize(func_dict[key])(data[key])\n", + " if key != \"Class\":\n", + " data[key] = data[key] * (data_max[key] - data_min[key]) + data_min[key]\n", + " data[key] = np.vectorize(func_dict[key])(data[key])\n", " return data" ] }, @@ -359,7 +734,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ @@ -376,7 +751,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -384,6 +759,29 @@ "X_train, X_val, y_train, y_val = sk.train_test_split(X_train, y_train, test_size = 0.1)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Custom Loss function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def custom_loss_H20(df_design_log, df_result_log, data_min_log, data_max_log, func_dict_out, postprocess):\n", + " df_result = postprocess(df_result_log, func_dict_out, data_min_log, data_max_log) \n", + " return keras.losses.Huber + np.sum(((df_result['H'] / df_result['O']) - 2)**2)\n", + "\n", + "def loss_wrapper(data_min_log, data_max_log, func_dict_out, postprocess):\n", + " def loss(df_design_log, df_result_log):\n", + " return custom_loss_H20(df_design_log, df_result_log, data_min_log, data_max_log, func_dict_out, postprocess)\n", + " return loss" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -393,7 +791,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -401,106 +799,106 @@ "output_type": "stream", "text": [ "Epoch 1/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 831us/step - loss: 0.0016 - val_loss: 8.9642e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 0.0015 - val_loss: 1.2993e-06\n", "Epoch 2/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 777us/step - loss: 1.2063e-06 - val_loss: 9.3257e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.3182e-06 - val_loss: 1.1714e-06\n", "Epoch 3/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 808us/step - loss: 1.3414e-06 - val_loss: 7.4446e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.4322e-06 - val_loss: 1.4424e-06\n", "Epoch 4/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 994us/step - loss: 9.5866e-07 - val_loss: 6.6027e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.1811e-06 - val_loss: 1.1027e-06\n", "Epoch 5/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 957us/step - loss: 1.0071e-06 - val_loss: 6.1673e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.0509e-06 - val_loss: 1.1202e-06\n", "Epoch 6/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 938us/step - loss: 8.1617e-07 - val_loss: 6.3258e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.9101e-07 - val_loss: 1.0344e-06\n", "Epoch 7/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 945us/step - loss: 7.0918e-07 - val_loss: 6.3168e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 8.5978e-07 - val_loss: 1.0202e-06\n", "Epoch 8/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 817us/step - loss: 7.2066e-07 - val_loss: 5.9542e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.6363e-07 - val_loss: 1.5508e-06\n", "Epoch 9/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 830us/step - loss: 5.9725e-07 - val_loss: 5.8001e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 8.2612e-07 - val_loss: 1.0281e-06\n", "Epoch 10/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 920us/step - loss: 7.0796e-07 - val_loss: 6.1479e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.8237e-07 - val_loss: 9.6918e-07\n", "Epoch 11/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 1ms/step - loss: 6.1275e-07 - val_loss: 5.6376e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.8727e-07 - val_loss: 9.8902e-07\n", "Epoch 12/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 869us/step - loss: 5.5536e-07 - val_loss: 5.7461e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.2731e-07 - val_loss: 9.4628e-07\n", "Epoch 13/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 809us/step - loss: 6.4857e-07 - val_loss: 5.9354e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 6.2018e-07 - val_loss: 1.0144e-06\n", "Epoch 14/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 819us/step - loss: 6.9492e-07 - val_loss: 6.1578e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.0086e-07 - val_loss: 9.9860e-07\n", "Epoch 15/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 847us/step - loss: 6.0041e-07 - val_loss: 6.6684e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.6483e-07 - val_loss: 9.5001e-07\n", "Epoch 16/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 908us/step - loss: 6.9271e-07 - val_loss: 5.5564e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.8847e-07 - val_loss: 9.4421e-07\n", "Epoch 17/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 854us/step - loss: 7.0737e-07 - val_loss: 5.6945e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.6030e-07 - val_loss: 9.3255e-07\n", "Epoch 18/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 835us/step - loss: 7.5155e-07 - val_loss: 5.5309e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.4765e-07 - val_loss: 9.2782e-07\n", "Epoch 19/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 852us/step - loss: 7.4322e-07 - val_loss: 5.5036e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 7.0107e-07 - val_loss: 9.2918e-07\n", "Epoch 20/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 834us/step - loss: 5.8944e-07 - val_loss: 5.6052e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 5.7916e-07 - val_loss: 9.3070e-07\n", "Epoch 21/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 814us/step - loss: 6.7448e-07 - val_loss: 5.4524e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.1965e-07 - val_loss: 9.3583e-07\n", "Epoch 22/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 811us/step - loss: 5.7292e-07 - val_loss: 5.9770e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.1729e-07 - val_loss: 9.2800e-07\n", "Epoch 23/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 834us/step - loss: 5.7507e-07 - val_loss: 5.4916e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 5.8376e-07 - val_loss: 9.2606e-07\n", "Epoch 24/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 799us/step - loss: 6.3452e-07 - val_loss: 5.4885e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.1949e-07 - val_loss: 9.2550e-07\n", "Epoch 25/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 808us/step - loss: 5.9518e-07 - val_loss: 5.4678e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.0228e-07 - val_loss: 9.2386e-07\n", "Epoch 26/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 822us/step - loss: 6.6424e-07 - val_loss: 5.4674e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.4762e-07 - val_loss: 9.2222e-07\n", "Epoch 27/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 830us/step - loss: 5.9008e-07 - val_loss: 5.4434e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.3545e-07 - val_loss: 9.2336e-07\n", "Epoch 28/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 801us/step - loss: 5.4859e-07 - val_loss: 5.4596e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.1678e-07 - val_loss: 9.2510e-07\n", "Epoch 29/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 805us/step - loss: 4.9844e-07 - val_loss: 5.4456e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.2552e-07 - val_loss: 9.2267e-07\n", "Epoch 30/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 815us/step - loss: 6.4763e-07 - val_loss: 5.4440e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.7044e-07 - val_loss: 9.2244e-07\n", "Epoch 31/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 838us/step - loss: 7.3888e-07 - val_loss: 5.4584e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.4412e-07 - val_loss: 9.2193e-07\n", "Epoch 32/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 862us/step - loss: 5.2331e-07 - val_loss: 5.4407e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.9198e-07 - val_loss: 9.2181e-07\n", "Epoch 33/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 856us/step - loss: 6.9340e-07 - val_loss: 5.4382e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 8.8825e-07 - val_loss: 9.2173e-07\n", "Epoch 34/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 857us/step - loss: 5.5593e-07 - val_loss: 5.4424e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.1502e-07 - val_loss: 9.2309e-07\n", "Epoch 35/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 900us/step - loss: 6.2465e-07 - val_loss: 5.4352e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.5551e-07 - val_loss: 9.2157e-07\n", "Epoch 36/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 866us/step - loss: 6.0392e-07 - val_loss: 5.4369e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.3050e-07 - val_loss: 9.2172e-07\n", "Epoch 37/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 834us/step - loss: 6.3388e-07 - val_loss: 5.4619e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.8292e-07 - val_loss: 9.2127e-07\n", "Epoch 38/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 813us/step - loss: 5.6506e-07 - val_loss: 5.4372e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 5.7185e-07 - val_loss: 9.2111e-07\n", "Epoch 39/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 813us/step - loss: 6.9649e-07 - val_loss: 5.4339e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.1807e-07 - val_loss: 9.2119e-07\n", "Epoch 40/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 812us/step - loss: 5.0897e-07 - val_loss: 5.4338e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 5.7785e-07 - val_loss: 9.2112e-07\n", "Epoch 41/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 804us/step - loss: 6.1986e-07 - val_loss: 5.4396e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.6563e-07 - val_loss: 9.2108e-07\n", "Epoch 42/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 825us/step - loss: 5.5556e-07 - val_loss: 5.4339e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.1370e-07 - val_loss: 9.2109e-07\n", "Epoch 43/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 817us/step - loss: 5.9327e-07 - val_loss: 5.4372e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.2470e-07 - val_loss: 9.2105e-07\n", "Epoch 44/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 821us/step - loss: 6.8013e-07 - val_loss: 5.4331e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 7.2408e-07 - val_loss: 9.2102e-07\n", "Epoch 45/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 810us/step - loss: 5.3385e-07 - val_loss: 5.4331e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 6.6530e-07 - val_loss: 9.2098e-07\n", "Epoch 46/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 817us/step - loss: 5.8341e-07 - val_loss: 5.4332e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.7502e-07 - val_loss: 9.2098e-07\n", "Epoch 47/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 815us/step - loss: 5.8649e-07 - val_loss: 5.4331e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.3829e-07 - val_loss: 9.2094e-07\n", "Epoch 48/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 805us/step - loss: 5.4243e-07 - val_loss: 5.4334e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 5.8739e-07 - val_loss: 9.2096e-07\n", "Epoch 49/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 814us/step - loss: 6.0889e-07 - val_loss: 5.4330e-07\n", + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 7.0502e-07 - val_loss: 9.2095e-07\n", "Epoch 50/50\n", - "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 804us/step - loss: 5.9065e-07 - val_loss: 5.4327e-07\n", - "Training took 150.442538022995 seconds\n" + "\u001b[1m3520/3520\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 6.5994e-07 - val_loss: 9.2094e-07\n", + "Training took 317.1207675933838 seconds\n" ] } ], @@ -522,12 +920,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { - "image/png": "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1rp16/weezweVVRU6IUXXtDs2bNDNjCElm9Gy0PQAgDAKkEHrZEjRza7Nnr0aF122WVas2aN7rzzzpAMDKHFh0oDAGC9kO3R6tu3rzZu3Biq7hBibjbDAwBguZAErePHj+tXv/qVunXrForuYAJXdLQkghYAAFYKeumwc+fOfpvhDcPQ4cOH1aFDB7344oshHRxCh6VDAACsF3TQeuqpp/yCVlRUlC644AL17duXzzpsx7xBq7HJUGOToeio1t85CgAAQiPooHXHHXeYMAyYzRu0pFPLh+e5om0cDQAAkSHgoPX+++8H1O6KK65o82BgHu85WhJBCwAAqwQctL797W/L4XDIMAxJ8i0feh97r3FgafvkjP5iqbC+sVGS077BAAAQIQIOWpWVlb4/G4ahjIwMFRUVqXv37qYMDKHlcDjkiolSw8km3nkIAIBFAg5apwcqh8Ohbt26EbTOIe5oghYAAFbiQ6UjCEc8AABgLYJWBHFxOjwAAJb6SkHry+dpof3jY3gAALBWwHu0evfu7Resjh8/rhtvvFEul8uvXXl5eehGh5BiRgsAAGsFHLRuvvlmv8cjR44M9VhgMm/QqmePFgAAlgg4aBUWFpo5DljAe2gpM1oAAFiDzfARhKVDAACsFVDQGjZsmDZv3nzWdocPH9a8efO0cOHCrzwwhJ4r5tTH7hC0AACwRkBLh//93/+tMWPGKC4uTjfddJOysrKUkpKi2NhYff755/rwww+1adMmFRUV6YYbbtDPf/5zs8eNNvAtHbJHCwAASwQUtO68807l5ubqD3/4g9asWaPnnntOhw4dknTqiIf09HQNHTpUW7du1aWXXmrmePEVcLwDAADWCngzvMvl0vjx4zV+/HhJUm1trY4fP66uXbvK6eQDis8F7NECAMBaAQet08XHxys+Pj6UY4HJWDoEAMBavOswgvjO0WJGCwAASxC0IghLhwAAWIugFUEIWgAAWIugFUG+2KPVaPNIAACIDEEHrU8++USffvqp7/GWLVs0efJkLV26NKQDQ+gxowUAgLWCDlrjx4/Xm2++KUmqrq7WkCFDtGXLFj3yyCOaM2dOyAeI0OEcLQAArBV00Prggw901VVXSZL+93//VxkZGdq8ebN+97vfafny5aEeH0LIN6PF8Q4AAFgi6KDl8XjkdrslSRs3btRNN90kSerVq5eqqqpC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0KxZs5SSkqLzzjtPgwcP1s6dO+0ZbBiYO3euvvOd7yguLk4XXnihbr75Zu3atcuvDTUPncWLF+uKK67wHdqYnZ2tV1991fc8tTbP3Llz5XA4NHnyZN816h1as2bNksPh8PtKSkryPW9WvQlaYWjNmjWaPHmyZsyYoYqKCg0YMEDDhw/X3r177R7aOe/o0aO68sortWDBghaf/9nPfqYnn3xSCxYs0LvvvqukpCQNGTLE95mWCE5paanuvfdevf322yopKdHJkyeVk5Ojo0eP+tpQ89Dp1q2bnnjiCb333nt67733dO2112rkyJG+XzbU2hzvvvuuli5dqiuuuMLvOvUOvcsuu0xVVVW+rx07dvieM63eBsLOVVddZeTn5/td69WrlzFt2jSbRhSeJBnr1q3zPW5qajKSkpKMJ554wnftxIkTRnx8vLFkyRIbRhh+Dhw4YEgySktLDcOg5lbo3Lmz8etf/5pam+Tw4cNGz549jZKSEmPQoEHGpEmTDMPg77YZCgsLjSuvvLLF58ysNzNaYaahoUFbt25VTk6O3/WcnBxt3rzZplFFhsrKSlVXV/vV3u12a9CgQdQ+RGprayVJXbp0kUTNzdTY2KjVq1fr6NGjys7OptYmuffee3X99dfru9/9rt916m2O3bt3KyUlRWlpaRo3bpz+8Y9/SDK33nyodJipqalRY2OjEhMT/a4nJiaqurraplFFBm99W6r9nj177BhSWDEMQwUFBbrmmmuUkZEhiZqbYceOHcrOztaJEyf0ta99TevWrVN6errvlw21Dp3Vq1ervLxc7777brPn+Lsden379tWKFSv0zW9+U//617/005/+VP369dPOnTtNrTdBK0w5HA6/x4ZhNLsGc1B7c9x33316//33tWnTpmbPUfPQufTSS7Vt2zYdOnRIa9eu1YQJE1RaWup7nlqHxieffKJJkyapuLhYsbGxrbaj3qEzfPhw358vv/xyZWdnq0ePHnrhhRd09dVXSzKn3iwdhpmEhARFR0c3m706cOBAs6SO0PK+e4Xah97999+vDRs26M0331S3bt1816l56LlcLn3jG99QVlaW5s6dqyuvvFJPP/00tQ6xrVu36sCBA8rMzFRMTIxiYmJUWlqqZ555RjExMb6aUm/zdOzYUZdffrl2795t6t9vglaYcblcyszMVElJid/1kpIS9evXz6ZRRYa0tDQlJSX51b6hoUGlpaXUvo0Mw9B9992nl156SX/+85+Vlpbm9zw1N59hGKqvr6fWIXbddddpx44d2rZtm+8rKytLt912m7Zt26ZLLrmEepusvr5eH330kZKTk839+/2VttKjXVq9erXhdDqNZcuWGR9++KExefJko2PHjsY///lPu4d2zjt8+LBRUVFhVFRUGJKMJ5980qioqDD27NljGIZhPPHEE0Z8fLzx0ksvGTt27DC+973vGcnJyUZdXZ3NIz833XPPPUZ8fLzxl7/8xaiqqvJ9HTt2zNeGmofO9OnTjb/+9a9GZWWl8f777xuPPPKIERUVZRQXFxuGQa3N9uV3HRoG9Q61qVOnGn/5y1+Mf/zjH8bbb79t3HDDDUZcXJzvd6NZ9SZohamFCxca3bt3N1wul9GnTx/f2+Hx1bz55puGpGZfEyZMMAzj1FuECwsLjaSkJMPtdhsDBw40duzYYe+gz2Et1VqS8fzzz/vaUPPQ+eEPf+j7340LLrjAuO6663whyzCotdlOD1rUO7TGjh1rJCcnG06n00hJSTFuvfVWY+fOnb7nzaq3wzAM46vNiQEAAKAl7NECAAAwCUELAADAJAQtAAAAkxC0AAAATELQAgAAMAlBCwAAwCQELQAAAJMQtAAAAExC0AKAdsbhcGj9+vV2DwNACBC0AOBL7rjjDjkcjmZfw4YNs3toAM5BMXYPAADam2HDhun555/3u+Z2u20aDYBzGTNaAHAat9utpKQkv6/OnTtLOrWst3jxYg0fPlznnXee0tLS9Pvf/97v9Tt27NC1116r8847T127dtWPfvQjHTlyxK/Nb37zG1122WVyu91KTk7Wfffd5/d8TU2NbrnlFnXo0EE9e/bUhg0bzP2mAZiCoAUAQZo5c6ZGjRql7du36/bbb9f3vvc9ffTRR5KkY8eOadiwYercubPeffdd/f73v9fGjRv9gtTixYt177336kc/+pF27NihDRs26Bvf+IbfPWbPnq0xY8bo/fff14gRI3Tbbbfp4MGDln6fAELAAAD4TJgwwYiOjjY6duzo9zVnzhzDMAxDkpGfn+/3mr59+xr33HOPYRiGsXTpUqNz587GkSNHfM//6U9/MqKioozq6mrDMAwjJSXFmDFjRqtjkGQ8+uijvsdHjhwxHA6H8eqrr4bs+wRgDfZoAcBp/uu//kuLFy/2u9alSxffn7Ozs/2ey87O1rZt2yRJH330ka688kp17NjR93z//v3V1NSkXbt2yeFwaP/+/bruuuvOOIYrrrjC9+eOHTsqLi5OBw4caOu3BMAmBC0AOE3Hjh2bLeWdjcPhkCQZhuH7c0ttzjvvvID6czqdzV7b1NQU1JgA2I89WgAQpLfffrvZ4169ekmS0tPTtW3bNh09etT3/N/+9jdFRUXpm9/8puLi4nTxxRfrjTfesHTMAOzBjBYAnKa+vl7V1dV+12JiYpSQkCBJ+v3vf6+srCxdc801WrlypbZs2aJly5ZJkm677TYVFhZqwoQJmjVrlv7973/r/vvvV25urhITEyVJs2bNUn5+vi688EINHz5chw8f1t/+9jfdf//91n6jAExH0AKA07z22mtKTk72u3bppZfq//7v/ySdekfg6tWrNXHiRCUlJWnlypVKT0+XJHXo0EGvv/66Jk2apO985zvq0KGDRo0apSeffNLX14QJE3TixAk99dRTevDBB5WQkKDRo0db9w0CsIzDMAzD7kEAwLnC4XBo3bp1uvnmm+0eCoBzAHu0AAAATELQAgAAMAl7tAAgCOy2ABAMZrQAAABMQtACAAAwCUELAADAJAQtAAAAkxC0AAAATELQAgAAMAlBCwAAwCQELQAAAJP8f5x4ryrrUJxEAAAAAElFTkSuQmCC", + "image/png": "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evnll32vU2vzzJs3Tw6HQ1OnTvVdo96hNWfOHDkcDr9HUlKS73Wz6k3QCkNr167V1KlTNXPmTG3btk2DBg3SqFGjtH//fruHdtY7fvy4LrvsMi1atKjF13/2s5/p8ccf16JFi/TOO+8oKSlJw4cP932nJYKzadMm3XXXXXrzzTdVWlqq06dPKycnR8ePH/e1oeah07NnTz322GN699139e677+pb3/qWxowZ4/tlQ63N8c4772j58uW69NJL/a5T79C7+OKLVVlZ6Xvs3LnT95pp9TYQdq644gojPz/f71rfvn2N6dOn2zSi8CTJWL9+ve95Y2OjkZSUZDz22GO+a6dOnTLi4+ONZcuW2TDC8HPo0CFDkrFp0ybDMKi5Fbp162b8+te/ptYmOXr0qNGnTx+jtLTUGDJkiDFlyhTDMPhv2wyFhYXGZZdd1uJrZtabGa0wU19fr61btyonJ8fvek5OjrZs2WLTqCJDRUWFqqqq/Grvdrs1ZMgQah8iNTU1kqTu3btLouZmamhoUFFRkY4fP67s7GxqbZK77rpL1157ra655hq/69TbHHv37lVKSorS0tI0ceJEffjhh5LMrTdfKh1mqqur1dDQoMTERL/riYmJqqqqsmlUkcFb35Zqv2/fPjuGFFYMw1BBQYGuvvpqpaenS6LmZti5c6eys7N16tQpfeUrX9H69evVr18/3y8bah06RUVFKi8v1zvvvNPsNf7bDr2srCytWrVKX//61/V///d/+ulPf6qBAwdq165dptaboBWmHA6H33PDMJpdgzmovTnuvvtu/eMf/9DmzZubvUbNQ+cb3/iGtm/friNHjmjdunW65ZZbtGnTJt/r1Do0Dhw4oClTpqikpESxsbGttqPeoTNq1Cjfny+55BJlZ2erd+/eevbZZ3XllVdKMqfeLB2GmYSEBEVHRzebvTp06FCzpI7Q8n56hdqH3j333KMNGzbotddeU8+ePX3XqXnouVwufe1rX1NmZqbmzZunyy67TE8++SS1DrGtW7fq0KFDysjIUExMjGJiYrRp0yYtXLhQMTExvppSb/N07txZl1xyifbu3Wvqf98ErTDjcrmUkZGh0tJSv+ulpaUaOHCgTaOKDGlpaUpKSvKrfX19vTZt2kTt28kwDN199916/vnn9de//lVpaWl+r1Nz8xmGobq6OmodYsOGDdPOnTu1fft23yMzM1M333yztm/frgsvvJB6m6yurk7vv/++kpOTzf3v+0ttpUeHVFRUZDidTmPFihXG7t27jalTpxqdO3c2/v3vf9s9tLPe0aNHjW3bthnbtm0zJBmPP/64sW3bNmPfvn2GYRjGY489ZsTHxxvPP/+8sXPnTuO73/2ukZycbNTW1to88rPTnXfeacTHxxuvv/66UVlZ6XucOHHC14aah86MGTOMv/3tb0ZFRYXxj3/8w3jooYeMqKgoo6SkxDAMam22z3/q0DCod6jdd999xuuvv258+OGHxptvvmlcd911RpcuXXy/G82qN0ErTC1evNjo1auX4XK5jAEDBvg+Do8v57XXXjMkNXvccssthmE0fUS4sLDQSEpKMtxutzF48GBj586d9g76LNZSrSUZzzzzjK8NNQ+dH/7wh77/f+Pcc881hg0b5gtZhkGtzfbFoEW9Q2vChAlGcnKy4XQ6jZSUFOOmm24ydu3a5XvdrHo7DMMwvtycGAAAAFrCHi0AAACTELQAAABMQtACAAAwCUELAADAJAQtAAAAkxC0AAAATELQAgAAMAlBCwAAwCQELQDoYBwOh1544QW7hwEgBAhaAPA5t956qxwOR7PHyJEj7R4agLNQjN0DAICOZuTIkXrmmWf8rrndbptGA+BsxowWAHyB2+1WUlKS36Nbt26Smpb1li5dqlGjRqlTp05KS0vTH/7wB7/379y5U9/61rfUqVMn9ejRQz/60Y907Ngxvza/+c1vdPHFF8vtdis5OVl333233+vV1dW68cYbFRcXpz59+mjDhg3m/tAATEHQAoAgzZ49W2PHjtWOHTv0ve99T9/97nf1/vvvS5JOnDihkSNHqlu3bnrnnXf0hz/8QRs3bvQLUkuXLtVdd92lH/3oR9q5c6c2bNigr33ta359zJ07V+PHj9c//vEPjR49WjfffLMOHz5s6c8JIAQMAIDPLbfcYkRHRxudO3f2ezz88MOGYRiGJCM/P9/vPVlZWcadd95pGIZhLF++3OjWrZtx7Ngx3+t//vOfjaioKKOqqsowDMNISUkxZs6c2eoYJBmzZs3yPT927JjhcDiMl19+OWQ/JwBrsEcLAL7gf/7nf7R06VK/a927d/f9OTs72++17Oxsbd++XZL0/vvv67LLLlPnzp19r1911VVqbGzUnj175HA49PHHH2vYsGFtjuHSSy/1/blz587q0qWLDh061N4fCYBNCFoA8AWdO3dutpR3Jg6HQ5JkGIbvzy216dSpU0D3czqdzd7b2NgY1JgA2I89WgAQpDfffLPZ8759+0qS+vXrp+3bt+v48eO+1//+978rKipKX//619WlSxddcMEFevXVVy0dMwB7MKMFAF9QV1enqqoqv2sxMTFKSEiQJP3hD39QZmamrr76aq1evVpvv/22VqxYIUm6+eabVVhYqFtuuUVz5szRf/7zH91zzz3Kzc1VYmKiJGnOnDnKz8/Xeeedp1GjRuno0aP6+9//rnvuucfaHxSA6QhaAPAFr7zyipKTk/2ufeMb39A///lPSU2fCCwqKtLkyZOVlJSk1atXq1+/fpKkuLg4/eUvf9GUKVP0zW9+U3FxcRo7dqwef/xx371uueUWnTp1Sk888YTuv/9+JSQkaNy4cdb9gAAs4zAMw7B7EABwtnA4HFq/fr1uuOEGu4cC4CzAHi0AAACTELQAAABMwh4tAAgCuy0ABIMZLQAAAJMQtAAAAExC0AIAADAJQQsAAMAkBC0AAACTELQAAABMQtACAAAwCUELAADAJP8fkFI4TkCPdWEAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -539,8 +937,36 @@ "source": [ "plt.plot(history.history[\"loss\"], \"o-\", label = \"Training Loss\")\n", "plt.xlabel(\"Epoch\")\n", - "plt.ylabel(\"Loss (Hubert)\")\n", - "plt.grid('on')\n" + "# plt.yscale('log')\n", + "plt.ylabel(\"Loss (Huber)\")\n", + "plt.grid('on')\n", + "\n", + "plt.savefig(\"loss_all.png\", dpi=300)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAHACAYAAACmt7JlAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASxFJREFUeJzt3XtclGX+//H3AMMABiioHDwgHZUoQ03DctNK0lrKdjtspllZrdm2uez221xrlWqz+m6ubRZl6Zod/drZXSvpW3nIyjxQmq6dSEwhRBRQDg5w//7AmUROA9wzNwyv5+PhY5t77rnnw0fL917XdV+3zTAMQwAAAH4swOoCAAAAvI3AAwAA/B6BBwAA+D0CDwAA8HsEHgAA4PcIPAAAwO8ReAAAgN8j8AAAAL9H4AEAAH6PwAMAAPxelw48a9asUXp6uuLj42Wz2fTmm296/Tv37NmjSZMmKTo6WmFhYTrrrLO0adMmr38vAABdWZcOPIcPH9bgwYO1YMECn3zfgQMHdO6558put+udd97R9u3b9eijj6p79+4++X4AALoqGw8PrWOz2fTGG29owoQJ7mNHjhzRPffcoxdffFEHDx5UcnKyHn74YY0ePbpN33H33Xfr448/1tq1a80pGgAAeKRLj/C05MYbb9THH3+sV155RV9++aWuuuoqjRs3Tt98802brvf2229r2LBhuuqqq9S7d2+lpKTomWeeMblqAABwPEZ4jjp+hOe7777TKaecoh9//FHx8fHu8y666CINHz5cDz74YKu/IyQkRJKUkZGhq666Shs2bNCMGTP09NNP6/rrrzfl5wAAAA0FWV1AR7V582YZhqFTTz213vGqqipFR0dLkn744QclJiY2e53bb7/dvUaotrZWw4YNc4ellJQUffXVV8rKyiLwAADgRQSeJtTW1iowMFCbNm1SYGBgvfdOOOEESVKfPn20Y8eOZq/To0cP9z/HxcUpKSmp3vuDBg3Sa6+9ZlLVAACgMQSeJqSkpKimpkaFhYUaNWpUo+fY7XYNHDjQ42uee+652rlzZ71jX3/9tRISEtpVKwAAaF6XDjyHDh3St99+636dm5urnJwcRUVF6dRTT9V1112n66+/Xo8++qhSUlJUVFSkDz74QGeccYYuueSSVn/fH/7wB40cOVIPPvigrr76am3YsEELFy7UwoULzfyxAADA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l3uz7i4hPMSu6G7BkqRdjPIAANBmHo/w3H///br00kubfN/hcGj06NEaPXq0HnjgAeXm5ppSYFfXPzpM+w8fUV5xuZL7RFpdDgAAnZLHIzyusFNdXa3nnntOBQUFTZ7bs2dPnX322e2vDko4uo6HER4AANqu1XdpBQUF6bbbblNVFY878IX+0UdvTS/m1nQAANqqTbeljxgxwv2IB3gXIzwAALRfm25Lnz59ujIyMrR7924NHTpU3bp1q/f+mWeeaUpxOGYvHgIPAABt1qbAc80110iSfv/737uP2Ww2GYYhm82mmpoac6qD+h8NPPklFTpSXavgIPaKBACgtdoUeLgDy3d6neBQWHCgyo/U6McD5Tqx1wlWlwQAQKfTpsDDpoK+Y7PZ1D8qTP8tKNOuYgIPAABt0eb5keeff17nnnuu4uPjtWvXLknS/Pnz9dZbb5lWHOrwiAkAANqnTYEnKytLGRkZuuSSS3Tw4EH3mp3u3btr/vz5ZtYHsXAZAID2alPgefzxx/XMM89o1qxZCgwMdB8fNmyYtm7dalpxqMNePAAAtE+bAk9ubq5SUlIaHHc4HDp8mL+UzcZePAAAtE+bAk9iYmKjGw++8847SkpKam9NOI5rSiuvuFy1tYbF1QAA0Pm06S6tu+66S7fffrsqKytlGIY2bNigl19+WXPnztWzzz5rdo1dXnz3UAUG2FRVXavCsirFRoZYXRIAAJ1KmwLPjTfeqOrqav2///f/VF5erokTJ6pPnz567LHH9Jvf/MbsGrs8e2CA+nQPVV5xuXbtP0zgAQCgldoUeCTplltu0S233KKioiLV1taqd+/eZtaF4yREh9UFnuJyjTgx2upyAADoVNoceCSpsLBQO3fulM1mk81mU69evcyqC8dhLx4AANquTYuWS0tLNXnyZMXHx+v888/XL37xC8XHx2vSpEkqKSkxu0bomL14igk8AAC0VpsCz80336zPPvtM//nPf3Tw4EGVlJTo3//+tzZu3KhbbrnF7BohqX/U0b149nPbPwAArdWmKa3//Oc/eu+993Teeee5j1188cV65plnNG7cONOKw88Y4QEAoO3aNMITHR2tyMjIBscjIyPVo0ePdheFhlyB52C5UyUVTourAQCgc2lT4LnnnnuUkZGh/Px897GCggLddddduvfee00rDj8LCw5Sr3CHJBYuAwDQ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5x33+/TcN+bOnSubzaYZM2a4j9F7882ZM0c2m63er9jYWPf7ZvWcwGOCZcuWacaMGZo1a5a2bNmiUaNGafz48crLy7O6NL9y+PBhDR48WAsWLGj0/UceeUTz5s3TggUL9Pnnnys2NlZjx45VWVmZjyv1H6tXr9btt9+uTz/9VNnZ2aqurlZaWpoOHz7sPoe+m69v37566KGHtHHjRm3cuFEXXHCBLr/8cvd/5Om5933++edauHChzjzzzHrH6b13nH766crPz3f/2rp1q/s903repgdSoJ7hw4cb06ZNq3ds4MCBxt13321RRf5PkvHGG2+4X9fW1hqxsbHGQw895D5WWVlpREZGGk899ZQFFfqnwsJCQ5L7mXf03Xd69OhhPPvss/TcB8rKyoxTTjnFyM7ONs4//3zjzjvvNAyDP+/eMnv2bGPw4MGNvmdmzxnhaacjR45o06ZNSktLq3c8LS1N69evt6iqric3N1cFBQX1fh8cDofOP/98fh9MVFJSIkmKioqSRN99oaamRq+88ooOHz6s1NRUeu4Dt99+uy699FJddNFF9Y7Te+/55ptvFB8fr8TERP3mN7/R999/L8ncnne5Z2mZraioSDU1NYqJial3PCYmRgUFBRZV1fW4et3Y78OuXbusKMnvGIahjIwMnXfeeUpOTpZE371p69atSk1NVWVlpU444QS98cYbSkpKcv9Hnp57xyuvvKLNmzfr888/b/Aef969Y8SIEVq6dKlOPfVU/fTTT3rggQc0cuRIffXVV6b2nMBjkuOfvG4YhulPY0fL+H3wnt/97nf68ssvtW7dugbv0XfznXbaacrJydHBgwf12muvacqUKVq9erX7fXpuvt27d+vOO+/UqlWrFBIS0uR59N5c48ePd//zGWecodTUVJ100kl67rnndM4550gyp+dMabVTz549FRgY2GA0p7CwsEEihfe4VvTz++Add9xxh95++219+OGH6tu3r/s4ffee4OBgnXzyyRo2bJjmzp2rwYMH67HHHqPnXrRp0yYVFhZq6NChCgoKUlBQkFavXq1//vOfCgoKcveX3ntXt27ddMYZZ+ibb74x9c87gaedgoODNXToUGVnZ9c7np2drZEjR1pUVdeTmJio2NjYer8PR44c0erVq/l9aAfDMPS73/1Or7/+uj744AMlJibWe5+++45hGKqqqqLnXnThhRdq69atysnJcf8aNmyYrrvuOuXk5OjEE0+k9z5QVVWlHTt2KC4uztw/721YUI3jvPLKK4bdbjcWLVpkbN++3ZgxY4bRrVs344cffrC6NL9SVlZmbNmyxdiyZYshyZg3b56xZcsWY9euXYZhGMZDDz1kREZGGq+//rqxdetW49prrzXi4uKM0tJSiyvvvG677TYjMjLS+Oijj4z8/Hz3r/Lycvc59N18M2fONNasWWPk5uYaX375pfGXv/zFCAgIMFatWmUYBj33pWPv0jIMeu8Nf/zjH42PPvrI+P77741PP/3U+OUvf2mEh4e7/w41q+cEHpM88cQTRkJCghEcHGwMGTLEfdsuzPPhhx8akhr8mjJlimEYdbcvzp4924iNjTUcDofxi1/8wti6dau1RXdyjfVbkvGvf/3LfQ59N99NN93k/u9Jr169jAsvvNAddgyDnvvS8YGH3pvvmmuuMeLi4gy73W7Ex8cbv/rVr4yvvvrK/b5ZPedp6QAAwO+xhgcAAPg9Ag8AAPB7BB4AAOD3CDwAAMDvEXgAAIDfI/AAAAC/R+ABAAB+j8ADAAD8HoEHAFT3NOY333zT6jIAeAmBB4DlbrjhBtlstga/xo0bZ3VpAPxEkNUFAIAkjRs3Tv/617/qHXM4HBZVA8DfMMIDoENwOByKjY2t96tHjx6S6qabsrKyNH78eIWGhioxMVHLly+v9/mtW7fqggsuUGhoqKKjo3Xrrbfq0KFD9c5ZvHixTj/9dDkcDsXFxel3v/tdvfeLiop0xRVXKCwsTKeccorefvtt7/7QAHyGwAOgU7j33nv161//Wl988YUmTZqka6+9Vjt27JAklZeXa9y4cerRo4c+//xzLV++XO+//369QJOVlaXbb79dt956q7Zu3aq3335bJ598cr3vyMzM1NVXX60vv/xSl1xyia677joVFxf79OcE4CXmPeAdANpmypQpRmBgoNGtW7d6v+677z7DMAxDkjFt2rR6nxkxYoRx2223GYZhGAsXLjR69OhhHDp0yP3+f/7zHyMgIMAoKCgwDMMw4uPjjVmzZjVZgyTjnnvucb8+dOiQYbPZjHfeece0nxOAdVjDA6BDGDNmjLKysuodi4qKcv9zampqvfdSU1OVk5MjSdqxY4cGDx6sbt26ud8/99xzVVtbq507d8pms2nv3r268MILm63hzDPPdP9zt27dFB4ersLCwrb+SAA6EAIPgA6hW7duDaaYWmKz2SRJhmG4/7mxc0JDQz26nt1ub/DZ2traVtUEoGNiDQ+ATuHTTz9t8HrgwIGSpKSkJOXk5Ojw4cPu9z/++GMFBATo1FNPVXh4uAYMGKD/+7//82nNADoORngAdAhVVVUqKCiodywoKEg9e/aUJC1fvlzDhg3TeeedpxdffFEbNmzQokWLJEnXXXedZs+erSlTpmjOnDnat2+f7rjjDk2ePFkxMTGSpDlz5mjatGnq3bu3xo8fr7KyMn388ce64447fPuDArAEgQdAh/Duu+8qLi6u3rHTTjtN//3vfyXV3UH1yiuvaPr06YqNjdWLL76opKQkSVJYWJjee+893XnnnTr77LMVFhamX//615o3b577WlOmTFFlZaX+8Y9/6E9/+pN69uypK6+80nc/IABL2QzDMKwuAgCaY7PZ9MYbb2jChAlWlwKgk2INDwAA8HsEHgAA4PdYwwOgw2PmHUB7McIDAAD8HoEHAAD4PQIPAADwewQeAADg9wg8AADA7xF4AACA3yPwAAAAv0fgAQAAfo/AAwAA/N7/B7nuwASCdJaqAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(history.history[\"loss\"][1:], \"o-\", label = \"Training Loss\")\n", + "plt.xlabel(\"Epoch\")\n", + "# plt.yscale('log')\n", + "plt.ylabel(\"Loss (Huber)\")\n", + "plt.grid('on')\n", + "plt.savefig(\"loss_1_to_end.png\", dpi=300)\n" ] }, { @@ -552,23 +978,23 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m15641/15641\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 232us/step - loss: 1.0855e-06\n" + "\u001b[1m15641/15641\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 337us/step - loss: 7.0854e-07\n" ] }, { "data": { "text/plain": [ - "1.0228196742900764e-06" + "6.561523377968115e-07" ] }, - "execution_count": 14, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -597,7 +1023,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ai", + "display_name": "training", "language": "python", "name": "python3" },