Merge branch 'preprocessing-experiment' into 'main'

Preprocessing experiment

See merge request naaice/model-training!7
This commit is contained in:
Hannes Martin Signer 2025-03-24 18:02:55 +01:00
commit 6ddfa4ad03
2 changed files with 81 additions and 229 deletions

View File

@ -59,8 +59,8 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"2025-02-26 17:33:56.161717: 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-02-28 10:22:00.281793: 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-02-26 17:33:56.182881: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "2025-02-28 10:22:00.302002: 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" "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"
] ]
} }
@ -158,7 +158,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 4,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -190,10 +190,10 @@
"X_train_origin = X_train.copy()\n", "X_train_origin = X_train.copy()\n",
"X_train, y_train = preprocess.balancer(X_train, y_train, strategy=\"off\")\n", "X_train, y_train = preprocess.balancer(X_train, y_train, strategy=\"off\")\n",
"X_train, y_train = preprocess.class_selection(X_train, y_train, class_label=0)\n", "X_train, y_train = preprocess.class_selection(X_train, y_train, class_label=0)\n",
"preprocess.scale_fit(X_train, y_train, scaling=\"global\", type=\"standard\")\n", "# preprocess.scale_fit(X_train, y_train, scaling=\"global\", type=\"standard\")\n",
"X_train, X_test, y_train, y_test = preprocess.scale_transform(\n", "# X_train, X_test, y_train, y_test = preprocess.scale_transform(\n",
" X_train, X_test, y_train, y_test\n", "# X_train, X_test, y_train, y_test\n",
")\n", "# )\n",
"X_train, X_val, y_train, y_val = preprocess.split(X_train, y_train, ratio=0.1)" "X_train, X_val, y_train, y_val = preprocess.split(X_train, y_train, ratio=0.1)"
] ]
}, },
@ -206,7 +206,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 18, "execution_count": 5,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -257,7 +257,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 19, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -275,7 +275,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 20, "execution_count": 7,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
@ -303,16 +303,16 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 21, "execution_count": 8,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# select model architecture\n", "# select model architecture\n",
"model = model_definition(\"large\")\n", "model = model_definition(\"large_batch_normalization\")\n",
"\n", "\n",
"# define learning rate adaptation\n", "# define learning rate adaptation\n",
"lr_schedule = keras.optimizers.schedules.ExponentialDecay(\n", "lr_schedule = keras.optimizers.schedules.ExponentialDecay(\n",
" initial_learning_rate=0.001, decay_steps=2000, decay_rate=0.9, staircase=True\n", " initial_learning_rate=0.01, decay_steps=2000, decay_rate=0.9, staircase=True\n",
")\n", ")\n",
"\n", "\n",
"# hyperparameters that are determined by hyperparameter optimization\n", "# hyperparameters that are determined by hyperparameter optimization\n",
@ -321,7 +321,7 @@
"h3 = 0.5099528144902471\n", "h3 = 0.5099528144902471\n",
"\n", "\n",
"\n", "\n",
"scaler_type = \"standard\"\n", "scaler_type = \"none\"\n",
"loss_variant = \"huber_mass_balance\"\n", "loss_variant = \"huber_mass_balance\"\n",
"delta = 1.7642791340966357\n", "delta = 1.7642791340966357\n",
"\n", "\n",
@ -339,219 +339,22 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 22, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Epoch 1/100\n", "Epoch 1/50\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 0.0159 - loss: 0.0082 - mass_balance: 0.0116 - val_huber: 2.1637e-04 - val_loss: 0.0023 - val_mass_balance: 0.0043\n", "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.7347e-04 - loss: 0.0051 - mass_balance: 0.0098 - val_huber: 2.8895e-05 - val_loss: 0.0032 - val_mass_balance: 0.0062\n",
"Epoch 2/100\n", "Epoch 2/50\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.7016e-04 - loss: 0.0014 - mass_balance: 0.0027 - val_huber: 1.7522e-04 - val_loss: 0.0013 - val_mass_balance: 0.0025\n", "\u001b[1m647/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━━━\u001b[0m \u001b[1m3s\u001b[0m 13ms/step - huber: 3.2162e-04 - loss: 0.0052 - mass_balance: 0.0098"
"Epoch 3/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.0684e-04 - loss: 0.0012 - mass_balance: 0.0022 - val_huber: 3.5211e-04 - val_loss: 0.0022 - val_mass_balance: 0.0042\n",
"Epoch 4/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 15ms/step - huber: 2.1493e-04 - loss: 0.0011 - mass_balance: 0.0020 - val_huber: 2.2204e-04 - val_loss: 0.0010 - val_mass_balance: 0.0019\n",
"Epoch 5/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 15ms/step - huber: 1.3008e-04 - loss: 7.9274e-04 - mass_balance: 0.0015 - val_huber: 4.4501e-05 - val_loss: 3.6538e-04 - val_mass_balance: 6.8946e-04\n",
"Epoch 6/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.1257e-04 - loss: 6.6159e-04 - mass_balance: 0.0012 - val_huber: 1.0521e-04 - val_loss: 6.6072e-04 - val_mass_balance: 0.0012\n",
"Epoch 7/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.1593e-04 - loss: 6.9253e-04 - mass_balance: 0.0013 - val_huber: 4.6279e-05 - val_loss: 3.6958e-04 - val_mass_balance: 6.9983e-04\n",
"Epoch 8/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 9.9661e-05 - loss: 5.9260e-04 - mass_balance: 0.0011 - val_huber: 7.7692e-05 - val_loss: 3.9290e-04 - val_mass_balance: 7.3339e-04\n",
"Epoch 9/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 7.3264e-05 - loss: 4.7501e-04 - mass_balance: 8.9288e-04 - val_huber: 9.2113e-05 - val_loss: 8.4957e-04 - val_mass_balance: 0.0016\n",
"Epoch 10/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 8.6489e-05 - loss: 5.8290e-04 - mass_balance: 0.0011 - val_huber: 3.1637e-05 - val_loss: 5.8915e-04 - val_mass_balance: 0.0011\n",
"Epoch 11/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 16ms/step - huber: 5.9110e-05 - loss: 4.3897e-04 - mass_balance: 8.2805e-04 - val_huber: 3.6716e-05 - val_loss: 3.1306e-04 - val_mass_balance: 5.9171e-04\n",
"Epoch 12/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m24s\u001b[0m 27ms/step - huber: 5.8969e-05 - loss: 4.6788e-04 - mass_balance: 8.8358e-04 - val_huber: 7.4076e-05 - val_loss: 7.7939e-04 - val_mass_balance: 0.0015\n",
"Epoch 13/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 5.9244e-05 - loss: 3.9023e-04 - mass_balance: 7.3465e-04 - val_huber: 5.9634e-05 - val_loss: 3.9370e-04 - val_mass_balance: 7.3867e-04\n",
"Epoch 14/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 20ms/step - huber: 5.8721e-05 - loss: 3.8836e-04 - mass_balance: 7.3155e-04 - val_huber: 3.3829e-05 - val_loss: 2.5489e-04 - val_mass_balance: 4.8263e-04\n",
"Epoch 15/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 4.8019e-05 - loss: 3.4845e-04 - mass_balance: 6.5770e-04 - val_huber: 3.0502e-05 - val_loss: 2.2406e-04 - val_mass_balance: 4.2018e-04\n",
"Epoch 16/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 4.8281e-05 - loss: 3.4026e-04 - mass_balance: 6.4149e-04 - val_huber: 5.5124e-05 - val_loss: 4.3510e-04 - val_mass_balance: 8.2050e-04\n",
"Epoch 17/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 3.8080e-05 - loss: 3.1863e-04 - mass_balance: 6.0295e-04 - val_huber: 3.5506e-05 - val_loss: 6.1022e-04 - val_mass_balance: 0.0012\n",
"Epoch 18/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 3.6879e-05 - loss: 2.8393e-04 - mass_balance: 5.3626e-04 - val_huber: 3.7765e-05 - val_loss: 4.1528e-04 - val_mass_balance: 7.8552e-04\n",
"Epoch 19/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 15ms/step - huber: 3.2695e-05 - loss: 2.8065e-04 - mass_balance: 5.3144e-04 - val_huber: 1.8064e-05 - val_loss: 1.9093e-04 - val_mass_balance: 3.6273e-04\n",
"Epoch 20/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 25ms/step - huber: 3.1337e-05 - loss: 2.5379e-04 - mass_balance: 4.7992e-04 - val_huber: 2.5578e-05 - val_loss: 2.9832e-04 - val_mass_balance: 5.6782e-04\n",
"Epoch 21/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 3.7086e-05 - loss: 2.7006e-04 - mass_balance: 5.0938e-04 - val_huber: 2.2522e-05 - val_loss: 2.2766e-04 - val_mass_balance: 4.3007e-04\n",
"Epoch 22/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 21ms/step - huber: 2.8414e-05 - loss: 2.2388e-04 - mass_balance: 4.2329e-04 - val_huber: 1.7697e-05 - val_loss: 1.7123e-04 - val_mass_balance: 3.2254e-04\n",
"Epoch 23/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 16ms/step - huber: 3.0425e-05 - loss: 2.3615e-04 - mass_balance: 4.4640e-04 - val_huber: 1.9530e-05 - val_loss: 1.9458e-04 - val_mass_balance: 3.6947e-04\n",
"Epoch 24/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.5037e-05 - loss: 1.9369e-04 - mass_balance: 3.6621e-04 - val_huber: 1.9878e-05 - val_loss: 2.9097e-04 - val_mass_balance: 5.5204e-04\n",
"Epoch 25/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.6450e-05 - loss: 2.2114e-04 - mass_balance: 4.1811e-04 - val_huber: 3.3484e-05 - val_loss: 5.1009e-04 - val_mass_balance: 9.7122e-04\n",
"Epoch 26/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.8268e-05 - loss: 1.9281e-04 - mass_balance: 3.6375e-04 - val_huber: 1.4985e-05 - val_loss: 1.1141e-04 - val_mass_balance: 2.0968e-04\n",
"Epoch 27/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.8420e-05 - loss: 1.9706e-04 - mass_balance: 3.7174e-04 - val_huber: 2.0493e-05 - val_loss: 1.5578e-04 - val_mass_balance: 2.9476e-04\n",
"Epoch 28/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 2.1046e-05 - loss: 1.6831e-04 - mass_balance: 3.1860e-04 - val_huber: 2.5317e-05 - val_loss: 1.6482e-04 - val_mass_balance: 3.1080e-04\n",
"Epoch 29/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 2.2267e-05 - loss: 1.7674e-04 - mass_balance: 3.3441e-04 - val_huber: 9.3458e-06 - val_loss: 1.1187e-04 - val_mass_balance: 2.1313e-04\n",
"Epoch 30/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 1.9771e-05 - loss: 1.5978e-04 - mass_balance: 3.0248e-04 - val_huber: 1.1929e-05 - val_loss: 1.1887e-04 - val_mass_balance: 2.2595e-04\n",
"Epoch 31/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 2.2051e-05 - loss: 1.6235e-04 - mass_balance: 3.0656e-04 - val_huber: 1.7063e-05 - val_loss: 1.8251e-04 - val_mass_balance: 3.4744e-04\n",
"Epoch 32/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.8538e-05 - loss: 1.7150e-04 - mass_balance: 3.2539e-04 - val_huber: 1.3060e-05 - val_loss: 1.0948e-04 - val_mass_balance: 2.0754e-04\n",
"Epoch 33/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.3532e-05 - loss: 1.4467e-04 - mass_balance: 2.7262e-04 - val_huber: 7.6551e-06 - val_loss: 8.5257e-05 - val_mass_balance: 1.6184e-04\n",
"Epoch 34/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.7583e-05 - loss: 1.5367e-04 - mass_balance: 2.9137e-04 - val_huber: 8.2259e-06 - val_loss: 9.4663e-05 - val_mass_balance: 1.7979e-04\n",
"Epoch 35/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 1.8602e-05 - loss: 1.3293e-04 - mass_balance: 2.5101e-04 - val_huber: 8.5681e-06 - val_loss: 1.1647e-04 - val_mass_balance: 2.2283e-04\n",
"Epoch 36/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m22s\u001b[0m 25ms/step - huber: 1.5507e-05 - loss: 1.3234e-04 - mass_balance: 2.5097e-04 - val_huber: 1.2965e-05 - val_loss: 2.4758e-04 - val_mass_balance: 4.7178e-04\n",
"Epoch 37/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 24ms/step - huber: 2.7496e-05 - loss: 1.3054e-04 - mass_balance: 2.4429e-04 - val_huber: 1.4207e-05 - val_loss: 1.0057e-04 - val_mass_balance: 1.9007e-04\n",
"Epoch 38/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 1.7117e-05 - loss: 1.1822e-04 - mass_balance: 2.2331e-04 - val_huber: 8.3411e-06 - val_loss: 1.0676e-04 - val_mass_balance: 2.0202e-04\n",
"Epoch 39/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 16ms/step - huber: 1.9310e-05 - loss: 1.1455e-04 - mass_balance: 2.1555e-04 - val_huber: 9.0852e-06 - val_loss: 1.2996e-04 - val_mass_balance: 2.4633e-04\n",
"Epoch 40/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 15ms/step - huber: 2.3680e-05 - loss: 1.1200e-04 - mass_balance: 2.0969e-04 - val_huber: 7.7604e-06 - val_loss: 8.3377e-05 - val_mass_balance: 1.5779e-04\n",
"Epoch 41/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.3581e-05 - loss: 1.0753e-04 - mass_balance: 2.0348e-04 - val_huber: 6.4747e-06 - val_loss: 7.6034e-05 - val_mass_balance: 1.4468e-04\n",
"Epoch 42/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 16ms/step - huber: 1.4963e-05 - loss: 9.3135e-05 - mass_balance: 1.7541e-04 - val_huber: 5.8801e-06 - val_loss: 5.5339e-05 - val_mass_balance: 1.0464e-04\n",
"Epoch 43/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 1.4002e-05 - loss: 1.0034e-04 - mass_balance: 1.8957e-04 - val_huber: 6.0165e-06 - val_loss: 5.2093e-05 - val_mass_balance: 9.8668e-05\n",
"Epoch 44/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 21ms/step - huber: 1.3720e-05 - loss: 8.8099e-05 - mass_balance: 1.6604e-04 - val_huber: 6.4475e-06 - val_loss: 1.4406e-04 - val_mass_balance: 2.7444e-04\n",
"Epoch 45/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 2.0150e-05 - loss: 9.2090e-05 - mass_balance: 1.7219e-04 - val_huber: 4.7389e-06 - val_loss: 5.7199e-05 - val_mass_balance: 1.0862e-04\n",
"Epoch 46/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 1.1187e-05 - loss: 7.6198e-05 - mass_balance: 1.4389e-04 - val_huber: 5.7339e-06 - val_loss: 1.1307e-04 - val_mass_balance: 2.1630e-04\n",
"Epoch 47/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.1631e-05 - loss: 7.7719e-05 - mass_balance: 1.4674e-04 - val_huber: 5.1228e-06 - val_loss: 9.2185e-05 - val_mass_balance: 1.7662e-04\n",
"Epoch 48/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 8.6178e-06 - loss: 7.7370e-05 - mass_balance: 1.4671e-04 - val_huber: 4.4743e-06 - val_loss: 8.0649e-05 - val_mass_balance: 1.5478e-04\n",
"Epoch 49/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.2652e-05 - loss: 6.9353e-05 - mass_balance: 1.3021e-04 - val_huber: 4.3246e-06 - val_loss: 6.8228e-05 - val_mass_balance: 1.3036e-04\n",
"Epoch 50/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 18ms/step - huber: 1.8886e-05 - loss: 7.5731e-05 - mass_balance: 1.4089e-04 - val_huber: 4.6933e-06 - val_loss: 5.2718e-05 - val_mass_balance: 1.0036e-04\n",
"Epoch 51/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 8.6954e-06 - loss: 6.2883e-05 - mass_balance: 1.1879e-04 - val_huber: 5.7759e-06 - val_loss: 7.6331e-05 - val_mass_balance: 1.4537e-04\n",
"Epoch 52/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 21ms/step - huber: 9.6971e-06 - loss: 6.1626e-05 - mass_balance: 1.1608e-04 - val_huber: 3.5665e-06 - val_loss: 5.3019e-05 - val_mass_balance: 1.0099e-04\n",
"Epoch 53/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 8.4618e-06 - loss: 5.6582e-05 - mass_balance: 1.0672e-04 - val_huber: 4.0161e-06 - val_loss: 1.1739e-04 - val_mass_balance: 2.2385e-04\n",
"Epoch 54/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 8.6070e-06 - loss: 6.1078e-05 - mass_balance: 1.1538e-04 - val_huber: 3.9764e-06 - val_loss: 7.8183e-05 - val_mass_balance: 1.5002e-04\n",
"Epoch 55/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 8.3744e-06 - loss: 5.2668e-05 - mass_balance: 9.9188e-05 - val_huber: 4.8194e-06 - val_loss: 6.0945e-05 - val_mass_balance: 1.1645e-04\n",
"Epoch 56/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 8.0430e-06 - loss: 5.5005e-05 - mass_balance: 1.0381e-04 - val_huber: 4.2099e-06 - val_loss: 4.2308e-05 - val_mass_balance: 8.0290e-05\n",
"Epoch 57/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 9.8632e-06 - loss: 4.6309e-05 - mass_balance: 8.6417e-05 - val_huber: 3.7704e-06 - val_loss: 5.2539e-05 - val_mass_balance: 1.0076e-04\n",
"Epoch 58/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 1.1049e-05 - loss: 4.8602e-05 - mass_balance: 9.0530e-05 - val_huber: 4.5764e-06 - val_loss: 4.2829e-05 - val_mass_balance: 8.1037e-05\n",
"Epoch 59/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 7.8099e-06 - loss: 4.4020e-05 - mass_balance: 8.2638e-05 - val_huber: 3.7273e-06 - val_loss: 3.4894e-05 - val_mass_balance: 6.5669e-05\n",
"Epoch 60/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 7.3985e-06 - loss: 4.2755e-05 - mass_balance: 8.0336e-05 - val_huber: 3.5656e-06 - val_loss: 5.2735e-05 - val_mass_balance: 1.0131e-04\n",
"Epoch 61/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 5.7896e-06 - loss: 4.4404e-05 - mass_balance: 8.3940e-05 - val_huber: 3.3344e-06 - val_loss: 4.1619e-05 - val_mass_balance: 7.9748e-05\n",
"Epoch 62/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 18ms/step - huber: 7.6573e-06 - loss: 4.2019e-05 - mass_balance: 7.8827e-05 - val_huber: 2.9571e-06 - val_loss: 3.8318e-05 - val_mass_balance: 7.3062e-05\n",
"Epoch 63/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 7.0246e-06 - loss: 4.1996e-05 - mass_balance: 7.8925e-05 - val_huber: 3.2846e-06 - val_loss: 4.7290e-05 - val_mass_balance: 9.0100e-05\n",
"Epoch 64/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 7.1768e-06 - loss: 4.0670e-05 - mass_balance: 7.6273e-05 - val_huber: 3.2443e-06 - val_loss: 3.0751e-05 - val_mass_balance: 5.8160e-05\n",
"Epoch 65/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 8.2322e-06 - loss: 3.9525e-05 - mass_balance: 7.3858e-05 - val_huber: 3.6928e-06 - val_loss: 4.9247e-05 - val_mass_balance: 9.3333e-05\n",
"Epoch 66/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 21ms/step - huber: 7.3951e-06 - loss: 3.3935e-05 - mass_balance: 6.3241e-05 - val_huber: 2.6322e-06 - val_loss: 2.9614e-05 - val_mass_balance: 5.6361e-05\n",
"Epoch 67/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 7.9427e-06 - loss: 3.1778e-05 - mass_balance: 5.8965e-05 - val_huber: 3.0384e-06 - val_loss: 3.5186e-05 - val_mass_balance: 6.6310e-05\n",
"Epoch 68/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 9.2122e-06 - loss: 3.3397e-05 - mass_balance: 6.1652e-05 - val_huber: 2.6337e-06 - val_loss: 3.0151e-05 - val_mass_balance: 5.7459e-05\n",
"Epoch 69/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 20ms/step - huber: 7.5230e-06 - loss: 3.1762e-05 - mass_balance: 5.9018e-05 - val_huber: 3.2956e-06 - val_loss: 7.7759e-05 - val_mass_balance: 1.4897e-04\n",
"Epoch 70/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 5.1066e-06 - loss: 3.0846e-05 - mass_balance: 5.7952e-05 - val_huber: 2.6449e-06 - val_loss: 2.7740e-05 - val_mass_balance: 5.2617e-05\n",
"Epoch 71/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 5.9822e-06 - loss: 2.8337e-05 - mass_balance: 5.2830e-05 - val_huber: 3.2052e-06 - val_loss: 2.3249e-05 - val_mass_balance: 4.3688e-05\n",
"Epoch 72/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 6.0954e-06 - loss: 2.8623e-05 - mass_balance: 5.3352e-05 - val_huber: 2.6696e-06 - val_loss: 3.7623e-05 - val_mass_balance: 7.1514e-05\n",
"Epoch 73/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 20ms/step - huber: 6.5221e-06 - loss: 2.8740e-05 - mass_balance: 5.3428e-05 - val_huber: 2.3854e-06 - val_loss: 2.0875e-05 - val_mass_balance: 3.9654e-05\n",
"Epoch 74/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 23ms/step - huber: 5.3176e-06 - loss: 2.7184e-05 - mass_balance: 5.0835e-05 - val_huber: 2.4816e-06 - val_loss: 3.5760e-05 - val_mass_balance: 6.7804e-05\n",
"Epoch 75/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 5.0432e-06 - loss: 2.4995e-05 - mass_balance: 4.6679e-05 - val_huber: 2.5025e-06 - val_loss: 1.9573e-05 - val_mass_balance: 3.6922e-05\n",
"Epoch 76/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 4.8276e-06 - loss: 2.2201e-05 - mass_balance: 4.1353e-05 - val_huber: 2.4585e-06 - val_loss: 1.7460e-05 - val_mass_balance: 3.2908e-05\n",
"Epoch 77/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 4.4530e-06 - loss: 2.2517e-05 - mass_balance: 4.2087e-05 - val_huber: 2.6383e-06 - val_loss: 2.1215e-05 - val_mass_balance: 4.0054e-05\n",
"Epoch 78/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 4.7436e-06 - loss: 2.0644e-05 - mass_balance: 3.8389e-05 - val_huber: 2.7656e-06 - val_loss: 1.8618e-05 - val_mass_balance: 3.4989e-05\n",
"Epoch 79/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 8.6071e-06 - loss: 2.1559e-05 - mass_balance: 3.8975e-05 - val_huber: 2.4785e-06 - val_loss: 1.9744e-05 - val_mass_balance: 3.7424e-05\n",
"Epoch 80/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 18ms/step - huber: 4.8273e-06 - loss: 2.0366e-05 - mass_balance: 3.7813e-05 - val_huber: 2.3683e-06 - val_loss: 2.3192e-05 - val_mass_balance: 4.3858e-05\n",
"Epoch 81/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 4.1429e-06 - loss: 1.9682e-05 - mass_balance: 3.6682e-05 - val_huber: 2.4579e-06 - val_loss: 2.3470e-05 - val_mass_balance: 4.4667e-05\n",
"Epoch 82/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 4.3346e-06 - loss: 1.8738e-05 - mass_balance: 3.4823e-05 - val_huber: 2.2863e-06 - val_loss: 1.6274e-05 - val_mass_balance: 3.0652e-05\n",
"Epoch 83/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 4.6412e-06 - loss: 1.7737e-05 - mass_balance: 3.2783e-05 - val_huber: 2.2080e-06 - val_loss: 1.5864e-05 - val_mass_balance: 2.9908e-05\n",
"Epoch 84/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 17ms/step - huber: 6.0757e-06 - loss: 1.9005e-05 - mass_balance: 3.4790e-05 - val_huber: 2.2955e-06 - val_loss: 1.9878e-05 - val_mass_balance: 3.7724e-05\n",
"Epoch 85/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 5.0746e-06 - loss: 1.8464e-05 - mass_balance: 3.4061e-05 - val_huber: 2.2392e-06 - val_loss: 1.8274e-05 - val_mass_balance: 3.4456e-05\n",
"Epoch 86/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 6.1811e-06 - loss: 1.7876e-05 - mass_balance: 3.2582e-05 - val_huber: 2.2513e-06 - val_loss: 1.8889e-05 - val_mass_balance: 3.5718e-05\n",
"Epoch 87/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 3.5479e-06 - loss: 1.5930e-05 - mass_balance: 2.9635e-05 - val_huber: 2.2526e-06 - val_loss: 1.6175e-05 - val_mass_balance: 3.0466e-05\n",
"Epoch 88/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 18ms/step - huber: 7.3204e-06 - loss: 1.6691e-05 - mass_balance: 2.9917e-05 - val_huber: 2.1545e-06 - val_loss: 1.3727e-05 - val_mass_balance: 2.5782e-05\n",
"Epoch 89/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 23ms/step - huber: 3.5428e-06 - loss: 1.4906e-05 - mass_balance: 2.7661e-05 - val_huber: 2.1938e-06 - val_loss: 1.4968e-05 - val_mass_balance: 2.8242e-05\n",
"Epoch 90/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 4.8572e-06 - loss: 1.5157e-05 - mass_balance: 2.7730e-05 - val_huber: 2.1789e-06 - val_loss: 1.7663e-05 - val_mass_balance: 3.3284e-05\n",
"Epoch 91/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 22ms/step - huber: 5.7642e-06 - loss: 1.5536e-05 - mass_balance: 2.8178e-05 - val_huber: 2.1638e-06 - val_loss: 1.2848e-05 - val_mass_balance: 2.4079e-05\n",
"Epoch 92/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m18s\u001b[0m 21ms/step - huber: 5.3907e-06 - loss: 1.3979e-05 - mass_balance: 2.5303e-05 - val_huber: 2.1050e-06 - val_loss: 1.5735e-05 - val_mass_balance: 2.9686e-05\n",
"Epoch 93/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 5.6190e-06 - loss: 1.4178e-05 - mass_balance: 2.5596e-05 - val_huber: 2.1393e-06 - val_loss: 1.3981e-05 - val_mass_balance: 2.6364e-05\n",
"Epoch 94/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 6.4031e-06 - loss: 1.4058e-05 - mass_balance: 2.5123e-05 - val_huber: 2.1212e-06 - val_loss: 1.2008e-05 - val_mass_balance: 2.2475e-05\n",
"Epoch 95/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 4.3502e-06 - loss: 1.4156e-05 - mass_balance: 2.5949e-05 - val_huber: 2.0968e-06 - val_loss: 1.0900e-05 - val_mass_balance: 2.0334e-05\n",
"Epoch 96/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 15ms/step - huber: 3.4378e-06 - loss: 1.2550e-05 - mass_balance: 2.3135e-05 - val_huber: 2.1139e-06 - val_loss: 1.3909e-05 - val_mass_balance: 2.6132e-05\n",
"Epoch 97/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 4.0237e-06 - loss: 1.3306e-05 - mass_balance: 2.4419e-05 - val_huber: 2.1032e-06 - val_loss: 1.0320e-05 - val_mass_balance: 1.9246e-05\n",
"Epoch 98/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 22ms/step - huber: 4.7400e-06 - loss: 1.2574e-05 - mass_balance: 2.2770e-05 - val_huber: 2.1382e-06 - val_loss: 1.1723e-05 - val_mass_balance: 2.1962e-05\n",
"Epoch 99/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 24ms/step - huber: 5.2539e-06 - loss: 1.2562e-05 - mass_balance: 2.2590e-05 - val_huber: 2.1173e-06 - val_loss: 1.4093e-05 - val_mass_balance: 2.6535e-05\n",
"Epoch 100/100\n",
"\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m21s\u001b[0m 24ms/step - huber: 4.6950e-06 - loss: 1.2635e-05 - mass_balance: 2.2899e-05 - val_huber: 2.0971e-06 - val_loss: 1.0790e-05 - val_mass_balance: 2.0159e-05\n",
"Training took 1548.7767686843872 seconds\n"
] ]
} }
], ],
"source": [ "source": [
"history = model_training(model, epochs=100)" "history = model_training(model, epochs=50)"
] ]
}, },
{ {
@ -926,6 +729,18 @@
"source": [ "source": [
"test_model(model, X_test, y_test)" "test_model(model, X_test, y_test)"
] ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model Explanation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
} }
], ],
"metadata": { "metadata": {

View File

@ -1,5 +1,5 @@
import keras import keras
from keras.layers import Dense, Dropout, Input, BatchNormalization, LeakyReLU from keras.layers import Dense, AlphaDropout, Dropout, Input, BatchNormalization, LeakyReLU
import tensorflow as tf import tensorflow as tf
import h5py import h5py
import numpy as np import numpy as np
@ -15,7 +15,6 @@ from imblearn.under_sampling import RandomUnderSampler
from imblearn.over_sampling import RandomOverSampler from imblearn.over_sampling import RandomOverSampler
from collections import Counter from collections import Counter
import os import os
from preprocessing import *
from sklearn import set_config from sklearn import set_config
from importlib import reload from importlib import reload
@ -59,6 +58,38 @@ def model_definition(architecture):
] ]
) )
elif architecture == "large_batch_normalization":
model = keras.Sequential([
keras.layers.Input(shape=(8,), dtype=dtype),
BatchNormalization(),
Dense(512, dtype=dtype),
LeakyReLU(negative_slope=0.01),
# BatchNormalization(),
Dense(1024, dtype=dtype),
LeakyReLU(negative_slope=0.01),
# BatchNormalization(),
Dense(512, dtype=dtype),
LeakyReLU(negative_slope=0.01),
Dense(8, dtype=dtype),
])
elif architecture == "large_self_normalization":
model = keras.Sequential([
keras.layers.Input(shape=(8,), dtype=dtype),
Dense(512, activation='selu', kernel_initializer='lecun_normal', dtype=dtype),
AlphaDropout(0.05),
Dense(1024, activation='selu', kernel_initializer='lecun_normal',dtype=dtype),
AlphaDropout(0.05),
Dense(512, activation='selu', kernel_initializer='lecun_normal',dtype=dtype),
AlphaDropout(0.05),
Dense(8, dtype=dtype),
])
elif architecture == "paper": elif architecture == "paper":
model = keras.Sequential( model = keras.Sequential(
[ [
@ -143,11 +174,6 @@ def custom_loss(
mean_y = tf.convert_to_tensor( mean_y = tf.convert_to_tensor(
preprocess.scaler_y.mean_, dtype=tf.float32) preprocess.scaler_y.mean_, dtype=tf.float32)
else:
raise Exception(
"No valid scaler type found. Choose between 'standard' and 'minmax'."
)
except AttributeError: except AttributeError:
raise Exception( raise Exception(
"Data normalized with scaler different than specified for the training. Compare the scaling approach on preprocessing and training." "Data normalized with scaler different than specified for the training. Compare the scaling approach on preprocessing and training."
@ -164,6 +190,10 @@ def custom_loss(
predicted_inverse = predicted * scale_y + mean_y predicted_inverse = predicted * scale_y + mean_y
results_inverse = results * scale_X + mean_X results_inverse = results * scale_X + mean_X
elif scaler_type == "none":
predicted_inverse = predicted
results_inverse = results
# apply exp1m on the columns of predicted_inverse and results_inverse if log transformation was used # apply exp1m on the columns of predicted_inverse and results_inverse if log transformation was used
if preprocess.func_dict_out is not None: if preprocess.func_dict_out is not None:
predicted_inverse = tf.math.expm1(predicted_inverse) predicted_inverse = tf.math.expm1(predicted_inverse)
@ -254,6 +284,10 @@ def mass_balance_metric(preprocess, column_dict, scaler_type="minmax"):
predicted_inverse = predicted * scale_y + mean_y predicted_inverse = predicted * scale_y + mean_y
results_inverse = results * scale_X + mean_X results_inverse = results * scale_X + mean_X
elif scaler_type == "none":
predicted_inverse = predicted
results_inverse = results
if preprocess.func_dict_out is not None: if preprocess.func_dict_out is not None:
predicted_inverse = tf.math.expm1(predicted_inverse) predicted_inverse = tf.math.expm1(predicted_inverse)
results_inverse = tf.math.expm1(results_inverse) results_inverse = tf.math.expm1(results_inverse)
@ -318,6 +352,9 @@ def mass_balance_evaluation(model, X, preprocess):
classes.reset_index(drop=True, inplace=True) classes.reset_index(drop=True, inplace=True)
prediction = pd.DataFrame(model.predict(X[columns]), columns=columns) prediction = pd.DataFrame(model.predict(X[columns]), columns=columns)
# backtransform min/max or standard scaler # backtransform min/max or standard scaler
if preprocess.scaler_X is None:
X = pd.DataFrame( X = pd.DataFrame(
preprocess.scaler_X.inverse_transform(X.iloc[:, X.columns != "Class"]), preprocess.scaler_X.inverse_transform(X.iloc[:, X.columns != "Class"]),
columns=columns, columns=columns,