diff --git a/mlpf/mdmm.ipynb b/mlpf/mdmm.ipynb new file mode 100644 index 000000000..ebc436dac --- /dev/null +++ b/mlpf/mdmm.ipynb @@ -0,0 +1,7679 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Will use NVIDIA GeForce GTX 1080 Ti\n" + ] + } + ], + "source": [ + "import datetime\n", + "import os.path as osp\n", + "import platform\n", + "import pickle as pkl\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import mplhep\n", + "import numpy as np\n", + "import torch\n", + "from torch import nn\n", + "import torch.nn.functional as F\n", + "import torch_geometric\n", + "from torch_geometric.nn import global_mean_pool\n", + "\n", + "from pyg_ssl.args import parse_args\n", + "from pyg_ssl.mlpf import MLPF\n", + "from pyg_ssl.training_mlpf import training_loop_mlpf\n", + "from pyg_ssl.training_VICReg import training_loop_VICReg\n", + "from pyg_ssl.utils import CLUSTERS_X, TRACKS_X, data_split, load_VICReg, save_MLPF, save_VICReg, distinguish_PFelements, combine_PFelements\n", + "from pyg_ssl.VICReg import DECODER, ENCODER\n", + "\n", + "import tqdm\n", + "matplotlib.use(\"Agg\")\n", + "mplhep.style.use(mplhep.styles.CMS)\n", + "\n", + "# Ignore divide by 0 errors\n", + "np.seterr(divide=\"ignore\", invalid=\"ignore\")\n", + "\n", + "# define the global base device\n", + "if torch.cuda.device_count():\n", + " device = torch.device(\"cuda:0\")\n", + " print(f\"Will use {torch.cuda.get_device_name(device)}\")\n", + "else:\n", + " device = \"cpu\"\n", + " print(\"Will use cpu\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Will use data split mode `quick`\n", + "Will use 25843 events to train VICReg\n", + "Will use 2871 events to validate VICReg\n", + "Will use 6461 events to train MLPF\n", + "Will use 718 events to validate MLPF\n" + ] + } + ], + "source": [ + "# load the clic dataset\n", + "data_VICReg_train, data_VICReg_valid, data_mlpf_train, data_mlpf_valid, data_test_qcd, data_test_ttbar = data_split(\n", + " \"/pfclicvol/data/clic_edm4hep\", \"quick\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "embedding_dim_VICReg = 256\n", + "width_encoder = 256 \n", + "num_convs = 3\n", + "expand_dim = 256\n", + "width_decoder = 256\n", + "\n", + "encoder_model_kwargs = {\n", + " \"embedding_dim\": embedding_dim_VICReg,\n", + " \"width\": width_encoder,\n", + " \"num_convs\": num_convs,\n", + " \"space_dim\": 4,\n", + " \"propagate_dim\": 22,\n", + " \"k\": 32,\n", + "}\n", + "\n", + "decoder_model_kwargs = {\n", + " \"input_dim\": embedding_dim_VICReg,\n", + " \"output_dim\": expand_dim,\n", + " \"width\": width_decoder,\n", + "}\n", + "\n", + "encoder = ENCODER(**encoder_model_kwargs).to(device)\n", + "decoder = DECODER(**decoder_model_kwargs).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "class VICReg(torch.nn.Module):\n", + " def __init__(self, encoder, decoder):\n", + " super(VICReg, self).__init__()\n", + " self.encoder = encoder\n", + " self.decoder = decoder\n", + " \n", + " def forward(self, tracks, clusters):\n", + "\n", + " ### encode\n", + " embedding_tracks, embedding_clusters = self.encoder(tracks, clusters)\n", + " \n", + " ### decode\n", + " out_tracks, out_clusters = self.decoder(embedding_tracks, embedding_clusters)\n", + "\n", + " return out_tracks, out_clusters" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "VICReg(\n", + " (encoder): ENCODER(\n", + " (nn1): Sequential(\n", + " (0): Linear(in_features=14, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): Linear(in_features=256, out_features=256, bias=True)\n", + " (3): ELU(alpha=1.0)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): Linear(in_features=256, out_features=256, bias=True)\n", + " )\n", + " (nn2): Sequential(\n", + " (0): Linear(in_features=15, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): Linear(in_features=256, out_features=256, bias=True)\n", + " (3): ELU(alpha=1.0)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): Linear(in_features=256, out_features=256, bias=True)\n", + " )\n", + " (conv): ModuleList(\n", + " (0): GravNetConv(256, 256, k=32)\n", + " (1): GravNetConv(256, 256, k=32)\n", + " (2): GravNetConv(256, 256, k=32)\n", + " )\n", + " )\n", + " (decoder): DECODER(\n", + " (expander): Sequential(\n", + " (0): Linear(in_features=256, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): Linear(in_features=256, out_features=256, bias=True)\n", + " (3): ELU(alpha=1.0)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): Linear(in_features=256, out_features=256, bias=True)\n", + " )\n", + " )\n", + ")" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vicreg = VICReg(encoder, decoder)\n", + "vicreg" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size_VICReg = 500\n", + "train_loader = torch_geometric.loader.DataLoader(data_VICReg_train, batch_size_VICReg)\n", + "valid_loader = torch_geometric.loader.DataLoader(data_VICReg_valid, batch_size_VICReg)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "for batch in train_loader:\n", + " # make transformation\n", + " tracks, clusters = distinguish_PFelements(batch.to(device))\n", + "\n", + " # run through VICReg\n", + " out_tracks, out_clusters = vicreg(tracks, clusters)\n", + "\n", + " # POOLING\n", + " pooled_tracks = global_mean_pool(out_tracks, tracks.batch)\n", + " pooled_clusters = global_mean_pool(out_clusters, clusters.batch)\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(67.6493, device='cuda:0', grad_fn=)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "F.mse_loss(pooled_tracks, pooled_clusters)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "class invar_loss(nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(invar_loss, self).__init__()\n", + "\n", + " def forward(self, x, y):\n", + " return F.mse_loss(x, y)\n", + " \n", + "class var_loss(nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(var_loss, self).__init__()\n", + "\n", + " def forward(self, x, y, epsilon=1e-3):\n", + " std_x = torch.sqrt(x.var(dim=0) + epsilon)\n", + " std_y = torch.sqrt(y.var(dim=0) + epsilon)\n", + " var_loss = torch.mean(F.relu(1 - std_x)) + torch.mean(F.relu(1 - std_y))\n", + " \n", + " return var_loss \n", + " \n", + "class cross_loss(nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(cross_loss, self).__init__()\n", + "\n", + " def forward(self, x, y, lmbd=0.01):\n", + " bs = x.size(0)\n", + " emb = x.size(1)\n", + "\n", + " xNorm = (x - x.mean(0)) / x.std(0)\n", + " yNorm = (y - y.mean(0)) / y.std(0)\n", + "\n", + " crossCorMat = (xNorm.T @ yNorm) / bs\n", + " cross_loss = (crossCorMat * lmbd - torch.eye(emb, device=torch.device(device)) * lmbd).pow(2).sum()\n", + "\n", + " return cross_loss" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "crit_invar = invar_loss()\n", + "crit_var = var_loss()\n", + "crit_cross = cross_loss()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invar_loss = 67.64934539794922\n", + "var_loss = 0.9483171701431274\n", + "cross_loss = 0.029010634869337082\n" + ] + } + ], + "source": [ + "print(f\"invar_loss = {crit_invar(pooled_tracks, pooled_clusters)}\")\n", + "print(f\"var_loss = {crit_var(pooled_tracks, pooled_clusters)}\")\n", + "print(f\"cross_loss = {crit_cross(pooled_tracks, pooled_clusters)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "crit_invar = invar_loss()\n", + "crit_var = var_loss()\n", + "crit_cross = cross_loss()\n", + "\n", + "import mdmm\n", + "max_ = 0.1\n", + "\n", + "constraints = []\n", + "constraints.append(mdmm.MaxConstraint(lambda: crit_var(pooled_tracks, pooled_clusters), max_))\n", + "constraints.append(mdmm.MaxConstraint(lambda: crit_cross(pooled_tracks, pooled_clusters), max_))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "encoder = ENCODER(**encoder_model_kwargs).to(device)\n", + "decoder = DECODER(**decoder_model_kwargs).to(device)\n", + "vicreg = VICReg(encoder, decoder)\n", + "\n", + "mdmm_module = mdmm.MDMM(constraints)\n", + "opt = mdmm_module.make_optimizer(vicreg.parameters(), lr=2e-3)\n", + "\n", + "optimizer = torch.optim.SGD(list(vicreg.parameters()), lr=2e-3)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.19it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0/200 --- Train: tot_loss = 1.19 - Valid: tot_loss = 0.08 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1/200 --- Train: tot_loss = 0.08 - Valid: tot_loss = 0.07 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2/200 --- Train: tot_loss = 0.07 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3/200 --- Train: tot_loss = 0.07 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "17/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "19/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.11it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "25/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.17it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "26/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "27/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "29/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "31/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "32/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "33/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "34/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "35/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "36/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "37/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "38/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "39/200 --- Train: tot_loss = 0.06 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "40/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "41/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "42/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "43/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "44/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "46/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "47/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "48/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "49/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "51/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "53/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "54/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "55/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "56/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "57/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "58/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "59/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "60/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "61/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "62/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "63/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "64/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "65/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "66/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "67/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "68/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "69/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "70/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "71/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "72/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "73/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "74/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "75/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "76/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "77/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "78/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "79/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "80/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "81/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "82/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "83/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "84/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "85/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "86/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "87/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "89/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "90/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "91/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "92/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "93/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "94/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "95/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "96/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=9\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "97/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "98/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=11\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=13\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "101/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=14\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "102/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "103/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=16\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "104/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=17\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "105/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=18\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "106/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "107/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "108/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "109/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "110/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "111/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "112/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "113/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "114/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "115/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "117/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "118/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "119/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "120/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=9\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "121/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "122/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "123/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "124/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "125/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "126/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "127/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "128/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "129/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "130/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "131/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "132/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "133/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "134/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "135/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "136/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "137/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "138/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "139/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "140/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "141/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "142/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "143/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "144/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "145/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "146/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "147/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "148/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "149/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "150/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "151/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "152/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "153/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "154/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "155/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "156/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "157/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "158/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "159/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "160/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "161/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=3\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "162/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=4\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "163/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "164/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "165/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "166/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=8\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "167/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=9\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "168/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "169/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=11\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "170/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=12\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "171/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=13\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "172/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=14\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "173/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=15\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "174/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=16\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "175/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=17\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "176/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=18\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "177/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=19\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "178/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=20\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "179/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=21\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "180/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=22\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "181/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=23\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "182/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=24\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "183/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=25\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "184/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=26\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.16it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "185/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=27\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "186/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=28\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "187/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "188/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "189/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "190/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "191/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "192/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "193/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "194/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "195/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "196/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 4.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "197/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.14it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "198/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:16<00:00, 3.15it/s]\n", + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00, 3.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "199/200 --- Train: tot_loss = 0.05 - Valid: tot_loss = 0.06 - stale=1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "mdmm_ = 0\n", + "\n", + "n_epochs = 200\n", + "u = 0.01\n", + "v = 0.01\n", + "stale_epochs = 0\n", + "best_val_loss_tot = 99999999\n", + "\n", + "# initialize loss counters\n", + "t_losses, v_losses = [], []\n", + "for j in range(n_epochs):\n", + " \n", + " # train loop\n", + " is_train = True\n", + " vicreg.train()\n", + " loader = train_loader \n", + " losses, var_losses, invar_losses, cross_losses = 0.0, 0.0, 0.0, 0.0\n", + " for i, batch in tqdm.tqdm(enumerate(loader), total=len(loader)):\n", + "\n", + " # seperate tracks from clusters\n", + " tracks, clusters = distinguish_PFelements(batch.to(device))\n", + " # run VICReg\n", + " out_tracks, out_clusters = vicreg(tracks, clusters)\n", + " \n", + " # POOLING\n", + " pooled_tracks = global_mean_pool(out_tracks, tracks.batch)\n", + " pooled_clusters = global_mean_pool(out_clusters, clusters.batch)\n", + "\n", + " # compute loss & update parameters\n", + " if mdmm_:\n", + " loss = crit_invar(pooled_tracks, pooled_clusters)\n", + " mdmm_return = mdmm_module(loss) \n", + " opt.zero_grad()\n", + " mdmm_return.value.backward()\n", + " opt.step()\n", + " else:\n", + " loss = u * crit_var(pooled_tracks, pooled_clusters) + v * crit_invar(pooled_tracks, pooled_clusters) + crit_cross(pooled_tracks, pooled_clusters)\n", + " for param in vicreg.parameters():\n", + " param.grad = None\n", + " loss.backward()\n", + " optimizer.step() \n", + "\n", + " losses += loss.detach()\n", + "\n", + " t_losses.append(losses.cpu().item() / (len(loader)))\n", + "\n", + " # valid loop\n", + " is_train = False\n", + " vicreg.eval()\n", + " loader = valid_loader\n", + " losses = 0.0\n", + " for i, batch in tqdm.tqdm(enumerate(loader), total=len(loader)):\n", + "\n", + " # seperate tracks from clusters\n", + " tracks, clusters = distinguish_PFelements(batch.to(device))\n", + " # run VICReg\n", + " out_tracks, out_clusters = vicreg(tracks, clusters)\n", + " \n", + " # POOLING\n", + " pooled_tracks = global_mean_pool(out_tracks, tracks.batch)\n", + " pooled_clusters = global_mean_pool(out_clusters, clusters.batch)\n", + "\n", + " # compute loss\n", + " if mdmm_:\n", + " loss = crit_invar(pooled_tracks, pooled_clusters) \n", + " else:\n", + " loss = u * crit_var(pooled_tracks, pooled_clusters) + v * crit_invar(pooled_tracks, pooled_clusters) + crit_cross(pooled_tracks, pooled_clusters)\n", + "\n", + " losses += loss.detach()\n", + "\n", + " v_losses.append(losses.cpu().item() / (len(loader))) \n", + " \n", + " if v_losses[j] < best_val_loss_tot:\n", + " stale_epochs = 0\n", + " best_val_loss_tot = v_losses[j]\n", + " torch.save(vicreg.state_dict(), f\"/pfclicvol/vicreg.pth\")\n", + " else:\n", + " stale_epochs += 1\n", + " \n", + " print(f\"{j}/{n_epochs} --- Train: tot_loss = {t_losses[j]:.2f} - Valid: tot_loss = {v_losses[j]:.2f} - stale={stale_epochs}\") " + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAF4CAYAAABU7Y6xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABUt0lEQVR4nO3dd1yV5fvA8c8Z7I0IskTFvVNz5AgrV5aZTTVH9Wtiw6zUSs22pfVtkJUNs7ShNs3RME1Lc2TmHqiggAwVZI9z7t8fDxxAQOFwGAeu9+vFS3nWuc/j8bnOva5bp5RSCCGEaPT0dV0AIYQQ9YMEBCGEEIAEBCGEEIUkIAghhAAkIAghhCgkAUEIIQQgAUEIIUQhY10XoK65ubmRk5ODwWDA39+/rosjhBDVlpSUhMlkwtnZmczMzEqfp2vsE9MMBgNms7muiyGEEDan1+sxmUyVPr7R1xCKAoJerycwMLDS5ymliI+PJygoCJ1OV6XXTExMJCAgoKpFrda5tXlede6Nta9pL+fJvbm4uvh/VdvnWXtuVe5NQkICZrMZg8FQtYIpGzOZTLa+ZI0KDg5WgAoODq7SeWlpaQpQaWlpVX7NDh06VPmc6p5bm+dV595Y+5r2cp7cm4uri/9XtX2etedW5d5Y+1yzulP52LFjvPzyyxw7dgyA3Nxcbr31VlxcXAgLC+P999+39tJCCCHqgFUB4d9//+Wyyy7jmWeeITExEYAFCxawYsUK/Pz8yMrK4sEHH2TdunU2LawQQoiaY1VAmDt3LllZWbzzzjt069YNgE8//ZROnToRExPDvn378PLy4u2337ZpYYUQQtQcqwLCjh07GD58OA888ACurq7ExMRw5MgRbr75ZoxGI/7+/gwZMoQ9e/bYurxCCCFqiFUB4ezZs/j6+lp+/+uvv9DpdAwcONCyzdnZmeTk5OqXUAghRK2wKiCEhYXx559/Wn5fs2YNzs7OXHHFFZZtu3btomnTptUvYQMUGRlZ6+fW9nnVYS/vUe6N7c+rDnt6j3VxfyqlymOflFKPPfaY0uv1atq0aep///ufcnR0VDfeeKNSSqnU1FS1YMECpdfr1ahRo6y5fK2qi2GnDZ3cm4rJvbk4uT8Vq41hp1ZNTJs+fTqrV6/m9ddfB8DFxYW5c+cC8Oabb/Lss8/i5OTEzJkzbRCyhBBC1AarAoK/vz/btm1j1apVJCUlce2119KmTRsA2rRpw4MPPsj//d//0b17d1uWVQghRA2yOnWFh4cHY8eOLbN97Nix5W4XQghRv1Ur/XVCQkKpTHqrV6/mrrvuYs6cOcTExFS7cPXZ9e/tIPTRrzl+JquuiyKEEDZhVUBIT09n5MiRhISE8N9//wHwyy+/cP3117N48WKef/55+vXrR2xsrE0LW59k5ZnQO7mSWyCZUoUQDYNVAWHevHmsWbOGPn360KxZMwBee+01PDw8+OGHH1i0aBFJSUmWTueGyNGo3ToJCKIx2LVrFzqdjpYtW6IukTG/d+/e6HQ61q9fD4BOp7tods5NmzYxfvx4WrRoYckAeu211/Lee++Rn59f5viNGzdarnnhj16vJzg4mIiICL777jvr33AjZVUfwsqVK+ncuTN//fUXABkZGWzYsIE777yT6667DoClS5fy888/266k9YyTQfuA50lAEI3AZZddRqdOndi3bx9btmwpNeeopJiYGLZv305gYCAREREXvabZbObFF1/k2WefRa/X061bNwYMGMDSpUs5cOAADzzwAG+//TabN2/Gx8enzPnBwcHceOONpbbl5eVx7Ngxfv/9dzZu3MjcuXOZPXu21e+7sbEqIMTGxpbqON62bRsFBQWlPgDh4eFs37692gWsr1wctVtn1lUx33gj4OTkxJw5c3BycqrrotQ79nxvJkyYwIwZM1i2bFmFAWH58uUA3H777ej1F2+AeOCBB/jggw/o3r073333HWFhYeTm5tK6dWseeughHnvsMZYsWcL48eNZvXp1mfPbtGlTYb60v/76i0GDBvH8889z3333Wb1uQX1SK58dayZIhISEqAEDBlh+nzVrltLr9erUqVOWbYMHD1Z+fn7WXL5WWTuBY8y7f6qw6avUmj0JNVQyIeqXkydPKr1er5o2bary8/PLPaZPnz4KUNu3b7dsA9SFj5o9e/YovV6vwsLCVGZmZrnXysvLU+3atVOA2rt3r2X7hg0bFKAiIiIuWt7BgwcrQK1bt66yb7HBqNX1ELp378727dvZs2cPZ86cYfHixXTt2pXg4GBAq0Hs2LGDsLAwmwSt+sjJ0odQ+eXphLBnISEhREREkJyczK+//lpmf2xsLNu2baN169b06tXroteaNWsWZrOZp59+GldX13KPcXBwYOrUqfTt25edO3dWubx+fn6A1qRdktls5vXXX2fQoEF4e3sTGBjIjTfeyJYtW8q9zg8//MCwYcNo0qQJXbt25fHHHyc9PZ3Q0FAGDx5c5XLVZ1YFhCeffBKTyUT37t0JDAwkLi6Ohx56CIDFixfTqVMnMjMzueuuu2xa2PrESTqVRSM0YcIEAJYtW1Zm34oVK1BKMX78+Etep6hj+FLH3nfffWzZsoWJEydWqZxms5ndu3ej1+u57LLLLNtzc3MZPHgw06ZNIyUlhRtuuIHOnTvz448/MmjQIL744otS13nllVe44YYb2LFjB4MHD6ZFixa8//77DBs2jLy8vCqVyS5YWyVZvXq1GjJkiOrevbt6/vnnLdvnzp2rPDw81PTp0+1iOU1rq1b3LdmhwqavUku2nKihkglR/5w/f165uLgod3d3lZWVVWpfv379FKAOHjxYajsXNBmlpKQoQAUFBVlVhos1GeXl5anDhw+ru+++WwFq2rRppfa/8sorClCzZ89WZrPZsn3Hjh3K09NTeXl5qaSkJKWUUtHR0crBwUG1b99excXFWY49cOCAatasWaWareqKtc81m6+pfOGHpL6z9sY98sU/Kmz6KrXoj+gaKpkQ9dPYsWMVoL766ivLtpMnTyqdTqd69OhR5vgLA8K2bdsUoHr37m3V6xcFhEv9vPLKK2XObdKkierYsWOpYFDkpZdeUoD69NNPlVJaEk9ArVy5ssyxCxYsaJABwerUFRdKSUmhSZMmuLi42OqS9ZqTURtdJE1GorGZMGECX3zxBcuWLePWW28FipuLxo0bd8nz/f39Aaq9Xkp5w07NZjMxMTGsXbuWl156if79+zNgwAAAEhMTOXPmDH5+fjz88MNlrnf8+HEAy8Je+/fvB+Cqq64qc2xD6zsoYnVAMJvNfPjhh0RFRXH06FFycnJwdHSkdevWREZGct999110Moq9c3Io7EPIl05l0bgMHTqUgIAA1qxZw7lz5/Dx8WH58uXodDpuu+22S57fvHlzXFxciI2NJS8vD0dHxwqPTUpK4uWXX8bf379M9uSLDTtdvXo1I0eO5KmnnuKPP/4AsKTTOXToEIcOHarwNdPT0y3HOzs74+3tXeaYwMDAi75He2VVp7LZbObqq6/mgQce4NChQ7Ru3ZqhQ4fSvn17jhw5QmRkJNdcc42ty1qvSKeyaKwMBgNjx44lLy+PlStXEhcXx5YtW7jyyisJCQm55Pk6nY5u3bphMpn4/vvvL3rs6tWr+d///seBAweqVMZrr72WgIAAS2odwDIK8o477kBpzeXl/rz33nuA9tDPyckhLS2tzPWTkpKqVB57YVVAeOONN9i4cSM33HADx44dY/fu3axZs4Zdu3Zx7Ngxrr/+ejZs2MD//vc/Gxe3/pAmI9GYlRxttHLlyko3FxV59tlnAXjqqacqHK1jNptZtGgRoNVKqqpZs2aWb/ugBQQPDw927NiB2Vz2/+2ff/7JvHnziI6OBqBDhw4AbNiwocyxRbWOBseaDouBAweqFi1aqJycnHL3Z2dnq7CwsFKT1+oraztf3v7tsAqbvkrNWLm7hkomRP3WsWNHpdfrVfv27ZWDg4M6c+ZMucdRzsQ0pZS69tprFaAuv/xyFR1denBGTk6Omjp1qmV/Xl6eZV9lJ6ZddtllClDZ2dmWbTNnzlSAmjt3bqmO5ZMnT6rmzZsrNzc3df78eaWUUnv37lUGg0F17NhRxcfHW449evSo5bnR0DqVraoh7N27l/79+1c4hdrZ2ZkBAwawb98+ay5vF4pqCDn5UkMQjdOECRMwm80cPHiQESNG4OvrW6Xzly9fzj333MP27dtp3749PXv2ZNKkSYwePZrw8HDeeOMNWrVqxZdffomDg0OVy9ekSRMA/v33X8u2p556im7dujFnzhy6dOnCpEmTGDRoEOHh4Zw8eZKPPvoIDw8PADp16sSMGTPYv38/Xbp04eabb2bMmDH06NGDnj174u/vj7Ozc5XLVZ9ZFRC8vLw4d+7cRY9JTU3Fy8vLqkLZA0unssxUFo3U+PHjLfmKrFkUy9XVlQ8++IAff/yRESNGkJCQwJdffsmuXbto27YtCxYs4MCBA7Rq1cqq8vXu3Rug1ARZd3d3tm3bxrPPPou7uzvffPMNx48fZ/jw4fz5559lOsVfeOEFli1bRseOHfnll1+Ij4/n6aefZvny5Q3zGWdNdeT6669Xbm5upfKLlLR3717l6uqqRo0aZc3la5W1Vasvt8WosOmr1F2fbKuhkgkh6tLZs2fV0aNHy51bdfDgQcsEt/qoVpuMZs6cSW5uLldddRVvvPEG//33H8nJyfz333+88cYbXH311eTl5TFjxgybBq/6xNlBOpWFaMjWr19P69atLR3gRUwmE7NmzUKv13PHHXfUTeFqiFXzEPr160dUVBRPPPEEjz/+eKl9Sinc3d15++236devn00KWR8VDTvNkXkIQjRII0eOpHfv3rz66qts27bN8jxbu3Ytu3bt4s4776RNmzZ1XErbsnpi2r333svo0aNZsmQJhw8fJi4ujuDgYNq0acPEiRMbRP7xi5Fhp0I0bM7Ozqxbt4433niDFStW8NZbb+Hq6kp4eDgLFy7kvvvuq+si2ly1Ulf4+/uXqSEUycnJIT8/39Jj39BI+mshGj5vb2/mzp3L3Llz67ootcKqPoTKmDhxYrnL3jUUxaOMpIYghGgYaiwgAJdcjNueWZqMZB6CEKKBqNGA0JA5F9YQcqTJSAjRQEhAsJLUEIQQDY0EBCuV7FRuyE1jQojGQwKClZwKJ6aZFRSYJSAIIeyfBAQrFdUQQEYaCWErd955Jy1btqzUsYMHD67Rlcv+/PPPcldWi4iIYOfOnZW+zkcffUSXLl3KbJ89ezatW7emWbNmzJkzx7J9zJgxlsV8alul5iHcfffdVb7w9u3bq3yOPSkZEHLyTbg72Ww1UiHsVpcuXXj88ceZNGmSVefPmzeP7OzsSh27dOlSq16jsp577rkya7p89dVXVVoLIT4+nscff7zMwkFz5szhm2++4f333yc+Pp7IyEjCw8OZOHEi9957L6+88goLFy60xduokko9xT755BOrLt6Ql9DU6XQ4GvXkFZilhiCEjRStt1wZQUFBNVaOv//+m/z8fMsiOYcOHaJv376kpqZW6ToPPvhgmeU28/LyeOedd/j999/p2rUroK0vXbQq3LBhw3jsscc4depUpVags6VKBYTFixfXcDHsk1NRQJB8RqIOKaXIrsHPoIuDoVJf7gYPHszevXuZPHkyGzZs4JNPPkGn0/H777/z+OOPc/XVVzNv3jy++OILnnvuOU6cOEGTJk24++67LTOB586dy44dO/jxxx/59NNPWbx4MY8++iizZs0iNjaWW2+9lffeew+9Xs+dd95pyZs2d+5cTpw4Qb9+/Zg/fz5nz54lMjLSct3U1FTuu+8+fvnlF9q2bcsLL7zAkCFDKhwQ8vrrr1tWhQMICwtj8+bNAHTu3LlS9+3LL7/k2LFjTJ06lbfeesuy/Y8//sDLy8sSDAAee+wxy991Oh233HILUVFRvPzyy5V6LVupVECYOHFiTZfDLjk7GEjPKZAagqhT2fkmOs5eV2PX3//cMFwdL/2oWLp0KREREfzf//0fkydPtmx/5JFHmDFjBhERESQkJDBx4kSefPJJbrzxRrZs2cLDDz/M4MGDiYiIKHPNI0eO8NFHH/H++++zZcsWpk2bxvDhwxkzZkyZY//44w8KCgr47LPPWLlyJc899xw33HADPXr0YNy4cWRmZvLTTz8RGxt70WZwpRTr168v9ZB2dnamU6dOl7wHRVJSUpg6dSrff/99mfWgT506RXBwMM8//zyffvopoD1jn376aQwGbbBKhw4deOONNyr9erYiDd/VIBlPhSgWFBSEk5MTAQEBpZp+7r//fssCOidPnmTevHlMnToVnU5Hr169eO211yrsRE1MTGTRokUEBATQr18/Pv74Y44fP17usenp6Xz44Yc4OTnRs2dPFi1axPHjx/H09OTnn3/m+PHjhIaG0q9fP44ePcozzzxT7nVOnjxJSkoK4eHhVt+LRx55hPHjx9O7d+8yASExMZGtW7fi4+PDkiVLSExMJDIyEhcXF5544gkAwsPD2bVrF0qpWm16l4BQDcVzEaSGIOqOi4OB/c8Nq9HrV0fJETahoaFMmjSJpUuXsn//frZs2cLJkycrPDcsLKxU5uSmTZtWeGzXrl0ty/oajUa8vb0BOHjwIEFBQYSGhlqO7du3b4XXSUpKwtPTEz8/v0u+t/KsXbuWrVu3smfPnnL3Ozg44Obmxpdffomrqyug1Sjmz59fKiDk5+dz9uxZy1KgtUECQjVICmxRH+h0uko16dQVFxcXy9/379/PNddcw8CBAxk0aBBz5869aBrpkudW5XVKys/PL/Mtu2jpz/JU91v533//TUxMjOVBbjKZKCgowMXFhW+++YaAgADCwsIswQCgffv2xMXFWX4vev3anvRafz9FNjZ69Gjmzp1Lt27dbHZNS8ZTaTISolKWLFlC165d+eqrrwDtYZmSklKjr1n0sC1aswUuPiw+ICCAtLQ0UlJSrKolTJkyhdtvv93y+7fffsvHH3/Mjz/+SEhICHFxcRw7doy0tDTLmsx79uyhdevWlnOio6MxGo21WjuARjAxbdu2bcyYMYMffvjB5td2lhqCEKXo9XoOHTrEmTNnyt3v5ubG3r17Wb9+PatXr+amm27i3Llz7N69u9LzD6qqQ4cODBo0iAkTJrB161ZWrlzJRx99ZOnAvVBoaCh+fn5ER0dX+jWSkpIs/SBNmjShXbt2lp/AwECcnJxo164dbm5utG3blj59+jB27Fj+/vtvVqxYwZw5c0pNgouOjqZ79+61PnS/wQeEDRs2kJaWhru7u82vXVRDkE5lITR333037733XqmZtyU9/PDD9OjRg1GjRvHEE08wcuRI3n//fZYuXVqm89WWvvrqKzw8PBg+fDjvvPMOCxcurPDbv06nY/DgwVUqz/Tp08sdJVWR5cuX4+bmxrXXXsvMmTOZNWsWd911l2X/wYMHufrqqyt9PZtR9dy+ffsUoAoKCsrs27Fjhxo2bJjy8fFRHTt2VNOnTy/3OKWUatGihfr333/LbA8ODlaACg4OrnLZ7l2yXYVNX6U+23KiyucKIWpHdna2WrFihcrIyLBs++GHH1SPHj0qPGfLli3qqquuqo3ilWE2m1XHjh1VTEyM1dew9rlWqT4EayOVTqfj119/tepcgKysLGbMmFHuvn///ZeIiAh69uzJm2++yYkTJ3jxxReJjY1l2bJlVr9mVUinshD1n5OTE9OmTeOXX37hmWee4cyZMzz99NMXTa/Rt29fjEYjBw8epH379rVYWli3bh0DBgygefPmtfq6UMlO5d9//92qi1vb/hUdHc2DDz7Itm3bKpwqvmDBAvz8/Fi9erWlt97Pz88yO7FNmzZVek2lFOfPn6/SOQa0pqLzGVnk5uZahrwJIeoPnU7Hd999x8MPP0y7du3w8fHh5ptvZsqUKRc9b/bs2bz77rulZhnXhkWLFvHSSy9V+XlUkrJ2dJLVdZIaFB8fr+bPn6/mz5+vhg4dWqbJKD8/Xzk7O6vHH3+81HmpqanK0dFRPffcc2WueakmI2t+fIfcr8Kmr1JeA8apOXPm2Pw+CCEapzlz5lj9XCr5UyNNRtaIi4vDZDJZVe0JDAxk2rRpAGRkZPDzzz+X2p+YmEhOTk6ZnCJeXl6EhoZalTo2KCioyp1a8389xpJtcUyd9iQzRtRutVII0XDNnDmzVOqMqurQoQPx8fFVPq/GAkJkZCQHDx7k4MGDNr/26dOnAcodo+vn52fZXxU6nQ5PT88qnePh5gyA0huluUgIYTNOTk7VeqZY21xvdUBYsGABX331VbnjjXNyckhISOCyyy6z9vIXpQrbx1Q57WRms5mCgoIy2yvKf1Id0qkshGhIrAoIH374IU888QRGoxEfHx+Sk5Px8PCgSZMmJCYmkp2dTffu3a1eR+FSivKLnz17tsy+M2fOlLs6UU1wdiheV1kIIeydVRPTPv74Yzw9PTly5AinT59m4sSJXHbZZRw7doyUlBTuvvtuMjIyqjzSp7ICAgJwdnbmv//+K7U9LS2NkydPEhYWViOveyFLDSFfaghCCPtnVUCIjo5m6NChhIWFodPpuO6669ixYwegJZiKiooiPT2dF1980aaFLWI0GrnllltYuXIlWVlZlu1ffPEFBQUFpfKI1KTibKdSQxBC2D+rAkJ6ejo+Pj6W31u3bk12djYJCQkAODo6cuWVV1ZrUtqlPPbYY5w5c4aRI0fy+eef8/zzz/Poo48ybtw42rZtW2OvW5IluZ30IQhRLRs3bsTDwwOAmJgYdDqdZfGYCxXtryhfEsCff/5ZKjdQkYiICHbu3Fnpcn300UdlmqAzMjIYP348fn5+9OzZk9WrV1v2jRkzxqpRjvWFVQEhKCiIQ4cOWX5v2bIlSil2795t2abT6di3b1/1S1iB7t278/vvv+Pg4MDDDz/MF198wWOPPVbhh6gmOEuTkRA2FxwczNGjR8tdFa2ynnvuOR544IFS27766iv++OOPSl8jPj6exx9/vMz2SZMmcfLkSb7//nvuuOMObrrpJstoynvvvZdXXnnF6nLXNasCwqBBg9i0aRPz58+3pHBt1aoVn332GQAFBQX89ddfpRa2sNacOXNQSpWbmbBXr178/PPPnD17lv379/PSSy9VmMGwJjhJp7IQNmc0GgkPD7fUGKrq77//Jj8/nw4dOgBw6NAhfHx8uP3226s0g/fBBx+0DGApkpiYyPfff8/ixYvp378/U6dOZcSIESxZsgSAYcOGsXHjRk6dOmVV2euaVQFh5syZNG3alOnTp/P1118D2ryDL774gr59+9K1a1dOnTrFjTfeaNPC1jdFnco5UkMQdUkpyMusuZ9KPkSvv/76MovdjBw50tJ0888//zBw4EDc3d3x8/Pj9ttvrzA9g06nszTtHD9+nOHDh+Pt7U2vXr3YunXrRcvx+uuvM2HCBMvvYWFhbN68mb1791bqfQB8+eWXHDt2jKlTp5bavmnTJsLCwmjVqpVl25AhQ9iwYYOl3LfccgtRUVGVfq36xKphp23atOGff/5h+fLlloWnp06dyqFDh/jiiy/IzMxk9OjRFabAbSikU1nUC/lZ8FJQzV3/qXhwdLvkYWPGjOGZZ56xrDiWnp7Ob7/9xqxZswBtIfnWrVuzbt06kpOTueeee3j99dd59tlnK7ymyWRi2LBhtGzZkjVr1hATE8NDDz1U4fFKKdavX19qlq+zs7PlOVUZKSkpTJ06le+//75M9oKkpCSCgkrf68DAQJKSkiy/d+jQgTfeeKPSr1efWD0xLSgoiEceeaTUtvfee4+3337bslxcQycT04QoNmrUKO655x527dpFjx49WL16NYGBgZb1iydOnMgdd9xheaCuXLnykh2w69atIyEhgW3btuHt7U2/fv1ISkoq8+wpcvLkSVJSUggPD7f6fTzyyCOMHz+e3r17lwkIqampZdZWcXd3LzUnKjw8nF27dlV7Kc66YFVAeP755+nduzfDhpVd2NvBwQEHBwfWr1/Pnj17KvyHq28SExPp2LFjufsiIyOJjIwss91ZRhmJ+sDBVfsWX5PXr4QmTZpw5ZVXsmrVKnr06ME333zDuHHjLPsfffRR1q1bx0cffcTu3bv56aefLjlE/NChQ3Tv3h1vb2/LtkGDBlV4fFJSEp6enlYtfQmwdu1atm7dyp49e8rd7+3tTXp6eqlt6enppcoXHh5Ofn4+Z8+erdElMKOioipsmkpMTLTqmlYFhKLl3soLCEXWrFnDe++9ZzcBISAggP3791fpnOI+BGkyEnVIp6tUk05tGDNmDIsXL2b69OmsWbOGv/76C9DWNrnqqqswGAyMGjWKyZMnV2oVQ6Ox7CPqYt+6q/ut/O+//yYmJsbyIDeZTJYWj2+++QZ/f/8ySePi4+NLDaApev2qdGBbo6IvqoBl7eaqqnRAuHCRnG+++abCKJqbm8uuXbtKdbw0RDIPQYjSRo8ezcMPP8ySJUsICwuzZCT+448/OHjwIKdPn8bZWUsK+fHHH1sWma9Iu3bt2L17N6mpqZZv4X/++WeFxwcEBJCWlkZKSopVtYQpU6aUqrV8++23fPzxx/z444+EhISQkZFBbGws0dHRlmapX3/9tdTymdHR0RiNxhqtHdSUSgeEkovk6HQ6Tp06ddGhVW5ubhft/GkIijqVTWZFgcmM0dDgl6gW4qKCg4Pp3bs3M2bMKDWG383NjbS0NL7++mvCw8P59ttvWbVqFX369CE5ObnC611zzTUEBQVx22238eyzzxIXF8eCBQsqPD40NBQ/Pz+io6MrHRCSkpLIzs4mLCyMJk2alHqQBwYG4uTkRLt27SzvY/To0dx11128/PLL/P3336xbt67U3IPo6Gi6d+9ud/0HUIVhp2az2fKjlOKhhx4qte3Cn/T0dO69996aLHudK2oyAqklCFFkzJgxnD17ttQ37YEDB/Lkk08ydepUbr/9dsxmMxs3buTEiROsWLGiwmvp9XrWrVuHTqdjxIgRvPzyyyxdurTC43U6HYMHD67S2ibTp08v9Q3/UhYvXkxwcDCjRo3is88+45tvvrEEDICDBw9avexwXdMpKxq6nnvuOfr06XPRPgR7UdTWFhwcXOXJJGazotVT2rT1f2YNwdfNsSaKKISogq1bt/L000/z22+/1fprK6Xo3Lkza9asqZM1kYtY+1yzqlN59uzZpX5PSkoiNjaW4ODgMjP7GjK9XoejQU+eySwdy0LUE3379sVoNHLw4EHat6/dlQzXrVvHgAED6jQYVIfVjd7p6ek89dRTeHt7ExgYSJ8+fQgJCcHT05MZM2aQkZFhy3LWW8WT06TJSIj6Yvbs2bz77ru1/rqLFi1i5syZtf66tmJVDSE3N5e+ffty8OBB/Pz8uPLKKwkKCuL06dNs2bKFV199ldWrV7Njxw4cHRt2M4qTg570XJmtLER90r9/f/r371/rr7ty5cpaf01bsqqG8MILL3DgwAEeeOABTpw4wffff8/ChQv59ttvOX78OPfffz979+6tsfUQ6hNZJEcI0VBYFRB++eUX2rVrx9tvv10mRYWLiwvvvPMObdu2Zd26dTYpZH0mcxGEEA2FVQHhwIED9O7du8Jxtnq9nj59+lRp6Je9ktnKQoiGwqqA0KxZs0tOi46Pj6dZs2ZWFcqeSKeyEKKhsCogdOvWjT/++KPC1Yc2bdrExo0b6d69e3XKZhckBbYQoqGwapTRc889x08//cTw4cO55557uPrqqwkMDCQhIYHffvuNDz/8EAcHB+bOnWvr8tYYa7KdAjg7SKeyEKL21US2U6tmKgOsWrWKyMhITp48WaovQSlFaGgo77zzDtdff71VhapN1ZmpDHDvkh38vD+RF2/szPg+YTVQQiGEqJpanakMcN111zFkyBB+/PFHDh8+bHnxNm3acP3111syGjZ0TlJDEEI0EJUKCJs2bSI4OLhMOmsnJyduvvnmGimYvZBOZSFEQ1GpTuWIiAjeeuutmi6LXSpeNU06lYUQ9q1SAUEpVeOr/9grWVdZCNFQyIou1VTUZCQT04QQ9k4CQjVJDUEI0VBUepTRgQMH+Oyzz6r8AhMmTKjyOfbEkstIRhkJIexcpQPCb7/9ZtUKRA09IDjLTGUhRANR6YDQvn17+vTpU5NlsUuWeQjSZCSEsHOVDgjXXHMNb775Zk2WxS5Jp7IQoqGQTuVqkk5lIURDIQGhmmSmshCioZCAUE3F2U6lyUgIYd8qFRAmT54sHcoVkCU0hRANRaU6lT/++OOaLofdsjQZSQ1BCGHnrE5/3dBYu0COdCoLIepCTSyQIwGhUEBAAPv376/yec7SZCSEqAMX+6JatEBOVUmncjUV1xCkyUgIYd8kIFRTUR9CvklhMkuKcCGE/ZKAUE0OxuJbmG+SZiMhhP2SgFBNRr3O8vcCqSEIIeyYBIRqKhkQTCYJCEII+yUBoZoMpWoI0mQkhLBfEhCqSafTWYKCNBkJIeyZBAQbMEpAEEI0ABIQbMASEGSUkRDCjklAsAFpMhJCNAQSEGzAwaDdRpmYJoSwZxIQbKCohiAT04QQ9kwCgg0U9SFIDUEIYc8kINiAsbDJSPoQhBD2TAKCDRSPMpKAIISwXxIQbKB4lJH0IQgh7JcskFPI2hXToLjJSPoQhBC1RVZMq0HWrpgG0mQkhKh9smJaPSUT04QQDYEEBBtwMBQNO5U+BCGE/ZKAYAPFE9OkhiCEsF8SEGzAqJdOZSGE/ZOAYANGg/QhCCHsnwQEG5D010KIhkACgg3IKCMhREMgAcEGZGKaEKIhkIBgA0ZJfy2EaAAkINiAQdJfCyEaAAkINuCgl/TXQgj7JwHBBgwGyWUkhLB/EhBswEEvqSuEEPZPAoINGKTJSAjRAEhAsAGZqSyEaAgkINiArIcghGgIJCDYgFGW0BRCNAASEGxA+hCEEA2BBAQbKOpDMEmTkRDCjklAsAFL6gppMhJC2DEJCDYgqSuEEA2Bsa4LUF8kJibSsWPHcvdFRkYSGRlZ4bkOBulDEELUrqioKKKiosrdl5iYaNU1JSAUCggIYP/+/Vada5AFcoQQtexiX1RDQkKIi4ur8jWlycgGjNJkJIRoACQg2IBRmoyEEA2ABAQbkJnKQoiGQAKCDRhkprIQogGQgGADDgbpQxBC2D8JCDZQlLoiX5qMhBB2TAKCDcgoIyFEQyABwQZkPQQhREMgAcEGZGKaEKIhkIBgA8bCPgRpMhJC2DMJCDYgTUZCiIZAAoINGKXJSAjRAEhAsIHiiWlSQxBC2C8JCDZQlP5a+hCEEPZMAoINFNUQ8qXJSAhhxyQg2IBMTBNCNAQSEGxA0l8LIRoCCQg2YJROZSFEAyABwQYMJZqMlJKgIISwTxIQbMBBX3wbpR9BCGGvJCBY639d4PmmkHwYQ+FMZZBmIyGE/ZKAYK2CPDDlQUGOpQ8BJCAIIeyXBARrGZ20PwtySwcEmYsghLBTEhCsVRQQTLmWTmWQGoIQwn5JQLCWpYaQg06nk8lpQgi7Z6zrAtQXiYmJdOzYsdx9kZGRREZGlt5odNb+LMgFtKGnBWYl6SuEELUiKiqKqKiocvclJiZadU0JCIUCAgLYv39/5U8wFPchgDY5LRepIQghake5X1QLhYSEEBcXV+VrSpORtYwXBARJXyGEsHMSEKxV1GRkKq4hABSYJCAIIeyTBARrGR21P0v0IQAUmKUPQQhhnyQgWMvSqZwDyCI5Qgj7JwHBWpY+hDyg5CI5EhCEEPZJAoK1DMXzEEAWyRFC2D8JCNYyXhAQDNKHIISwbxIQrGVJXVHUZFQ47FSajIQQdkoCgrUurCFIk5EQws5JQLCWZZSRVkMobjKSgCCEsE8SEKxVQaeypL8WQtgrCQjWuiB1RfHENKkhCCHskwQEa12QukImpgkh7J0EBGtVkLpC0l8LIeyVBARrXZC6QkYZCSHsnQQEa12QusKol/TXQgj7JgHBWheMMjIYZJSREMK+SUCw1gVLaBpllJEQws5JQLBWUaeyZYEcGWUkhLBvEhCsVUGnstQQhBD2SgKCtS5cD8EgS2gKIeybBARrlexUVgoHy7BT6VQWQtgnCQjWKqohoMCUb0l/nS9NRkIIOyUBwVpFfQgAplxLtlPpVBZC2CsJCNYyOBb/vSDX0qksqSuEEPZKAoK19PrioFCQI6krhBB2TwJCdZSYnGY0SOoKIYR9k4BQHYbijKcGWSBHCGHnJCBUR4k1EWRimhDC3klAqI4SayIYZYEcIYSdk4BQHSXSVxSvqSwBQQhhnyQgVEeJ9BXFaypLH4IQwj5JQKiOEukrHGRimhDCzhnrugD1RWJiIh07dix3X2RkJJGRkWV3WGoIucWpK6TJSAhRC6KiooiKiip3X2JiolXXlIBQKCAggP3791ftpHJGGUkNQQhRGyr8ogqEhIQQFxdX5WtKk1F1GEvMVDZIH4IQwr5JQKiOkjOVZZSREMLOSUCojnL6EGRimhDCXklAqA5DcUCQ9NdCCHsnAaE6yulUlvTXQgh7JQGhOoxlk9tJDUEIYa8kIFRHidQVDpLLSAhh5yQgVEc5qSvyZdipEMJOSUCojhKpKywT02TYqRDCTklAqA5jyYAgw06FEPZNAkJ1WEYZ5ZWYqSwBQQhhnyQgVEeJGoIsoSmEsHcSEKqjRKeyg15GGQkh7JsEhOooMezUYCgaZSQBQQhhnyQgVIehxJrKMjFNCGHnJCBURwXrISglQUEIYX8kIFSHsWQNofhWykgjIYQ9koBQHeX0IYA0Gwkh7JMEhOooMcqoqMkIJOOpEMI+SUCojnJSV4DUEIQQ9kkCQnUUNRmZ8zHoioOA9CEIIeyRBITqKGoyAnSmPFlXWQhh1yQgVEeJgFAqfYWkwBZC2CEJCNWhN4Ku8BYW5MkiOUIIuyYBoTp0utJDTy3rKktAEELYHwkI1SXpK4QQDYQEhOoqmb7CIH0IjZrZBJ/fBKum1nVJhLCKBITqKid9hYwyaqTOnYCjv8LOxSD5rIQdkoBQXeX0Icg8hEYqJ037U5khL6NuyyKEFSQgVJclfUVxk5H0ITRSueeL/55zvuLjhKinJCBUl6FEQJBlNBu3kkEgVwKCsD8SEKqrRKeyoagPQWoIjVNRk9GFfxfCTkhAqK4STUYO0mTUuEmTkbBzEhCqy1ic8bR4Ypo0GTVK0mQk7JwEhOoqZ00EqSE0UtJkJOycBITqKrUmgvQhNGqlmowkIAj7IwGhusoZdiozlRupkkFAmoyEHZKAUF2lRhnJegiNmnQqCzsnAaG6LKkripuMpA+hkZIagrBzEhCqy5K6orhTOV8CQuOUI30Iwr5JQKiuksNOi+YhyLDTxkmajISdk4BQXSVSVzhIcrvGSymZhyDsngSE6pLUFQIgPxvM+cW/Sw1B2CEJCNVlLJvcTjqVG6ELawTShyDskASE6irRh1A0D0FSVzRClhqB9hkgL11bQU0IOyIBobokdYWA4hqBe0Dxttz0uimLEFaSgFBdhpLJ7aQPodHKLQwIbk2L+5WkY1nYGWNdF6C+SExMpGPHjuXui4yMJDIysvwTi2oIpuL017JATiNU1GTk7AlOnlCQI/0IokZFRUURFRVV7r7ExESrrikBoVBAQAD79++v+omWiWm5sqZyY1ZUG3Dy1IJCZpKMNBI16mJfVENCQoiLi6vyNaXJqLpKdipLH0LjVVQbcPbSfkCajITdkYBQXSU7lQ3a7cyX5HaNz4VNRiBNRsLuSECoLkuTUfGKaSZJf934XNhkBNJkJOyOBITqMhRlOy2emCZ9CI1QOU1Gv+8+yoZDSXVYKCGqRgJCdZVIXWGU9RAarxJNRiZHrYZwKDaO51ZZMVBBiDoiAaG6HAoDgjLjRC4gncqNUmGTkdnRk7VHsgDwJJOYM1nkFUgTorAPEhCqy8kTnL0B8M45BcgSmo1SYQ3hy/9S2X66AABvfTYmsyL2bGZdlkyISpOAUF06Hfi1AcAn+wQgTUaNUmEfwtd70zmvXAEIcMoDIDpZAoKwDxIQbMGvLQBemTGAdCo3SoWpK9JxwdOnCQC+hhwAjklAEHZCAoItNGkNgFfmcUD6EBodpSyJ7M4rV3x8/ADw0ml9CdHJGXVWNCGqQgKCLRTWEDwyTgCS/rrRycsApf2bp+NKU7+mALgqrWZwTAKCsBMSEGyhsA/BPeMYoKSG0NgU9h/kYyQHR4KaNQPAsUALBNHJmSglnwlR/0lAsAWflqAzYCzIwp9U6UNobApHGKUrF0BH8yBtTQR9QTZGCkjLzudsZl4dFlCIypGAYAtGR/BpAUC4Pl6GnTY2hXMQzitXHAw6QgObWXa19dK+HMhII2EPJCDYSmGzUbguXoadNjaFTUbncaWlnxsODo7g4AZAB1/tsyD9CMIeyHoItuLXBg6vJVwXz1azYmfMOTYcSsLH1ZEuIV50DPTEzUlud4NkaTJypU2Ah7bN2QvyMy01hGMpUkMQ9Z88oWyliVZDaKVL4GhSBjct/KvMIW6OBrxcHHB3NqIUmJQCBXq9DoNOh0kpsvNM5OSb8Pd0pncLHy5v6UuQtwtORj1ORq1CpxQ4GPSENXFFp9PV6tsU5bDMQXCljb+7ts3ZE9LjaeleADgRnSQ1BFH/SUCwlcKhp+H6eABcHQ1c3SGA7DwTe+PSOH0+h8w8E5l5BejTFOZLtNadyczjQMJ5Pt0SU+Exwd4ujOjcjE7Bnuw4cY4/j6ZwLiufds086BjoSYiPCw4GPQ4GPe7ORnxcHfBxdaSln5vUVmypRKdyG//CGkLhmgjNXfMBqSEI+yBPBVsp7EMI0aXwzs3tuKprC1wdjWAqgOQDZEVvwXxiM05xW9DnppHQfjLx3R8FozNmpTCbFTqdDhdHA05GPceSM9l+4iw7Y86Rmp1HXoGZ3MIkaTogM89EXGo2H24+binCQP1/DNPF8NOJvmw73tSy3Y1sQnTJBOrO4EUmf6qu+PoH0TXEm15hPvRu6UtLPzepbVhJ5aShA87jRveAEjUEINBZCwixZ7Ukd45G6bYT9ZcEBFtxbaIluctJ5bqQbMhOhOVT4cRmyM/E9YLDQ/a9T0jSRhj2Erj4gClfy5zqFQouXnQI9GRk18Cyr6MUnNhM/vHNbPYcyXdHTZw4k8UNPieYfGQ+elXADL7kuOflJOr9aZ61j8C8E+gp7uiOU00Ym/QMKxIDWLFTS8jn5+5EzzBveoVpweFMZi5J53MxGHS0b+ZB+2aeBHo5S9AoR9b5s7gBmTpXwpponclFayJ46rJwczSQmWci9mwmrYtqEELUQxIQbEWn05qNTm2DxH2wbRHE7dD2OXpASE9ofgWEXQHZ5+CnaZB8ED4fU/ZaDm7g3x5C+0DI5dq3zfwcOB8HOxdD0n4cgMFeyxg84Rtw8IcPJoEqAK9QdGknaXV+G61KXtPFF7yCIesswefjWOfzKp+1i+LX0678ezKVlIxc1u1LZN2+xArfopNRT4CnMwGeTrT2d6dLsDedgz0J8nbBx9XRsmJcY5NRGBAcXL2LawCFTUa63HRaNXVnT1waR5MkIIj6TQKCLfm10QLCuqchK0X7lnjHtxDUHfSG0se2GAA/PwPR60FnAIMR8jIhMxnyMyFup/ZTHgdXrTaSFgsfDQHPYO28gM5w98/a3//7WrteaG8I6Q3uhU1I6Ynw6XW4pBzm3uiHuXfyKnI8erM3Lo0dMefYceIciedz8HN3xN/DmZwCEwcSzhOdnElugZnYs1nEns1i+4lzfMFJS5F0OvB2ccDNyYirowE/dyeGdWrG9d2C8HVzrJHbXV/kZqQC4O7lW7zRuXhd5fCmbuyJS2PXyXP0auGDl4sDDgZpOhL1jwQEWyrsRyArRfvzxve1mkF5XH1h9Ltlt+dnQ9opiP8XTv6tBYWi5iRHN2g9BC67A8wFsOxWbX/2Oa3Z6fal2jGObnDlk+W/rkcATPoRFl8HZ47AJ9fiPOkHerVoQ68WvnBl+aflFphITMslMT2H+NRsDp5OZ29cGvvjz3MmMw+l4FxWPueytDbzw4kZ/BV9hudX7efyFr6ENXElyNsFfw8nvF0d8HJxxM3JgLODAWejATcnA25ORpyMegrMiqxcE/lmM76ujugLax5KKRLP52JSiqASzVfpOfkcSEgn0MuZUN8LG+cuzWxW7E84z1/RKTgZDZZhws4OhkufDJizUwHw8vUr3lhYQyA3jVZN3dFj5v2Nx3h/4zH0OmjXzJMezb0J8nZhX3wa/8amkpKRh4+bA75uTgR6OdPa353WTd3x93TC1VELtP6eTjR1d0Kn05FbYOJEUjoZcfvwb9WdYB9Xy70SwhoSEGypcOgpAP0fgXYjqn4NBxctsPi1ga63XPzYST/Ct/fB8T/g5k8ss6UvyaMZTF4FS27Qmq0+uRbGL4ez0VqT1Pl4GPpCqfI7GQ00b+JK8ybaA/eGEpcrMJkLg0EembkFZOeZOHg6nW93xbEnLo0tx86w5diZShVNr4OSmT+cjHqa+7ri6mjgWHIm6bna4jMeTkbaNfMgPaeAw0npFKUKahvgzuD2/gR7u+BsNODiaCDQy5kQH1f8PZzQFV7/1LkstkRr5dp8JIUzF6SWMOh1BHk7E+TlQoCnMwrIyTeRnWciLVt7rwAdAz2Zka0NOy1KagdY+hDITGEiH3O/8yKWMJIXcm7FrOBAwnkOJJwv8/4Tz+eSeD6XAwnnWX+w/PWYHY16/NwcSUnPYpHhVa40/McnBcN4TX8ngV4u5OSbichdTwvdaaK9+pDV9DL8PFzxdiggSCXSuVNX2jcPqNS/h2hcdKqRZ90KCQkhLi6O4OBgTp06Vb2LZZ2Fd/tBYDe4fZnWDFQbTAXWvVZmCiwZDYl7yt/fbSz0i4SkAxC/C9ITtCGWeZlaM1jPO7W+jouIjkskbvd6zClHMaadIN7sy3cOIzidrbfMucjJN5Odbyp1XlPO0Vl/gj/MXTFR/E3doNeh10H+BbPBm3k6k5yRW+XEgtfodzJAvwcfQw6hbmZiHFvzVnoExzPLNnNNMqzjHuNPLCkYwsemERQUfp/6y2kKQbqznBjzEy26DtAO/u9r+OaeMtcw3/Qxp0OvZffJVHbGnOP0+Rw6BnowyOkoQeYEzjmHctoxlGNZLkQnZRCdnMHZzDyy8kxk5BaQkpFrCX4zjUu5z/iT5drz829hoWkUs4yfMdn4s2X7WeVOhnIhRJeCXqf4y9SR5Z0XMm1oW0J8ql6jEvWftc81CQi2DAgAZrPWoG4vo3Gyz8HnN2lNTx6B0GMi5GfBX+8AlfhohPbRajXn47UU0FfPho6F9YfzCfDJcDh3ovQ57s3gqqe1vo+jv8HJrZibtCan3Y2k+3bBa/cinHa8j64gm/SO4/i3+1wy80y0auquTcZDx7GUDA6dTsfZwcBlzb3x93AmNSuPjYeT2RJ9hvM5+eTkm8nIKSA+LZuEtJxSwcLBoOP+pnuYlvpSmbekHD3I6n4nh8PvJDbbiaTzuQSn7mD4P/ehRxv6m+3TntNtbsfx6BqCz/6tnffQP+iahGsXObxOa9IDcPPXBhPs/w4c3eGe36FpW+0LxJ7lsONjraZWUtP2cNUz0P66Up+lvAIziedzyN/9Na02PqJt7Hwz7F0BQKZ3e9xStWulh1yJc+IuHPLL1kTG5D7LXn173hrbneGdyxnNJuyaBAQr2Twg2KOCXDi9V6vZFNU0Yv+GVY/C2WPQrAsE9QDfVlpnqd4I+7+HQ2tAlf5mj84ANy2C8Ku1pqikfeDWVAsc3mFwcBWkVjzZrlzD50Hf+0tvM5u1h2jiXu3Ps8egWVe4/O7i5pqSb9FkJi07H51Ohw5wTTuC0ydDtA78DqMgpJf2vv5dpl0TwCMIbv4IfMPhvQGQmQQtBmqjyLLPln6BdtfCbUtBX9hZnHUWPhsN/p1g2Itan8Jno+HEJm1BJc8gOPFn8f1zcIPgHnAuRhssUCS0j/bvkrBbq6npjdr9TI2BghwY8BhcMwfWvwB/vKadY3SBMe9rgdlUAPH/aP1QTdvBr8/Crs/42+kKbkubQpdgL358aEDV/j1EvScBwUoSEC7BbC5+yF3ofLwWFBxctQfc7i9h9zLQ6bUhuMkHwT1AG/lU1L9RkKsNyf3zTW3kVeurIWyA9tDa9602Qqppe7h6Dpw5Cr/M0q532+fag/7UDq2zPeYvyEktWyYnT+h9D3S5VXsAlldTy0mDRVdp1285SBsJVhQIzWY4vAZ+ma3t1+m1sp89Bv4d4f9+0zr+1z+nBdE2Q6HrreDb8tL3Mj0R3h8EGaeLtwV0gZ6ToOttxSOTss/BX2/DlnehILvi67UeAuO+0u6jUrD+eW3U2sgFEFzBYIakg/BuHxQ6InIXEEszdj4zpMGPBGtsJCBYSQKCDZlN8MPD8O/n2u9OXnDnamjWufzjlSr9wDYVwPlT2uS8oofc95Hw79Lyz3dw0749+7fXmp/2LC/d9OLaRGuq6X6H9uDW6yHhP1j9BJzcCp4hcN9GcPMre+3cDO243cu03x3d4d4NxSPJrBW/Czb/T6uRtL/u4oHkfDxs+0D7dh/YXbuPSmlBMy8Dwq/Smuuq6vOb4egv/OA4kofPj+ftsZdxfbcga99Rg5ZXYGbj4WS6h3rT1MPp4gdnpsCxDeDkoQXrC79ImfLh8FqtZtjqSmg7vMaaliUgWEkCgo2ZzbDuKe1b9uiF2gO5Ogpy4bMxELNZe+gH99Qm67XorzURGRxKv/ah1bD9Q4jdWvrbdZM24N8BDvyg/W50gTt/qvibdJF/v4Dti2DQk9BuePXeS31xbCMsGUW+3onLs95iWK+OzLu5a12XqlxKKf49mcreuDTCm7rTKdgLLxeHS59oA8dTMnnky138dyoNLxcHnh/Zhuu9jqIzm0jM1hOfmkGwKYEmuScxxG2DuH+w9LsF94IR87TP3KntWs1t95eQUWLiZ/MrYOjz2pcDG5OAYCUJCHbAVKA187g1qfw5BXlau/uB72HnEktGUgC63AKDn65cM09DpBS8PxBO7+G1/Fv5zmMsm6cPtn1aktSTWpPfmaNa/4pPWLmHxaVm829sKv/FpXL4dDpN3LWZ8C4OBpbvPMneuNKd4kFezvh5OOHr5kgTNydaOKXTznQIg5sv6X7dMRidSMnIJe5cNonpuTgYdLgWZhruEuxFz+Y+OJ87zJGtP6A7vpH0fB0fek1B596Mph5OBHu74F2QxNtbznA2z4hOB54qg48c59NLf/iibznRpTVN8uIxmrK0DXqjNmeoiFtTzC0GoQ6uwmDKBeBjj/v4J/B2Qn1d6RDoSedAd1r4OKF3uESN5CIkIFhJAkIjkJsOu5Zq/QDdx2lDZhu7f7+A7+7nlPJjYO7/+HXaYMKbulf7sknnc/j7SDzeuxfR79THGM05AJxsNpR3/WdzPjsfP3dH/NydOHkuiy3HznDy7EX6SdDmXfRp6cuJM5mcPKstS9pPv5+R+q301+8jVJ9sOfa8cmWTuTOHzaGcwZPTypdN5i7kovWROJNLlMNbXG3YVeo14pUv9+RNI0758aTxK243/E4qbqz2vI2rR9+J48qJNMk6xnnlwjEViCt5OBp1HDf5c8TUjCMqmD9MXUnEl6acY47rSkaaf0eH4ozBn62mdvxs6slmQ29yzAY885J43OErbjJsBuCJ/HtZboqgm+4orzssxFefyR/dF3D1iDG4W5GZWAKClSQgiEYpPxvmt4PcNMblPcWw625j0hUtyj1UKW0m98GEdOJSs4lPzSYpPZfk9FzOZGjfch2NesILjhKRuZZRhr/w0mnfkHeZW9NVF41Bp7gpdw47Vbsy1zfodXQI9KBriDcdAj05m5HH0eQMks7nMLi9P7f2CsXX1QFO7SB351IMB77DmHuuuHzoSHBsgUfBGTzMZYfYnnNtwZrWz3LIFMRNBx+jq2kvucrIHoeu5DfvT/czq3FJi6ZA70y+3gmXgrQy1wDIdw1gWZv/4dOqO1e2bYqXiwNKKU6fzyE6KZPjKRkcScpg9Z4EUjLyCOQMeszE0bTMtfzcHbm2czP+L/tjmh/6GDN6dvkMp/u5tRgKhzbnKiPP6B4isP847h7QskpNZRIQrCQBQTRaqx6DHR/xnekKVrV+ng8nFbdlK6X4JzaVNXsSWLvvNKfOXfxb/I36TbzhuNDy+zmHAL7ymMSnGX2YlhvFzbr1xLl1Yl3fzzmTlUdKeh7ebg70bdWEy1v4Xvxb8KE18PMsLdVKEVc/6DgK2o/UcnU5e2qDGuJ3wbHftfQvmSlwcps2XFhnKBwtFo1y9CBp1OcEdI7QrpWTBivugqO/ar/7d4QRr0LaSdjwijbEt0kbmPANeDe/5G3NLTDx4+4Evt5xEqNeR//WfvRv7YevqyN5JhNmBa383DAa9Frz3Q9TYNfnlvNNHW/k9Nl0gk9r5XnZNIH/e3LBpTu1S5CAYCUJCKLRivsHFg0mVzkwmPfZOPtGTqRk8t2/cfywO75UU46zg54ezX0I8XEh0MuFQC9nmno44efuhN6cR9uvr8QpM5788KE4XPEgtLyyeJRN+ml4q4c25+Pmj6HzTZUv475vYcXd2nwNo4sWBLrepl2/MrPzs87CT49p1wEtKeSEb7U5HyWZTdqILoOjNjmzaLCCKV9LYR/cs3hYsK2ZTfDDQ3DkZxjyPHS7HZQZ89oZ6Ld9gEKH7v7NFY/WK4e1zzXJZSREYxV0Gcq/I05J+7kqfxNDF3hzXdoyhhl2El8wnLOOg7imYyAjOgdyZdumuDhWkOzvn88gMx7cA3C4fUnZobAezbTcXhte0ibGtRupJWu8lH3fFQeDbmPh2te0IZ1V4eqr5flqf502KXLQExDQqexxegP0faDsdoMDhA+u2mtWld6gJbosOQxbZ0A/4lXwbo7O4FSlYFAdEhCEaKx0OnSXTYB1MxlrWE/f9P1c56Cl4XjDcSHmwL/RXz4bQttBRcHAVACbX9f+3m9KxfMirpgCOz+B1FjYGgUDp2nbldKaalKOaKNxCnK1uSjnTsDxTcXB4Iaosinkq/A+6XKz9lOfXTjKS6eDKx6q1SJIQBCiMet6K+qX2XQihk7EoPQO6C4bD3tWoE/4R0u3odNr6TZCekOH66DV4OJv+Pu/00ZvufhAr7sqfh1HN7hmLnx7L/yxALqNA89Abcb6r3MqPq+6wUBUiazSYaXc3FyeffZZcnNz67oo9Y7cm4rVu3vj5oeuKM25iy+6ST/A9W/CQ/9Az8la3iRlhpTD2gz0L26H18Jh6S2w/kXYOE87t++D4HSJYatdbtEmFeZnwm9z4fDPWhMSaLN2u43F1HUcG+lD/si3tDQhoxdKMChUG58d6VS2svPl/PnzeHl5kZaWhqdnDXU22Sm5NxWrl/cmNRZ2fKJ1ppY3WS89EU7/pzXtHPhRW8q1JCdPeHQPuHhf+rXidmp5pEBLB5KXoQWe6/4HOl39vD/1RFXujXQqCyGs491cy5haEY8A8BgCbYbAsJchYRec2gkJ/2o1h553Vi4YgDZap/t4LT9VXoaWvmHEa/aTLr6Bk4AghKg8vV57qF8qB9TFXD1HG2Lp6A63LgGjZFqtLyQgCCFql0cAPPyv1jdgTbZWUWMkIAghat+lOqBFnZBRRkIIIQAJCEIIIQpJQBBCCAFIQKgTUVFRtX5ubZ9XHfbyHuXe2P686rCn91gX96dSVCMXHBysABUcHFyl89LS0hSg0tLSqvyaHTp0qPI51T23Ns+rzr2x9jXt5Ty5NxdXF/+vavs8a8+tyr2x9rkmNQQhhBCANBkJIYQoJAFBCCEEIAFBCCFEIQkIQgghAEl/jaOjI/n5+ej1egIDAyt9nlKK+Ph4goKC0FUxU2NiYiIBAQFVLWq1zq3N86pzb6x9TXs5T+7NxdXF/6vaPs/ac6tybxISEjCbzTg4OJCXl1fp12j0AcFgMGA2m+u6GEIIYXN6vR6TyVTp4xt9cjtnZ2dycnIwGAz4+/vXdXGEEKLakpKSMJlMODs7V+m8Rl9DEEIIoZFOZSGEEIAEBCGEEIUkIAghhAAkIAghhCgkAUEIIQQgw05FDcrPzy93UoxOp8PV1bUOSlR7MjMzy93u7OyMwWCo5dLYn8b82alLUkOwws6dOxk+fDi+vr506tSJGTNmVGnyR0OxbNkyevXqhaenJ82bN2f8+PHExMRY9r/44ou4u7uX+WnXrl0dlrrmnThxotz37e7uzoYNGyzHvfHGG/Ts2RNvb28iIiJYs2ZN3RW6lpjNZjIzMy/6A43vs7N//350Ol25z5HKfE5SUlK44447CA0NJTQ0lHHjxpGcnFzlckgNoYr+/fdfIiIi6NmzJ2+++SYnTpzgxRdfJDY2lmXLltV18WrNJ598wl133cXYsWN58sknSU5OZsGCBVx++eX8999/NGvWjCNHjtCtW7cyq0M5OjrWUalrx5EjRwD4+uuvCQoKKrWvc+fOAMyaNYsXX3yRxx57jGnTprF8+XJGjRrF999/z7XXXlvrZa4tmzZtIiIi4qLHKKUa1WcnKyuLGTNmlLuvMp+TrKwsBgwYQE5ODjNnzkSn0zFv3jz69+/PP//8g7u7e+ULU6XldIS64447VIsWLVRmZqZl27vvvqt0Op06fPhwHZasdrVq1UoNHjy41LbY2Fjl4uKinnjiCaWUUpdffrmaPHlyXRSvTkVFRSmj0ajy8/PL3Z+Wlqbc3NzUk08+adlmMplUv3791IABA2qrmHUiLS1Nbd68uczP77//rkJDQ9Udd9yhlGocn52jR4+qoUOHKm9vbwUoQBUUFFj2V/Zz8uGHHypA7d2717Jt3759SqfTqQ8//LBKZZImoyooKChgxYoV3HzzzaXaMceNG4eDgwNffvllHZau9uTk5HD8+HGGDh1aantoaCht2rRhz549gPZNuU2bNgCNqkntyJEjtGzZEqPRWG6erB9++IHMzEwmTpxo2abX65k4cSKbN28mNja2Notbqzw9Penfv3+Zn59++gk/Pz8++OADoHF8dlxdXRk6dCjPPPNMmf9LUPnPyRdffEGvXr3o1KmT5biOHTvSu3fvKrdaSECogsTERHJycizV/iJeXl6EhoaWaj9vyPR6PVu2bOGuu+4qtT05OZl9+/YRGhpKSkoKqamp/P3337Ru3RoHBweaN2/OY489RkZGRh2VvHYcOXIEnU7HkCFDcHV1xdPTkyFDhrB7924AYmJi0Ov1dOjQodR5RZ+rhhwQyrN69WqioqJYsWIFLi4ujeazExgYyLRp05g2bRpXXHFFmf2V/ZzExMSUeSYVHVfVZ5IEhCo4ffo0AE2aNCmzz8/Pz7K/oXN0dKRPnz6lkgHGxMRw9dVXYzQaeeihhyzt6Lt27eKJJ55g9erVTJ48mYULFzJ69Og6KnntOHLkCEePHqV79+588803vPnmm5w6dYp+/fpx+PBhTp8+jY+PD3p96f9+fn5+AI3mcwRabXPKlCnMmDGDVq1aATTqz05Jlf2cnD59usJnUkJCQpVeUzqVq0AV5gFU5eQDNJvNFBQU1HaR6lx2djavvfYar776Kg4ODixfvpwuXbpw6tQpvvzySyIiIix534cPH05wcDD3338/69ev56qrrqrj0teMl156ieDgYPr27WvZNnLkSNq2bcsLL7yAp6dnhZ8hoFF9jl599VXMZjNPPvmkZVtoaGij/eyUpJSq9OekouOq2twmNYQqKFpA5+zZs2X2nTlzhuDg4NouUp3asGEDXbp0Ye7cuYwZM4a9e/dy/fXXAxASEsJtt91WZhGQMWPGANq3v4bqpptuKhUMAPz9/enfvz+7du0iMDCQ1NTUMv0LZ86cAWg0n6P09HQWLFjAI488UipNc2P+7JRU2c9Js2bNbPZMkoBQBQEBATg7O/Pff/+V2p6WlsbJkycJCwuro5LVvrVr1zJ06FDc3d3Zvn07S5YsKfXh++eff/j999/LnFdU/fX29q6totaqpKQkfvrpJ86dO1dmn16vx9vbm7CwMMxmM/v27Su1v6gzvnnz5rVS1rr24YcfUlBQwJ133llqe2P97Fyosp+TsLCwMs+kouOq/EyyarxUIzZhwgQVFhZWatjpwoULlU6nU4cOHarDktWegoICFRISorp06VLqPpT0xhtvKL1er/bv319q+wcffKD0er3at29fbRS11iUlJSmj0ahmzpxZantiYqLy9vZW06dPtwwnfPzxxy37TSaTuuKKK1T//v1ru8h1Jjw8XI0fP77M9sb42Xn22WcrHHZ6qc/JRx99pAC1Z88ey7b9+/crnU6nFi1aVKVySECool27dil3d3cVERGhPvvsM/Xcc88pJyencj/YDdWff/6pABUZGanWrl1b5mfbtm3q7NmzqmXLliooKEjNnDlTff311+qJJ55QTk5O6tFHH63rt1CjHnnkEaXX69W4cePUZ599pqKiolSbNm1UWFiYSktLU0op9cwzzyidTqeeeOIJtWzZMjV69GhlNBrV6tWr67j0tWP37t0KUIsXLy6zrzF+dsoLCEpV7nOSmZmp2rZtq1q0aKEWLlyo3n33XRUWFqbatm1b4Re2ikhAsML27dvVkCFDlI+Pj+rQoYOaOXNmmX/Ihmz58uWWiTTl/URERCillDp27JgaN26cCgwMVG5ubqpXr15V/sZijwoKCtS8efNUu3btlIuLiwoPD1f33nuvSklJKXXc/PnzVffu3ZWnp6caNGiQWrt2bR2VuPY9//zzClCxsbHl7m9sn52KAoJSlfucJCcnq7Fjx6rg4GAVHBysxo0bp5KTk6tcDllCUwghBCCdykIIIQpJQBBCCAFIQBBCCFFIAoIQQghAAoIQQohCEhCEEEIAEhCEEEIUkoAghBACkIAghBCikAQEIUSDEBMTg06nq9TPp59+WtfFLUWn0zF48OC6LoYskCOEaFg8PDyYNGnSRY9p3759LZXGvkhAEEI0KE2aNOHtt9+u62LYJWkyEkIIAUhAEEI0YjqdjnvuuYeEhATuuusu2rRpg7+/PyNGjOCXX34p95wtW7YwatQoWrRogY+PDwMHDmT+/Pnlrl9cUFDACy+8QL9+/fDw8KBVq1ZMnjyZEydOlHvtxMRE7rvvPjp27IiHhwe9e/fm+++/L3Pcpk2buP766wkJCcHV1ZX27dvz9NNPc/78+WrdD1kPQQjRIJw4cUIBqkWLFpU+B1BDhw5V4eHhKjAwUN1+++3qmmuuUY6Ojkqv16uoqKhSx7///vvKYDAoFxcXNXz4cDV27FjVvHlzBahBgwap/Px8y7FZWVmqb9++ClCdOnVSkyZNUgMHDlSA8vf3V/Hx8aXK0aVLF9W6dWsVHh6uJkyYoAYNGqQApdfr1Z9//mk5dvXq1cpgMCgHBwd1xRVXqDvvvFN16tRJAWrEiBHVuIOyQI4QooEoCggeHh5qypQpF/3JyspSSinLok4DBw5Uqamplmtt3bpVeXl5KQ8PD8tCM6dPn1YeHh7Kz89P7d6923JsVlaWGj16tALUwoULLdtffPFFBaipU6cqs9ls2f7OO+8oQD344IOWbUXluO2221Rubq5l++zZsxVQahnNIUOGKEDt2rXLss1kMlmCz6lTp6y+hxIQhBANQlFAqMxP0cMfUDqdrtQDvsjcuXMVoBYsWKCUUurVV19VgHrttdfKHHvq1Cnl6OioOnfubNnm6+urmjZtqrKzs0sdazKZ1IABA9Qtt9xi2QYoR0dHdfr06VLH7t27VwFq8uTJlm3dunVTBoNBJSUllTr26NGjavPmzer8+fOVvWVlSB+CEKJBadGiBUr7slvhj5eXl+X44OBgunbtWuY6I0aMAODw4cOl/rzmmmvKHBscHEy7du04evQoSimSkpI4e/YsV1xxBc7OzqWO1ev1bNq0ia+//rrU9vDwcAICAkptc3d3L/NaN910EyaTiR49ejBr1ix+++030tPTCQ8Pp3///nh4eFTmNpVLAoIQolELDg4ud3tISAgAsbGxAMTFxQEQGBhY7vFBQUHk5OSQnJxs6TSu6Njy+Pv7V+q4p59+mkWLFuHr68sLL7zANddcg6+vL0OGDOHnn3+u9OuVRwKCEKJRS0pKKnd7fHw8oD3ooThwJCQklHv86dOncXR0pEmTJpZAkJycXOly6HS6Sh2n1+v5v//7P3bv3k1sbCyff/45kydP5u+//2bYsGGsWrWq0q9Z5tpWnymEEA1ATEwMx44dK7N97dq1ALRr1w6ANm3aAPDbb7+VOTYuLo4DBw7QunVrDAaDZTjo1q1bycvLK3N8REQEXbt2Res+qLysrCzmzp3LJ598AkBoaCjjx49n0aJFLF26FIAVK1ZU6ZolSUAQQjRqZrOZKVOmkJWVZdm2bds2XnvtNdzc3JgwYQIAEydOxN3dnXnz5rF3717LsdnZ2URGRpKXl8eDDz4IaN/2H3jgAeLi4pg9e3apB/8PP/zAxo0b6dChQ6VrBUVcXFyYP38+U6ZMISYmptS+oppOUVOXNSR1hRCiQTlz5gwPPfTQRY9p06YNDz/8MADNmzdn586dtG/fnoEDB5KcnMzGjRspKCjgrbfeolmzZgA0a9aMV199lSlTptC7d28GDx6Mt7c3mzdvJjY2liuvvJL777/f8hqzZs1izZo1zJs3j59++olevXqRmJjIunXr8PX1Zf78+VV+b0WB5rXXXqNz58706tWL8PBwoqOj+eOPP/D39+fuu++u8nUtrB6fJIQQ9UhVhp1GREQopZTl77Gxser2229XzZs3V35+fmro0KHql19+Kfd1Nm/erK677jrVvHlz5eXlpa644go1f/58ZTKZyhyblZWlZsyYoXr06KHc3NxUeHi4uvPOO9XJkydLHVeyTOW9p5LDTvPz89Xbb7+tLrvsMuXr66tcXV1Vu3bt1JQpU9Tx48ercQeV0hUWRgghGh2dTkdERAS///57XRelXpA+BCGEEIAEBCGEEIUkIAghhABklJEQohGTLtTSpIYghBACkIAghBCikAQEIYQQgAQEIYQQhSQgCCGEACQgCCGEKCQBQQghBCABQQghRKH/B5wC0Iu0dsT1AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "\n", + "result = np.mean(np.array(t_losses).reshape(-1, 2), axis=1)\n", + "ax.plot(range(len(result)), result, label=\"training ({:.2f})\".format(result.min()))\n", + "\n", + "result = np.mean(np.array(v_losses).reshape(-1, 2), axis=1)\n", + "ax.plot(range(len(result)), result, label=\"valid ({:.2f})\".format(result.min()))\n", + "\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_yscale(\"log\")\n", + "ax.legend(title=\"VICReg\", loc=\"best\", title_fontsize=15, fontsize=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(vicreg.state_dict(), f\"/pfclicvol/vicreg.pth\")\n", + "\n", + "with open(f\"/pfclicvol/vicreg_decoder_model_kwargs.pkl\", \"wb\") as f: # dump model architecture\n", + " pkl.dump(decoder_model_kwargs, f, protocol=pkl.HIGHEST_PROTOCOL)\n", + " \n", + "with open(f\"/pfclicvol/vicreg_encoder_model_kwargs.pkl\", \"wb\") as f: # dump model architecture\n", + " pkl.dump(encoder_model_kwargs, f, protocol=pkl.HIGHEST_PROTOCOL) " + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DataBatch(x=[13641, 14], ygen=[13641, 5], ygen_id=[13641], ycand=[13641, 5], ycand_id=[13641], batch=[13641])" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tracks" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ENCODER(\n", + " (nn1): Sequential(\n", + " (0): Linear(in_features=14, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): Linear(in_features=256, out_features=256, bias=True)\n", + " (3): ELU(alpha=1.0)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): Linear(in_features=256, out_features=256, bias=True)\n", + " )\n", + " (nn2): Sequential(\n", + " (0): Linear(in_features=15, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): Linear(in_features=256, out_features=256, bias=True)\n", + " (3): ELU(alpha=1.0)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): Linear(in_features=256, out_features=256, bias=True)\n", + " )\n", + " (conv): ModuleList(\n", + " (0): GravNetConv(256, 256, k=32)\n", + " (1): GravNetConv(256, 256, k=32)\n", + " (2): GravNetConv(256, 256, k=32)\n", + " )\n", + ")" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vicreg.encoder" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"/pfclicvol/vicreg_encoder_model_kwargs.pkl\", \"rb\") as f:\n", + " vicreg_encoder_model_kwargs = pkl.load(f)\n", + "with open(f\"/pfclicvol/vicreg_decoder_model_kwargs.pkl\", \"rb\") as f:\n", + " vicreg_decoder_model_kwargs = pkl.load(f) " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "encoder = ENCODER(**vicreg_encoder_model_kwargs)\n", + "decoder = DECODER(**vicreg_decoder_model_kwargs)\n", + "\n", + "vicreg = VICReg(encoder, decoder)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "vicreg_state_dict = torch.load(f\"/pfclicvol/vicreg.pth\", map_location=device)\n", + "vicreg.load_state_dict(vicreg_state_dict)\n", + "\n", + "vicreg = vicreg.to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "------> Progressing to MLPF trainings...\n", + "Will use 6461 events for train\n", + "Will use 718 events for valid\n" + ] + } + ], + "source": [ + "print(\"------> Progressing to MLPF trainings...\")\n", + "print(f\"Will use {len(data_mlpf_train)} events for train\")\n", + "print(f\"Will use {len(data_mlpf_valid)} events for valid\")\n", + "\n", + "train_loader = torch_geometric.loader.DataLoader(data_mlpf_train, 500)\n", + "valid_loader = torch_geometric.loader.DataLoader(data_mlpf_valid, 500)\n", + "\n", + "input_ = max(CLUSTERS_X, TRACKS_X) + 1 # max cz we pad when we concatenate them & +1 cz there's the `type` feature" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import math\n", + "import pickle as pkl\n", + "import time\n", + "from typing import Optional\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch\n", + "import tqdm\n", + "from torch import Tensor, nn\n", + "from torch.nn import functional as F\n", + "\n", + "matplotlib.use(\"Agg\")\n", + "\n", + "# Ignore divide by 0 errors\n", + "np.seterr(divide=\"ignore\", invalid=\"ignore\")\n", + "\n", + "# keep track of the training step across epochs\n", + "istep_global = 0\n", + "\n", + "\n", + "# from https://github.com/AdeelH/pytorch-multi-class-focal-loss/blob/master/focal_loss.py\n", + "class FocalLoss(nn.Module):\n", + " \"\"\"Focal Loss, as described in https://arxiv.org/abs/1708.02002.\n", + " It is essentially an enhancement to cross entropy loss and is\n", + " useful for classification tasks when there is a large class imbalance.\n", + " x is expected to contain raw, unnormalized scores for each class.\n", + " y is expected to contain class labels.\n", + " Shape:\n", + " - x: (batch_size, C) or (batch_size, C, d1, d2, ..., dK), K > 0.\n", + " - y: (batch_size,) or (batch_size, d1, d2, ..., dK), K > 0.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self, alpha: Optional[Tensor] = None, gamma: float = 0.0, reduction: str = \"mean\", ignore_index: int = -100\n", + " ):\n", + " \"\"\"Constructor.\n", + " Args:\n", + " alpha (Tensor, optional): Weights for each class. Defaults to None.\n", + " gamma (float, optional): A constant, as described in the paper.\n", + " Defaults to 0.\n", + " reduction (str, optional): 'mean', 'sum' or 'none'.\n", + " Defaults to 'mean'.\n", + " ignore_index (int, optional): class label to ignore.\n", + " Defaults to -100.\n", + " \"\"\"\n", + " if reduction not in (\"mean\", \"sum\", \"none\"):\n", + " raise ValueError('Reduction must be one of: \"mean\", \"sum\", \"none\".')\n", + "\n", + " super().__init__()\n", + " self.alpha = alpha\n", + " self.gamma = gamma\n", + " self.ignore_index = ignore_index\n", + " self.reduction = reduction\n", + "\n", + " self.nll_loss = nn.NLLLoss(weight=alpha, reduction=\"none\", ignore_index=ignore_index)\n", + "\n", + " def __repr__(self):\n", + " arg_keys = [\"alpha\", \"gamma\", \"ignore_index\", \"reduction\"]\n", + " arg_vals = [self.__dict__[k] for k in arg_keys]\n", + " arg_strs = [f\"{k}={v!r}\" for k, v in zip(arg_keys, arg_vals)]\n", + " arg_str = \", \".join(arg_strs)\n", + " return f\"{type(self).__name__}({arg_str})\"\n", + "\n", + " def forward(self, x: Tensor, y: Tensor) -> Tensor:\n", + " if x.ndim > 2:\n", + " # (N, C, d1, d2, ..., dK) --> (N * d1 * ... * dK, C)\n", + " c = x.shape[1]\n", + " x = x.permute(0, *range(2, x.ndim), 1).reshape(-1, c)\n", + " # (N, d1, d2, ..., dK) --> (N * d1 * ... * dK,)\n", + " y = y.view(-1)\n", + "\n", + " unignored_mask = y != self.ignore_index\n", + " y = y[unignored_mask]\n", + " if len(y) == 0:\n", + " return torch.tensor(0.0)\n", + " x = x[unignored_mask]\n", + "\n", + " # compute weighted cross entropy term: -alpha * log(pt)\n", + " # (alpha is already part of self.nll_loss)\n", + " log_p = F.log_softmax(x, dim=-1)\n", + " ce = self.nll_loss(log_p, y)\n", + "\n", + " # get true class column from each row\n", + " all_rows = torch.arange(len(x))\n", + " log_pt = log_p[all_rows, y]\n", + "\n", + " # compute focal term: (1 - pt)^gamma\n", + " pt = log_pt.exp()\n", + " focal_term = (1 - pt) ** self.gamma\n", + "\n", + " # the full loss: -alpha * ((1 - pt)^gamma) * log(pt)\n", + " loss = focal_term * ce\n", + "\n", + " if self.reduction == \"mean\":\n", + " loss = loss.mean()\n", + " elif self.reduction == \"sum\":\n", + " loss = loss.sum()\n", + "\n", + " return loss\n", + "\n", + "\n", + "def compute_weights(device, target_ids, num_classes):\n", + " \"\"\"\n", + " computes necessary weights to accomodate class imbalance in the loss function\n", + " \"\"\"\n", + "\n", + " vs, cs = torch.unique(target_ids, return_counts=True)\n", + " weights = torch.zeros(num_classes).to(device=device)\n", + " for k, v in zip(vs, cs):\n", + " weights[k] = 1.0 / math.sqrt(float(v))\n", + " # weights[2] = weights[2] * 3 # emphasize nhadrons\n", + " return weights\n", + "\n", + "\n", + "@torch.no_grad()\n", + "def validation_run(device, encoder, mlpf, train_loader, valid_loader, mode):\n", + " with torch.no_grad():\n", + " optimizer = None\n", + " optimizer_VICReg = None\n", + " ret = train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode)\n", + " return ret\n", + "\n", + "\n", + "def train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode):\n", + " \"\"\"\n", + " A training/validation run over a given epoch that gets called in the training_loop() function.\n", + " When optimizer is set to None, it freezes the model for a validation_run.\n", + " \"\"\"\n", + "\n", + " is_train = not (optimizer is None)\n", + " global istep_global\n", + "\n", + " loss_obj_id = FocalLoss(gamma=2.0)\n", + "\n", + " if is_train:\n", + " print(\"---->Initiating a training run\")\n", + " mlpf.train()\n", + " loader = train_loader\n", + " if optimizer_VICReg:\n", + " encoder.train()\n", + " else:\n", + " print(\"---->Initiating a validation run\")\n", + " mlpf.eval()\n", + " loader = valid_loader\n", + " if optimizer_VICReg:\n", + " encoder.eval()\n", + "\n", + " # initialize loss counters\n", + " epoch_loss_total, epoch_loss_id, epoch_loss_momentum, epoch_loss_charge = 0.0, 0.0, 0.0, 0.0\n", + "\n", + " for i, batch in tqdm.tqdm(enumerate(loader), total=len(loader)):\n", + "\n", + " if mode == \"ssl\":\n", + " # seperate PF-elements\n", + " tracks, clusters = distinguish_PFelements(batch.to(device))\n", + "\n", + " # ENCODE\n", + " embedding_tracks, embedding_clusters = encoder(tracks, clusters)\n", + "\n", + " # concat the inputs with embeddings\n", + " tracks.x = torch.cat([batch.x[batch.x[:, 0] == 1], embedding_tracks], axis=1)\n", + " clusters.x = torch.cat([batch.x[batch.x[:, 0] == 2], embedding_clusters], axis=1)\n", + "\n", + " # combine PF-elements\n", + " event = combine_PFelements(tracks, clusters)\n", + "\n", + " elif mode == \"native\":\n", + " event = batch.to(device)\n", + "\n", + " # make mlpf forward pass\n", + " event_on_device = event.to(device)\n", + " pred_ids_one_hot, pred_momentum, pred_charge = mlpf(event_on_device)\n", + " target_ids = event_on_device.ygen_id\n", + "\n", + " target_momentum = event_on_device.ygen[:, 1:].to(dtype=torch.float32)\n", + " target_charge = (event_on_device.ygen[:, 0] + 1).to(dtype=torch.float32) # -1, 0, 1\n", + "\n", + " loss_id = 100 * loss_obj_id(pred_ids_one_hot, target_ids)\n", + " # loss_id_old = torch.nn.functional.cross_entropy(pred_ids_one_hot, target_ids) # for classifying PID\n", + "\n", + " # for regression, mask the loss in cases there is no true particle\n", + " msk_true_particle = torch.unsqueeze((target_ids != 0).to(dtype=torch.float32), axis=-1)\n", + " loss_momentum = 10 * torch.nn.functional.huber_loss(\n", + " pred_momentum * msk_true_particle, target_momentum * msk_true_particle\n", + " ) # for regressing p4\n", + "\n", + " loss_charge = torch.nn.functional.cross_entropy(\n", + " pred_charge * msk_true_particle, (target_charge * msk_true_particle[:, 0]).to(dtype=torch.int64)\n", + " ) # for predicting charge\n", + " loss = loss_id + loss_momentum + loss_charge\n", + "\n", + " if is_train:\n", + " istep_global += 1\n", + "\n", + " # update parameters\n", + " if is_train:\n", + " for param in mlpf.parameters():\n", + " param.grad = None\n", + " if optimizer_VICReg:\n", + " for param in encoder.parameters():\n", + " param.grad = None\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " epoch_loss_total += loss.detach()\n", + " epoch_loss_id += loss_id.detach()\n", + " epoch_loss_momentum += loss_momentum.detach()\n", + " epoch_loss_charge += loss_charge.detach()\n", + "\n", + " epoch_loss_total = epoch_loss_total.cpu().item() / len(loader)\n", + " epoch_loss_id = epoch_loss_id.cpu().item() / len(loader)\n", + " epoch_loss_momentum = epoch_loss_momentum.cpu().item() / len(loader)\n", + " epoch_loss_charge = epoch_loss_charge.cpu().item() / len(loader)\n", + "\n", + " print(\n", + " \"loss_id={:.2f} loss_momentum={:.2f} loss_charge={:.2f}\".format(\n", + " epoch_loss_id, epoch_loss_momentum, epoch_loss_charge\n", + " )\n", + " )\n", + " return epoch_loss_total, epoch_loss_id, epoch_loss_momentum" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MLPF(\n", + " (nn_id): Sequential(\n", + " (0): Linear(in_features=272, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=6, bias=True)\n", + " )\n", + " (nn_pt): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_eta): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_phi): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_energy): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_charge): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=3, bias=True)\n", + " )\n", + ")\n" + ] + } + ], + "source": [ + "embedding_dim_VICReg = 256\n", + "ssl = 1\n", + "\n", + "mlpf_model_kwargs = {\n", + " \"input_dim\": input_,\n", + " \"width\": 256,\n", + " \"num_convs\": 0,\n", + " \"dropout\": 0.4,\n", + " \"ssl\": ssl,\n", + " \"VICReg_embedding_dim\": embedding_dim_VICReg\n", + "}\n", + "\n", + "mlpf = MLPF(**mlpf_model_kwargs).to(device)\n", + "print(mlpf)\n", + "\n", + "if ssl:\n", + " mode = \"ssl\"\n", + "else:\n", + " mode = \"native\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Training ssl MLPF over 300 epochs\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=75.06 loss_momentum=2.39 loss_charge=0.85\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=38.76 loss_momentum=1.78 loss_charge=0.64\n", + "epoch=1 / 300 train_loss=78.2951 valid_loss=41.1725 stale=0 time=0.77m eta=229.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=39.47 loss_momentum=2.11 loss_charge=0.66\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=32.94 loss_momentum=1.77 loss_charge=0.64\n", + "epoch=2 / 300 train_loss=42.2301 valid_loss=35.3418 stale=0 time=0.78m eta=231.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=33.16 loss_momentum=2.07 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.42 loss_momentum=1.76 loss_charge=0.63\n", + "epoch=3 / 300 train_loss=35.8689 valid_loss=32.8195 stale=0 time=0.8m eta=232.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=31.11 loss_momentum=2.05 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.19 loss_momentum=1.76 loss_charge=0.63\n", + "epoch=4 / 300 train_loss=33.7933 valid_loss=31.5805 stale=0 time=0.78m eta=231.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.01 loss_momentum=2.04 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.44 loss_momentum=1.75 loss_charge=0.63\n", + "epoch=5 / 300 train_loss=32.6841 valid_loss=30.8203 stale=0 time=0.77m eta=230.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.30 loss_momentum=2.03 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.94 loss_momentum=1.73 loss_charge=0.63\n", + "epoch=6 / 300 train_loss=31.9597 valid_loss=30.3071 stale=0 time=0.78m eta=229.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.80 loss_momentum=2.02 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.63 loss_momentum=1.71 loss_charge=0.63\n", + "epoch=7 / 300 train_loss=31.4511 valid_loss=29.978 stale=0 time=0.8m eta=229.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.41 loss_momentum=2.00 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.41 loss_momentum=1.70 loss_charge=0.63\n", + "epoch=8 / 300 train_loss=31.0473 valid_loss=29.7361 stale=0 time=0.77m eta=228.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.13 loss_momentum=1.98 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.22 loss_momentum=1.68 loss_charge=0.63\n", + "epoch=9 / 300 train_loss=30.7444 valid_loss=29.5291 stale=0 time=0.77m eta=227.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.90 loss_momentum=1.96 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.04 loss_momentum=1.66 loss_charge=0.63\n", + "epoch=10 / 300 train_loss=30.4921 valid_loss=29.3302 stale=0 time=0.78m eta=226.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.67 loss_momentum=1.94 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.83 loss_momentum=1.64 loss_charge=0.63\n", + "epoch=11 / 300 train_loss=30.2425 valid_loss=29.103 stale=0 time=0.78m eta=225.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.49 loss_momentum=1.92 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.62 loss_momentum=1.62 loss_charge=0.63\n", + "epoch=12 / 300 train_loss=30.0373 valid_loss=28.8738 stale=0 time=0.79m eta=225.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.29 loss_momentum=1.90 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.39 loss_momentum=1.61 loss_charge=0.63\n", + "epoch=13 / 300 train_loss=29.8226 valid_loss=28.6276 stale=0 time=0.78m eta=224.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.12 loss_momentum=1.89 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.14 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=14 / 300 train_loss=29.6363 valid_loss=28.372 stale=0 time=0.8m eta=223.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.92 loss_momentum=1.88 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.84 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=15 / 300 train_loss=29.425 valid_loss=28.0679 stale=0 time=0.76m eta=222.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.70 loss_momentum=1.87 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.48 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=16 / 300 train_loss=29.1987 valid_loss=27.7059 stale=0 time=0.77m eta=221.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.45 loss_momentum=1.86 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.08 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=17 / 300 train_loss=28.9468 valid_loss=27.2952 stale=0 time=0.8m eta=221.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.18 loss_momentum=1.86 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.63 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=18 / 300 train_loss=28.6636 valid_loss=26.8441 stale=0 time=0.77m eta=220.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.88 loss_momentum=1.85 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.20 loss_momentum=1.58 loss_charge=0.63\n", + "epoch=19 / 300 train_loss=28.3602 valid_loss=26.4126 stale=0 time=0.79m eta=219.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.56 loss_momentum=1.85 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.73 loss_momentum=1.58 loss_charge=0.63\n", + "epoch=20 / 300 train_loss=28.0401 valid_loss=25.9373 stale=0 time=0.76m eta=218.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.20 loss_momentum=1.85 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.27 loss_momentum=1.58 loss_charge=0.63\n", + "epoch=21 / 300 train_loss=27.6781 valid_loss=25.4809 stale=0 time=0.77m eta=217.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.83 loss_momentum=1.84 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.86 loss_momentum=1.57 loss_charge=0.63\n", + "epoch=22 / 300 train_loss=27.3014 valid_loss=25.0647 stale=0 time=0.76m eta=216.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.48 loss_momentum=1.84 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.51 loss_momentum=1.57 loss_charge=0.63\n", + "epoch=23 / 300 train_loss=26.9484 valid_loss=24.7175 stale=0 time=0.78m eta=215.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.14 loss_momentum=1.83 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.21 loss_momentum=1.57 loss_charge=0.63\n", + "epoch=24 / 300 train_loss=26.6089 valid_loss=24.4079 stale=0 time=0.76m eta=214.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.82 loss_momentum=1.83 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.95 loss_momentum=1.56 loss_charge=0.63\n", + "epoch=25 / 300 train_loss=26.2826 valid_loss=24.1493 stale=0 time=0.77m eta=214.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.51 loss_momentum=1.83 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.73 loss_momentum=1.56 loss_charge=0.63\n", + "epoch=26 / 300 train_loss=25.9685 valid_loss=23.9195 stale=0 time=0.79m eta=213.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.24 loss_momentum=1.82 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.52 loss_momentum=1.55 loss_charge=0.63\n", + "epoch=27 / 300 train_loss=25.6926 valid_loss=23.7023 stale=0 time=0.77m eta=212.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.96 loss_momentum=1.82 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.35 loss_momentum=1.55 loss_charge=0.63\n", + "epoch=28 / 300 train_loss=25.4042 valid_loss=23.5275 stale=0 time=0.78m eta=211.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.73 loss_momentum=1.81 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.21 loss_momentum=1.54 loss_charge=0.63\n", + "epoch=29 / 300 train_loss=25.1753 valid_loss=23.3834 stale=0 time=0.8m eta=211.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.55 loss_momentum=1.81 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.09 loss_momentum=1.54 loss_charge=0.63\n", + "epoch=30 / 300 train_loss=24.9844 valid_loss=23.2601 stale=0 time=0.8m eta=210.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.35 loss_momentum=1.80 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.99 loss_momentum=1.53 loss_charge=0.63\n", + "epoch=31 / 300 train_loss=24.7874 valid_loss=23.1601 stale=0 time=0.76m eta=209.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.20 loss_momentum=1.80 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.91 loss_momentum=1.53 loss_charge=0.63\n", + "epoch=32 / 300 train_loss=24.6232 valid_loss=23.073 stale=0 time=0.79m eta=208.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.07 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.84 loss_momentum=1.52 loss_charge=0.63\n", + "epoch=33 / 300 train_loss=24.4877 valid_loss=22.9963 stale=0 time=0.8m eta=208.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.95 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.79 loss_momentum=1.52 loss_charge=0.63\n", + "epoch=34 / 300 train_loss=24.3633 valid_loss=22.9399 stale=0 time=0.77m eta=207.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.84 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.51 loss_charge=0.63\n", + "epoch=35 / 300 train_loss=24.2503 valid_loss=22.8785 stale=0 time=0.78m eta=206.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.74 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.84it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.70 loss_momentum=1.51 loss_charge=0.63\n", + "epoch=36 / 300 train_loss=24.1478 valid_loss=22.8378 stale=0 time=0.79m eta=205.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.66 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.66 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=37 / 300 train_loss=24.0573 valid_loss=22.7958 stale=0 time=0.78m eta=205.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.57 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.62 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=38 / 300 train_loss=23.9704 valid_loss=22.7505 stale=0 time=0.77m eta=204.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.50 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.60 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=39 / 300 train_loss=23.8983 valid_loss=22.7232 stale=0 time=0.78m eta=203.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.45 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.74it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.56 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=40 / 300 train_loss=23.836 valid_loss=22.6853 stale=0 time=0.77m eta=202.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.38 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.54 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=41 / 300 train_loss=23.7698 valid_loss=22.6525 stale=0 time=0.78m eta=201.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.33 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.84it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=42 / 300 train_loss=23.7083 valid_loss=22.6277 stale=0 time=0.78m eta=201.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.28 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.49 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=43 / 300 train_loss=23.6533 valid_loss=22.5986 stale=0 time=0.77m eta=200.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.23 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.47 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=44 / 300 train_loss=23.607 valid_loss=22.5773 stale=0 time=0.79m eta=199.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.19 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=45 / 300 train_loss=23.5647 valid_loss=22.5521 stale=0 time=0.79m eta=198.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.15 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.43 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=46 / 300 train_loss=23.5212 valid_loss=22.5327 stale=0 time=0.79m eta=198.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.12 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=47 / 300 train_loss=23.4808 valid_loss=22.5084 stale=0 time=0.76m eta=197.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.08 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.39 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=48 / 300 train_loss=23.4373 valid_loss=22.4887 stale=0 time=0.76m eta=196.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.04 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.37 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=49 / 300 train_loss=23.4013 valid_loss=22.4666 stale=0 time=0.78m eta=195.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.02 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.36 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=50 / 300 train_loss=23.3727 valid_loss=22.448 stale=0 time=0.79m eta=194.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.99 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=51 / 300 train_loss=23.3471 valid_loss=22.4279 stale=0 time=0.78m eta=194.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.96 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=52 / 300 train_loss=23.3129 valid_loss=22.4121 stale=0 time=0.77m eta=193.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.93 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=53 / 300 train_loss=23.2767 valid_loss=22.3927 stale=0 time=0.77m eta=192.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.90 loss_momentum=1.71 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 2.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=54 / 300 train_loss=23.2398 valid_loss=22.3738 stale=0 time=0.78m eta=191.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.88 loss_momentum=1.71 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.29 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=55 / 300 train_loss=23.2129 valid_loss=22.3469 stale=0 time=0.76m eta=190.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.84 loss_momentum=1.70 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=56 / 300 train_loss=23.1705 valid_loss=22.321 stale=0 time=0.79m eta=190.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.84 loss_momentum=1.68 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=57 / 300 train_loss=23.1548 valid_loss=22.2798 stale=0 time=0.79m eta=189.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.80 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=58 / 300 train_loss=23.0948 valid_loss=22.2297 stale=0 time=0.82m eta=188.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.79 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.32 loss_charge=0.63\n", + "epoch=59 / 300 train_loss=23.0593 valid_loss=22.1881 stale=0 time=0.77m eta=187.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.77 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.31 loss_charge=0.63\n", + "epoch=60 / 300 train_loss=23.0157 valid_loss=22.1584 stale=0 time=0.77m eta=187.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.29 loss_charge=0.63\n", + "epoch=61 / 300 train_loss=22.9635 valid_loss=22.1333 stale=0 time=0.81m eta=186.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.73 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.28 loss_charge=0.63\n", + "epoch=62 / 300 train_loss=22.9328 valid_loss=22.1073 stale=0 time=0.76m eta=185.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:46<00:00, 1.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.71 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.27 loss_charge=0.63\n", + "epoch=63 / 300 train_loss=22.9025 valid_loss=22.0836 stale=0 time=0.82m eta=184.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.68 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.26 loss_charge=0.63\n", + "epoch=64 / 300 train_loss=22.8588 valid_loss=22.0627 stale=0 time=0.82m eta=184.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.67 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.25 loss_charge=0.63\n", + "epoch=65 / 300 train_loss=22.8363 valid_loss=22.0377 stale=0 time=0.79m eta=183.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.65 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.24 loss_charge=0.63\n", + "epoch=66 / 300 train_loss=22.7988 valid_loss=22.0162 stale=0 time=0.8m eta=182.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.65 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=67 / 300 train_loss=22.7889 valid_loss=21.9968 stale=0 time=0.8m eta=182.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.62 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.22 loss_charge=0.63\n", + "epoch=68 / 300 train_loss=22.7516 valid_loss=21.968 stale=0 time=0.78m eta=181.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.60 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=69 / 300 train_loss=22.7202 valid_loss=21.9527 stale=0 time=0.78m eta=180.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.58 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=70 / 300 train_loss=22.696 valid_loss=21.9307 stale=0 time=0.79m eta=179.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.56 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.08 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=71 / 300 train_loss=22.6683 valid_loss=21.9112 stale=0 time=0.79m eta=179.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.55 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.07 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=72 / 300 train_loss=22.6459 valid_loss=21.8915 stale=0 time=0.79m eta=178.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.53 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=73 / 300 train_loss=22.6248 valid_loss=21.8721 stale=0 time=0.82m eta=177.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.52 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=74 / 300 train_loss=22.6024 valid_loss=21.8626 stale=0 time=0.8m eta=176.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.50 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.04 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=75 / 300 train_loss=22.58 valid_loss=21.8404 stale=0 time=0.79m eta=176.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.50 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.02 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=76 / 300 train_loss=22.5751 valid_loss=21.8221 stale=0 time=0.76m eta=175.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.47 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.02 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=77 / 300 train_loss=22.5382 valid_loss=21.807 stale=0 time=0.8m eta=174.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.46 loss_momentum=1.43 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=78 / 300 train_loss=22.5263 valid_loss=21.7925 stale=0 time=0.77m eta=173.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.43 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=79 / 300 train_loss=22.5102 valid_loss=21.7721 stale=0 time=0.79m eta=172.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.99 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=80 / 300 train_loss=22.4934 valid_loss=21.7558 stale=0 time=0.77m eta=172.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.98 loss_momentum=1.13 loss_charge=0.63\n", + "epoch=81 / 300 train_loss=22.4644 valid_loss=21.7399 stale=0 time=0.8m eta=171.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.97 loss_momentum=1.13 loss_charge=0.63\n", + "epoch=82 / 300 train_loss=22.4462 valid_loss=21.7271 stale=0 time=0.8m eta=170.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.40 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.12 loss_charge=0.63\n", + "epoch=83 / 300 train_loss=22.433 valid_loss=21.7124 stale=0 time=0.78m eta=169.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.12 loss_charge=0.63\n", + "epoch=84 / 300 train_loss=22.4145 valid_loss=21.7023 stale=0 time=0.78m eta=169.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.36 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.94 loss_momentum=1.12 loss_charge=0.63\n", + "epoch=85 / 300 train_loss=22.392 valid_loss=21.6919 stale=0 time=0.78m eta=168.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.39 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.11 loss_charge=0.63\n", + "epoch=86 / 300 train_loss=22.3778 valid_loss=21.6754 stale=0 time=0.78m eta=167.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.39 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.11 loss_charge=0.63\n", + "epoch=87 / 300 train_loss=22.3675 valid_loss=21.6681 stale=0 time=0.81m eta=166.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.39 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:02<00:00, 2.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.92 loss_momentum=1.11 loss_charge=0.63\n", + "epoch=88 / 300 train_loss=22.366 valid_loss=21.6604 stale=0 time=0.79m eta=166.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=89 / 300 train_loss=22.3347 valid_loss=21.6473 stale=0 time=0.78m eta=165.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=90 / 300 train_loss=22.3205 valid_loss=21.6363 stale=0 time=0.78m eta=164.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=91 / 300 train_loss=22.3193 valid_loss=21.6282 stale=0 time=0.75m eta=163.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.89 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=92 / 300 train_loss=22.3024 valid_loss=21.6163 stale=0 time=0.79m eta=162.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:42<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=93 / 300 train_loss=22.2868 valid_loss=21.6124 stale=0 time=0.77m eta=162.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:45<00:00, 1.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=94 / 300 train_loss=22.2788 valid_loss=21.5998 stale=0 time=0.82m eta=161.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.10 loss_charge=0.63\n", + "epoch=95 / 300 train_loss=22.2554 valid_loss=21.593 stale=0 time=0.78m eta=160.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=96 / 300 train_loss=22.2495 valid_loss=21.5847 stale=0 time=0.79m eta=159.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.85 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=97 / 300 train_loss=22.2369 valid_loss=21.5754 stale=0 time=0.78m eta=158.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=98 / 300 train_loss=22.2241 valid_loss=21.5639 stale=0 time=0.78m eta=158.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=99 / 300 train_loss=22.2081 valid_loss=21.5564 stale=0 time=0.79m eta=157.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=100 / 300 train_loss=22.1974 valid_loss=21.5459 stale=0 time=0.79m eta=156.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.82 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=101 / 300 train_loss=22.1908 valid_loss=21.5382 stale=0 time=0.77m eta=155.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=102 / 300 train_loss=22.1812 valid_loss=21.5278 stale=0 time=0.8m eta=155.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:43<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.09 loss_charge=0.63\n", + "epoch=103 / 300 train_loss=22.17 valid_loss=21.5226 stale=0 time=0.79m eta=154.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 52/52 [00:44<00:00, 1.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:03<00:00, 1.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.80 loss_momentum=1.08 loss_charge=0.63\n", + "epoch=104 / 300 train_loss=22.1549 valid_loss=21.5145 stale=0 time=0.79m eta=153.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 21%|████████████████████▋ | 11/52 [00:09<00:33, 1.22it/s]" + ] + } + ], + "source": [ + "n_epochs = 300\n", + "lr = 5e-5\n", + "patience = 50\n", + "FineTune_VICReg=False\n", + "\n", + "# make mlpf specific directory\n", + "print(f\"- Training {mode} MLPF over {n_epochs} epochs\")\n", + "\n", + "t0_initial = time.time()\n", + "\n", + "losses_train_tot, losses_train_id, losses_train_momentum = [], [], []\n", + "losses_valid_tot, losses_valid_id, losses_valid_momentum = [], [], []\n", + "\n", + "best_val_loss_tot, best_val_loss_id, best_val_loss_momentum = 99999.9, 99999.9, 99999.9\n", + "stale_epochs = 0\n", + "\n", + "optimizer = torch.optim.AdamW(mlpf.parameters(), lr=lr)\n", + "\n", + "# set VICReg to evaluation mode\n", + "vicreg.encoder.eval()\n", + "optimizer_VICReg = None\n", + "\n", + "for epoch in range(n_epochs):\n", + " t0 = time.time()\n", + "\n", + " if stale_epochs > patience:\n", + " print(\"breaking due to stale epochs\")\n", + " break\n", + "\n", + " # training step\n", + " losses_t_tot, losses_t_id, losses_t_momentum = train(\n", + " device, vicreg.encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode\n", + " )\n", + " losses_train_tot.append(losses_t_tot)\n", + " losses_train_id.append(losses_t_id)\n", + " losses_train_momentum.append(losses_t_momentum)\n", + "\n", + " # validation step\n", + " losses_v_tot, losses_v_id, losses_v_momentum = validation_run(\n", + " device, vicreg.encoder, mlpf, train_loader, valid_loader, mode\n", + " )\n", + " losses_valid_tot.append(losses_v_tot)\n", + " losses_valid_id.append(losses_v_id)\n", + " losses_valid_momentum.append(losses_v_momentum)\n", + "\n", + " if losses_v_id < best_val_loss_id:\n", + " best_val_loss_id = losses_v_id\n", + " best_train_loss_id = losses_t_id\n", + "\n", + " if losses_v_momentum < best_val_loss_momentum:\n", + " best_val_loss_momentum = losses_v_momentum\n", + " best_train_loss_momentum = losses_t_momentum\n", + "\n", + " # early-stopping\n", + " if losses_v_tot < best_val_loss_tot:\n", + " best_val_loss_tot = losses_v_tot\n", + " best_train_loss_tot = losses_t_tot\n", + "\n", + " stale_epochs = 0\n", + " else:\n", + " stale_epochs += 1\n", + "\n", + " t1 = time.time()\n", + "\n", + " epochs_remaining = n_epochs - (epoch + 1)\n", + " time_per_epoch = (t1 - t0_initial) / (epoch + 1)\n", + " eta = epochs_remaining * time_per_epoch / 60\n", + "\n", + " print(\n", + " f\"epoch={epoch + 1} / {n_epochs} \"\n", + " + f\"train_loss={round(losses_train_tot[epoch], 4)} \"\n", + " + f\"valid_loss={round(losses_valid_tot[epoch], 4)} \"\n", + " + f\"stale={stale_epochs} \"\n", + " + f\"time={round((t1-t0)/60, 2)}m \"\n", + " + f\"eta={round(eta, 1)}m\"\n", + " )\n", + "\n", + " print(\"----------------------------------------------------------\")\n", + "print(f\"Done with training. Total training time is {round((time.time() - t0_initial)/60,3)}min\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "losses_to_plot[\"old\"] = {}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.plot(range(len(losses_train_tot)), losses_train_tot, label=\"training ({:.2f})\".format(best_train_loss_tot))\n", + "ax.plot(range(len(losses_valid_tot)), losses_valid_tot, label=\"validation ({:.2f})\".format(best_val_loss_tot))\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_ylim(0.8 * losses_train_tot[-1], 1.2 * losses_train_tot[-1])\n", + "if mode == \"ssl\":\n", + " ax.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss id plot\n", + "fig, (ax1,ax2) = plt.subplots(1,2, figsize=(10,4))\n", + "ax1.plot(range(len(losses_train_id)), losses_train_id, label=\"training ({:.2f})\".format(best_train_loss_id))\n", + "ax1.plot(range(len(losses_valid_id)), losses_valid_id, label=\"validation ({:.2f})\".format(best_val_loss_id))\n", + "ax1.set_xlabel(\"Epochs\")\n", + "ax1.set_ylabel(\"Classification Loss\")\n", + "ax1.set_ylim(0.8 * losses_train_id[-1], 1.2 * losses_train_id[-1])\n", + "if mode == \"ssl\":\n", + " ax1.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax1.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss momentum plot\n", + "ax2.plot(\n", + " range(len(losses_train_momentum)),\n", + " losses_train_momentum,\n", + " label=\"training ({:.2f})\".format(best_train_loss_momentum),\n", + ")\n", + "ax2.plot(\n", + " range(len(losses_valid_momentum)),\n", + " losses_valid_momentum,\n", + " label=\"validation ({:.2f})\".format(best_val_loss_momentum),\n", + ")\n", + "ax2.set_xlabel(\"Epochs\")\n", + "ax2.set_ylabel(\"Regression Loss\")\n", + "ax2.set_ylim(0.8 * losses_train_momentum[-1], 1.2 * losses_train_momentum[-1])\n", + "if mode == \"ssl\":\n", + " ax2.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax2.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "losses_to_plot[\"old\"][\"tot\"] = losses_valid_tot\n", + "losses_to_plot[\"old\"][\"id\"] = losses_valid_id\n", + "losses_to_plot[\"old\"][\"p4\"] = losses_valid_momentum" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "losses_to_plot = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "losses_to_plot[\"ssl\"] = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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1wL493WgUuVn3r1Lly5wcnLC9u3b8eDBA1haWirb1q1bBwDK06309HR888038PHxwZEjR2BhYQHg8cDK7t27Y8+ePYiPj0eTJk0MPv7MmTNx7tw5DB8+HMuWLUPFihUBAJs2bcLAgQO18i9evBh5eXmIjY3VeJOyZs0ahISEYOPGjfD390ebNm3Qpk0bbNu2DQDy7XcuInj77bdx584dfPPNNxg6dKiybc6cOQgPD0d4eDi+/fZbjf2WLFmCN954A4sWLYK5uTkAYOrUqZg5cyY2bNhQ4GDcI0eO4O7du/D39y/gW8pf8+bN8e233+LHH39E48aNNbatX78ewON+3QUJDQ1FbGws5s+fj/3796NFixZITEzEgQMH0KJFC3zyySf57n/q1CksXboUH374od6uEW3btsXChQtx7do1TvRAVJoYsxizjCRmGSIlJQXh4eFISUnBgQMHUK1aNezevbvIY43atm0LAIiJiUGrVq2Koab0vGE3PNJibm6OQYMG4Z9//tF4FX/nzh3s3r0brVu3VgJJTk4O/vvf/yI6OloJOgCgUqmUgZ63b982+NgigiVLliiDaNVBBwD69++PAQMGaO0THByMlStXanU5a968eaGPr/bbb7/h6NGj6N27t0bQAYApU6bA29sb3333HW7duqWxrVq1apg3b54SdID/dTVLTU0t8LgnTpwAADRq1KjQdX7Sa6+9hurVqyMiIgJffvklbt26heTkZERFRWHChAkAYNB0qRUqVFC67Z08eRIrVqxQ+pD7+/vDxsYm3/0nTpwIR0dHTJ48WW8e9SLR6nMnIioMxizTj1mGSE9Px4oVK7Bjxw5kZmaiRo0ayMnJKXK56hj0+++/F7ksej7xzVJxqmj9+AlZWatoXeQihg4disjISPzwww/o168fAGDjxo14+PAhRo8ereSrXr06xowZAwB49OgREhMTcenSJZw8eRLLly8v9HGvXLmCzMxMdOnSBVWqVNHa3qNHD61+6YMGDVL+/8aNG7h06RLOnTuHpUuXFvr4aufOnQMAdO3aVWubSqVC586dcebMGVy4cAHVq1dXtrVq1QrW1prff+XKhj8xVb/tqVGjxrNUW1G9enWsX78eISEhGDNmjHKNzMzMEBERgfnz58PR0bHAcsaMGYNly5Zh6NChCA8Ph4eHB65evYqoqCh88cUXOHv2LGJi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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.plot(range(len(losses_train_tot)), losses_train_tot, label=\"training ({:.2f})\".format(best_train_loss_tot))\n", + "ax.plot(range(len(losses_valid_tot)), losses_valid_tot, label=\"validation ({:.2f})\".format(best_val_loss_tot))\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_ylim(0.8 * losses_train_tot[-1], 1.2 * losses_train_tot[-1])\n", + "if mode == \"ssl\":\n", + " ax.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss id plot\n", + "fig, (ax1,ax2) = plt.subplots(1,2, figsize=(10,4))\n", + "ax1.plot(range(len(losses_train_id)), losses_train_id, label=\"training ({:.2f})\".format(best_train_loss_id))\n", + "ax1.plot(range(len(losses_valid_id)), losses_valid_id, label=\"validation ({:.2f})\".format(best_val_loss_id))\n", + "ax1.set_xlabel(\"Epochs\")\n", + "ax1.set_ylabel(\"Classification Loss\")\n", + "ax1.set_ylim(0.8 * losses_train_id[-1], 1.2 * losses_train_id[-1])\n", + "if mode == \"ssl\":\n", + " ax1.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax1.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss momentum plot\n", + "ax2.plot(\n", + " range(len(losses_train_momentum)),\n", + " losses_train_momentum,\n", + " label=\"training ({:.2f})\".format(best_train_loss_momentum),\n", + ")\n", + "ax2.plot(\n", + " range(len(losses_valid_momentum)),\n", + " losses_valid_momentum,\n", + " label=\"validation ({:.2f})\".format(best_val_loss_momentum),\n", + ")\n", + "ax2.set_xlabel(\"Epochs\")\n", + "ax2.set_ylabel(\"Regression Loss\")\n", + "ax2.set_ylim(0.8 * losses_train_momentum[-1], 1.2 * losses_train_momentum[-1])\n", + "if mode == \"ssl\":\n", + " ax2.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax2.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "losses_to_plot[\"ssl\"][\"tot\"] = losses_valid_tot\n", + "losses_to_plot[\"ssl\"][\"id\"] = losses_valid_id\n", + "losses_to_plot[\"ssl\"][\"p4\"] = losses_valid_momentum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Other" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/mlpf/pyg_ssl/VICReg.py b/mlpf/pyg_ssl/VICReg.py index aa2c7827d..330400105 100644 --- a/mlpf/pyg_ssl/VICReg.py +++ b/mlpf/pyg_ssl/VICReg.py @@ -1,12 +1,66 @@ import torch.nn as nn +from torch_geometric.data import Batch +from torch_geometric.nn import global_mean_pool from torch_geometric.nn.conv import GravNetConv from .utils import CLUSTERS_X, TRACKS_X -# define the Encoder that learns latent representations of tracks and clusters -# these representations will be used by MLPF which is the downstream task +class VICReg(nn.Module): + def __init__(self, encoder, decoder): + super(VICReg, self).__init__() + self.encoder = encoder + self.decoder = decoder + + def distinguish_PFelements(self, batch): + """Takes an event~Batch() and splits it into two Batch() objects representing the tracks/clusters.""" + + track_id = 1 + cluster_id = 2 + + tracks = Batch( + x=batch.x[batch.x[:, 0] == track_id][:, 1:].float()[ + :, :TRACKS_X + ], # remove the first input feature which is not needed anymore + ygen=batch.ygen[batch.x[:, 0] == track_id], + ygen_id=batch.ygen_id[batch.x[:, 0] == track_id], + ycand=batch.ycand[batch.x[:, 0] == track_id], + ycand_id=batch.ycand_id[batch.x[:, 0] == track_id], + batch=batch.batch[batch.x[:, 0] == track_id], + ) + clusters = Batch( + x=batch.x[batch.x[:, 0] == cluster_id][:, 1:].float()[ + :, :CLUSTERS_X + ], # remove the first input feature which is not needed anymore + ygen=batch.ygen[batch.x[:, 0] == cluster_id], + ygen_id=batch.ygen_id[batch.x[:, 0] == cluster_id], + ycand=batch.ycand[batch.x[:, 0] == cluster_id], + ycand_id=batch.ycand_id[batch.x[:, 0] == cluster_id], + batch=batch.batch[batch.x[:, 0] == cluster_id], + ) + return tracks, clusters + + def forward(self, event): + + # seperate tracks from clusters + tracks, clusters = self.distinguish_PFelements(event) + + # encode to retrieve the representations + track_representations, cluster_representations = self.encoder(tracks, clusters) + + # decode/expand to get the embeddings + embedding_tracks, embedding_clusters = self.decoder(track_representations, cluster_representations) + + # global pooling to be able to compute a loss + pooled_tracks = global_mean_pool(embedding_tracks, tracks.batch) + pooled_clusters = global_mean_pool(embedding_clusters, clusters.batch) + + return pooled_tracks, pooled_clusters + + class ENCODER(nn.Module): + """The Encoder part of VICReg which attempts to learns useful latent representations of tracks and clusters.""" + def __init__( self, width=126, @@ -66,8 +120,10 @@ def forward(self, tracks, clusters): return embedding_tracks, embedding_clusters -# define the decoder that expands the latent representations of tracks and clusters class DECODER(nn.Module): + """The Decoder part of VICReg which attempts to expand the learned latent representations + of tracks and clusters into a space where a loss can be computed.""" + def __init__( self, input_dim=34, diff --git a/mlpf/pyg_ssl/args.py b/mlpf/pyg_ssl/args.py index 31590af7b..fce3cdb88 100644 --- a/mlpf/pyg_ssl/args.py +++ b/mlpf/pyg_ssl/args.py @@ -28,17 +28,17 @@ def parse_args(): parser.add_argument("--overwrite", dest="overwrite", action="store_true", help="overwrites the model if True") # training hyperparameters - parser.add_argument("--lmbd", type=float, default=0.01, help="the lambda term in the VICReg loss") - parser.add_argument("--u", type=float, default=0.1, help="the mu term in the VICReg loss") - parser.add_argument("--v", type=float, default=0.1, help="the nu term in the VICReg loss") + parser.add_argument("--lmbd", type=float, default=1, help="the lambda term in the VICReg loss") + parser.add_argument("--mu", type=float, default=0.1, help="the mu term in the VICReg loss") + parser.add_argument("--nu", type=float, default=1e-9, help="the nu term in the VICReg loss") parser.add_argument("--n_epochs_mlpf", type=int, default=3, help="number of training epochs for mlpf") parser.add_argument("--n_epochs_VICReg", type=int, default=3, help="number of training epochs for VICReg") parser.add_argument("--lr", type=float, default=5e-5, help="learning rate") - parser.add_argument("--batch_size_mlpf", type=int, default=500, help="number of events to process at once") - parser.add_argument("--batch_size_VICReg", type=int, default=2000, help="number of events to process at once") + parser.add_argument("--bs_mlpf", type=int, default=500, help="number of events to process at once") + parser.add_argument("--bs_VICReg", type=int, default=2000, help="number of events to process at once") parser.add_argument("--patience", type=int, default=50, help="patience before early stopping") parser.add_argument( - "--FineTune_VICReg", dest="FineTune_VICReg", action="store_true", help="FineTune VICReg during MLPFtraining" + "--FineTune_VICReg", dest="FineTune_VICReg", action="store_true", help="FineTune VICReg during MLPF training" ) # VICReg encoder architecture diff --git a/mlpf/pyg_ssl/evaluate.py b/mlpf/pyg_ssl/evaluate.py index de42092db..864c72fd9 100644 --- a/mlpf/pyg_ssl/evaluate.py +++ b/mlpf/pyg_ssl/evaluate.py @@ -42,7 +42,7 @@ def particle_array_to_awkward(batch_ids, arr_id, arr_p4): return ret -def evaluate(device, encoder, decoder, mlpf, batch_size_mlpf, mode, outpath, samples): +def evaluate(device, encoder, mlpf, batch_size_mlpf, mode, outpath, samples): import fastjet import vector from jet_utils import build_dummy_array, match_two_jet_collections @@ -60,7 +60,6 @@ def evaluate(device, encoder, decoder, mlpf, batch_size_mlpf, mode, outpath, sam mlpf.eval() encoder.eval() - decoder.eval() for sample, data in samples.items(): print(f"Testing the {mode} model on the {sample}") @@ -74,7 +73,6 @@ def evaluate(device, encoder, decoder, mlpf, batch_size_mlpf, mode, outpath, sam mlpf.eval() encoder.eval() - decoder.eval() conf_matrix = np.zeros((6, 6)) with torch.no_grad(): diff --git a/mlpf/pyg_ssl/mlpf.py b/mlpf/pyg_ssl/mlpf.py index 8e501da66..b2f5751de 100644 --- a/mlpf/pyg_ssl/mlpf.py +++ b/mlpf/pyg_ssl/mlpf.py @@ -51,25 +51,49 @@ def forward(self, x, mask): return x -def ffn(input_dim, output_dim, width, act, dropout): - return nn.Sequential( - nn.Linear(input_dim, width), - act(), - torch.nn.LayerNorm(width), - nn.Dropout(dropout), - nn.Linear(width, width), - act(), - torch.nn.LayerNorm(width), - nn.Dropout(dropout), - nn.Linear(width, width), - act(), - torch.nn.LayerNorm(width), - nn.Dropout(dropout), - nn.Linear(width, width), - act(), - torch.nn.LayerNorm(width), - nn.Linear(width, output_dim), - ) +def ffn(input_dim, output_dim, width, act, dropout, ssl): + if ssl: + return nn.Sequential( + nn.Linear(input_dim, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Linear(width, output_dim), + ) + else: + return nn.Sequential( + nn.Linear(input_dim, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Dropout(dropout), + nn.Linear(width, width), + act(), + torch.nn.LayerNorm(width), + nn.Linear(width, output_dim), + ) class MLPF(nn.Module): @@ -80,99 +104,117 @@ def __init__( width=126, num_convs=2, k=32, - native_mlpf=False, propagate_dimensions=32, space_dimensions=4, dropout=0.4, + ssl=False, + VICReg_embedding_dim=0, ): super(MLPF, self).__init__() self.act = nn.ELU - self.native_mlpf = native_mlpf # boolean that is true for native mlpf and false for ssl self.dropout = dropout + self.input_dim = input_dim + self.num_convs = num_convs + self.ssl = ssl # boolean that is True for ssl and False for native mlpf # embedding of the inputs - self.nn0 = nn.Sequential( - nn.Linear(input_dim, width), - self.act(), - nn.Linear(width, width), - self.act(), - nn.Linear(width, width), - self.act(), - nn.Linear(width, embedding_dim), - ) - - self.conv_type = "gravnet" - # GNN that uses the embeddings learnt by VICReg as the input features - if self.conv_type == "gravnet": - self.conv_id = nn.ModuleList() - self.conv_reg = nn.ModuleList() - for i in range(num_convs): - self.conv_id.append(GravNetLayer(embedding_dim, space_dimensions, propagate_dimensions, k, dropout)) - self.conv_reg.append(GravNetLayer(embedding_dim, space_dimensions, propagate_dimensions, k, dropout)) - elif self.conv_type == "attention": - self.conv_id = nn.ModuleList() - self.conv_reg = nn.ModuleList() - - for i in range(num_convs): - self.conv_id.append(SelfAttentionLayer(embedding_dim)) - self.conv_reg.append(SelfAttentionLayer(embedding_dim)) + if num_convs != 0: + self.nn0 = nn.Sequential( + nn.Linear(input_dim, width), + self.act(), + nn.Linear(width, width), + self.act(), + nn.Linear(width, width), + self.act(), + nn.Linear(width, embedding_dim), + ) + + self.conv_type = "gravnet" + # GNN that uses the embeddings learnt by VICReg as the input features + if self.conv_type == "gravnet": + self.conv_id = nn.ModuleList() + self.conv_reg = nn.ModuleList() + for i in range(num_convs): + self.conv_id.append(GravNetLayer(embedding_dim, space_dimensions, propagate_dimensions, k, dropout)) + self.conv_reg.append(GravNetLayer(embedding_dim, space_dimensions, propagate_dimensions, k, dropout)) + elif self.conv_type == "attention": + self.conv_id = nn.ModuleList() + self.conv_reg = nn.ModuleList() + + for i in range(num_convs): + self.conv_id.append(SelfAttentionLayer(embedding_dim)) + self.conv_reg.append(SelfAttentionLayer(embedding_dim)) decoding_dim = input_dim + num_convs * embedding_dim + if ssl: + decoding_dim += VICReg_embedding_dim # DNN that acts on the node level to predict the PID - self.nn_id = ffn(decoding_dim, NUM_CLASSES, width, self.act, dropout) + self.nn_id = ffn(decoding_dim, NUM_CLASSES, width, self.act, dropout, ssl) # elementwise DNN for node momentum regression - self.nn_pt = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout) - self.nn_eta = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout) - self.nn_phi = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout) - self.nn_energy = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout) + self.nn_pt = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout, ssl) + self.nn_eta = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout, ssl) + self.nn_phi = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout, ssl) + self.nn_energy = ffn(decoding_dim + NUM_CLASSES, 1, width, self.act, dropout, ssl) # elementwise DNN for node charge regression, classes (-1, 0, 1) - self.nn_charge = ffn(decoding_dim + NUM_CLASSES, 3, width, self.act, dropout) + self.nn_charge = ffn(decoding_dim + NUM_CLASSES, 3, width, self.act, dropout, ssl) def forward(self, batch): # unfold the Batch object - input_ = batch.x.float() - batch_idx = batch.batch + if self.ssl: + input_ = batch.x.float()[:, : self.input_dim] + VICReg_embeddings = batch.x.float()[:, self.input_dim :] + else: + input_ = batch.x.float() - embedding = self.nn0(input_) + batch_idx = batch.batch embeddings_id = [] embeddings_reg = [] - if self.conv_type == "gravnet": - # perform a series of graph convolutions - for num, conv in enumerate(self.conv_id): - conv_input = embedding if num == 0 else embeddings_id[-1] - embeddings_id.append(conv(conv_input, batch_idx)) - for num, conv in enumerate(self.conv_reg): - conv_input = embedding if num == 0 else embeddings_reg[-1] - embeddings_reg.append(conv(conv_input, batch_idx)) - elif self.conv_type == "attention": - for num, conv in enumerate(self.conv_id): - conv_input = embedding if num == 0 else embeddings_id[-1] - input_padded, mask = torch_geometric.utils.to_dense_batch(conv_input, batch_idx) - out_padded = conv(input_padded, ~mask) - out_stacked = torch.cat([out_padded[i][mask[i]] for i in range(out_padded.shape[0])]) - assert out_stacked.shape[0] == conv_input.shape[0] - embeddings_id.append(out_stacked) - for num, conv in enumerate(self.conv_reg): - conv_input = embedding if num == 0 else embeddings_reg[-1] - input_padded, mask = torch_geometric.utils.to_dense_batch(conv_input, batch_idx) - out_padded = conv(input_padded, ~mask) - out_stacked = torch.cat([out_padded[i][mask[i]] for i in range(out_padded.shape[0])]) - assert out_stacked.shape[0] == conv_input.shape[0] - embeddings_reg.append(out_stacked) - - embedding_id = torch.cat([input_] + embeddings_id, axis=-1) + if self.num_convs != 0: + embedding = self.nn0(input_) + + if self.conv_type == "gravnet": + # perform a series of graph convolutions + for num, conv in enumerate(self.conv_id): + conv_input = embedding if num == 0 else embeddings_id[-1] + embeddings_id.append(conv(conv_input, batch_idx)) + for num, conv in enumerate(self.conv_reg): + conv_input = embedding if num == 0 else embeddings_reg[-1] + embeddings_reg.append(conv(conv_input, batch_idx)) + elif self.conv_type == "attention": + for num, conv in enumerate(self.conv_id): + conv_input = embedding if num == 0 else embeddings_id[-1] + input_padded, mask = torch_geometric.utils.to_dense_batch(conv_input, batch_idx) + out_padded = conv(input_padded, ~mask) + out_stacked = torch.cat([out_padded[i][mask[i]] for i in range(out_padded.shape[0])]) + assert out_stacked.shape[0] == conv_input.shape[0] + embeddings_id.append(out_stacked) + for num, conv in enumerate(self.conv_reg): + conv_input = embedding if num == 0 else embeddings_reg[-1] + input_padded, mask = torch_geometric.utils.to_dense_batch(conv_input, batch_idx) + out_padded = conv(input_padded, ~mask) + out_stacked = torch.cat([out_padded[i][mask[i]] for i in range(out_padded.shape[0])]) + assert out_stacked.shape[0] == conv_input.shape[0] + embeddings_reg.append(out_stacked) + + if self.ssl: + embedding_id = torch.cat([input_] + embeddings_id + [VICReg_embeddings], axis=-1) + else: + embedding_id = torch.cat([input_] + embeddings_id, axis=-1) # predict the PIDs preds_id = self.nn_id(embedding_id) - embedding_reg = torch.cat([input_] + embeddings_reg + [preds_id], axis=-1) + if self.ssl: + embedding_reg = torch.cat([input_] + embeddings_reg + [preds_id] + [VICReg_embeddings], axis=-1) + else: + embedding_reg = torch.cat([input_] + embeddings_reg + [preds_id], axis=-1) # predict the 4-momentum, add it to the (pt, eta, phi, E) of the PFelement preds_pt = self.nn_pt(embedding_reg) + input_[:, 1:2] diff --git a/mlpf/pyg_ssl/training_VICReg.py b/mlpf/pyg_ssl/training_VICReg.py index 8c47b936a..0ee700695 100644 --- a/mlpf/pyg_ssl/training_VICReg.py +++ b/mlpf/pyg_ssl/training_VICReg.py @@ -7,75 +7,83 @@ import numpy as np import torch import torch.nn.functional as F -from torch_geometric.nn import global_mean_pool - -from .utils import distinguish_PFelements matplotlib.use("Agg") # Ignore divide by 0 errors np.seterr(divide="ignore", invalid="ignore") +# # VICReg loss function +# def criterion(x, y, device="cuda", lmbd=25, epsilon=1e-3): +# bs = x.size(0) +# emb = x.size(1) + +# std_x = torch.sqrt(x.var(dim=0) + epsilon) +# std_y = torch.sqrt(y.var(dim=0) + epsilon) +# var_loss = torch.mean(F.relu(1 - std_x)) + torch.mean(F.relu(1 - std_y)) + +# invar_loss = F.mse_loss(x, y) + +# xNorm = (x - x.mean(0)) / x.std(0) +# yNorm = (y - y.mean(0)) / y.std(0) +# crossCorMat = (xNorm.T @ yNorm) / bs +# cross_loss = (crossCorMat * lmbd - torch.eye(emb, device=torch.device(device)) * lmbd).pow(2).sum() + +# return var_loss, invar_loss, cross_loss + + +def sum_off_diagonal(M): + """Sums the off-diagonal elements of a square matrix M.""" + return M.sum() - torch.diagonal(M).sum() + + +def off_diagonal(x): + """Copied from VICReg paper github https://github.com/facebookresearch/vicreg/""" + n, m = x.shape + assert n == m + return x.flatten()[:-1].view(n - 1, n + 1)[:, 1:].flatten() + # VICReg loss function -def criterion(x, y, device="cuda", lmbd=25, u=25, v=1, epsilon=1e-3): - bs = x.size(0) - emb = x.size(1) +def criterion(tracks, clusters, loss_hparams): + """Based on the pytorch pseudocode presented at the paper in Appendix A.""" + loss_ = {} + + N = tracks.size(0) # batch size + D = tracks.size(1) # dim of representations - std_x = torch.sqrt(x.var(dim=0) + epsilon) - std_y = torch.sqrt(y.var(dim=0) + epsilon) - var_loss = torch.mean(F.relu(1 - std_x)) + torch.mean(F.relu(1 - std_y)) + # invariance loss + loss_["Invariance"] = F.mse_loss(tracks, clusters) + loss_["Invariance"] *= loss_hparams["lmbd"] - invar_loss = F.mse_loss(x, y) + # variance loss + std_tracks = torch.sqrt(tracks.var(dim=0) + 1e-04) + std_clusters = torch.sqrt(clusters.var(dim=0) + 1e-04) + loss_["Variance"] = torch.mean(F.relu(1 - std_tracks)) + torch.mean(F.relu(1 - std_clusters)) + loss_["Variance"] *= loss_hparams["mu"] - xNorm = (x - x.mean(0)) / x.std(0) - yNorm = (y - y.mean(0)) / y.std(0) - crossCorMat = (xNorm.T @ yNorm) / bs - cross_loss = (crossCorMat * lmbd - torch.eye(emb, device=torch.device(device)) * lmbd).pow(2).sum() + # covariance loss + tracks = tracks - tracks.mean(dim=0) + clusters = clusters - clusters.mean(dim=0) + cov_tracks = (tracks.T @ tracks) / (N - 1) + cov_clusters = (clusters.T @ clusters) / (N - 1) - loss = u * var_loss + v * invar_loss + cross_loss + # loss_["Covariance"] = ( sum_off_diagonal(cov_tracks.pow_(2)) + sum_off_diagonal(cov_clusters.pow_(2)) ) / D + loss_["Covariance"] = off_diagonal(cov_tracks).pow_(2).sum().div(D) + off_diagonal(cov_clusters).pow_(2).sum().div(D) + loss_["Covariance"] *= loss_hparams["nu"] - return loss + return loss_ @torch.no_grad() -def validation_run( - device, - encoder, - decoder, - train_loader, - valid_loader, - lmbd, - u, - v, -): +def validation_run(multi_gpu, device, vicreg, loaders, loss_hparams): with torch.no_grad(): optimizer = None - ret = train( - device, - encoder, - decoder, - train_loader, - valid_loader, - optimizer, - lmbd, - u, - v, - ) + ret = train(multi_gpu, device, vicreg, loaders, optimizer, loss_hparams) return ret -def train( - device, - encoder, - decoder, - train_loader, - valid_loader, - optimizer, - lmbd, - u, - v, -): +def train(multi_gpu, device, vicreg, loaders, optimizer, loss_hparams): """ A training/validation run over a given epoch that gets called in the training_loop() function. When optimizer is set to None, it freezes the model for a validation_run. @@ -85,81 +93,82 @@ def train( if is_train: print("---->Initiating a training run") - encoder.train() - decoder.train() - loader = train_loader + vicreg.train() + loader = loaders["train"] else: print("---->Initiating a validation run") - encoder.eval() - decoder.eval() - loader = valid_loader + vicreg.eval() + loader = loaders["valid"] # initialize loss counters - losses = 0 + losses_of_interest = ["Total", "Invariance", "Variance", "Covariance"] + losses = {} + for loss in losses_of_interest: + losses[loss] = 0.0 for i, batch in enumerate(loader): - # make transformation - tracks, clusters = distinguish_PFelements(batch.to(device)) - # ENCODE - embedding_tracks, embedding_clusters = encoder(tracks, clusters) - # POOLING - pooled_tracks = global_mean_pool(embedding_tracks, tracks.batch) - pooled_clusters = global_mean_pool(embedding_clusters, clusters.batch) - # DECODE - out_tracks, out_clusters = decoder(pooled_tracks, pooled_clusters) + if multi_gpu: + X = batch + else: + X = batch.to(device) + + # run VICReg forward pass to get the embeddings + embedding_tracks, embedding_clusters = vicreg(X) # compute loss - loss = criterion(out_tracks, out_clusters, device, lmbd, u, v) + loss_ = criterion(embedding_tracks, embedding_clusters, loss_hparams) + loss_["Total"] = loss_["Invariance"] + loss_["Variance"] + loss_["Covariance"] # update parameters if is_train: - for param in encoder.parameters(): + for param in vicreg.parameters(): param.grad = None - for param in decoder.parameters(): - param.grad = None - loss.backward() + loss_["Total"].backward() optimizer.step() - losses += loss.detach() + print(f'debug: tot={loss_["Total"]} - {loss_["Invariance"]} - {loss_["Variance"]} - {loss_["Covariance"]}') + + # accumulate the loss to make plots + for loss in losses_of_interest: + losses[loss] += loss_[loss].detach() - losses = losses.cpu().item() / (len(loader)) + # if i == 2: + # break + + for loss in losses_of_interest: + losses[loss] = losses[loss].cpu().item() / (len(loader)) return losses -def training_loop_VICReg( - device, - encoder, - decoder, - train_loader, - valid_loader, - n_epochs, - patience, - optimizer, - outpath, - lmbd, - u, - v, -): +def training_loop_VICReg(multi_gpu, device, vicreg, loaders, n_epochs, patience, optimizer, loss_hparams, outpath): """ Main function to perform training. Will call the train() and validation_run() functions every epoch. Args: - encoder: the encoder part of VICReg - decoder: the decoder part of VICReg - train_loader: a pytorch Dataloader for training - valid_loader: a pytorch Dataloader for validation - patience: number of stale epochs allowed before stopping the training - optimizer: optimizer to use for training (by default: Adam) + multi_gpu: flag to indicate if there's more than 1 gpu available to use. + device: "cpu" or "cuda". + vicreg: the VICReg model composed of an Encoder/Decoder. + loaders: a dict() object with keys "train" and "valid", each refering to a pytorch Dataloader. + patience: number of stale epochs allowed before stopping the training. + optimizer: optimizer to use for training (by default SGD which proved more stable). + loss_hparams: a dict() object with keys "lmbd", "u", "v" containing loss hyperparameters. outpath: path to store the model weights and training plots """ t0_initial = time.time() - losses_train, losses_valid = [], [] + losses_of_interest = ["Total", "Invariance", "Variance", "Covariance"] + + best_val_loss, best_train_loss = {}, {} + losses = {} + losses["train"], losses["valid"] = {}, {} + for loss in losses_of_interest: + best_val_loss[loss] = 9999999.9 + losses["train"][loss] = [] + losses["valid"][loss] = [] - best_val_loss = 99999.9 stale_epochs = 0 for epoch in range(n_epochs): @@ -170,58 +179,44 @@ def training_loop_VICReg( break # training step - losses_t = train( - device, - encoder, - decoder, - train_loader, - valid_loader, - optimizer, - lmbd, - u, - v, - ) + losses_t = train(multi_gpu, device, vicreg, loaders, optimizer, loss_hparams) - losses_train.append(losses_t) + for loss in losses_of_interest: + losses["train"][loss].append(losses_t[loss]) # validation step - losses_v = validation_run( - device, - encoder, - decoder, - train_loader, - valid_loader, - lmbd, - u, - v, - ) - - losses_valid.append(losses_v) - - # if (epoch % 4) == 0: - # early-stopping - if losses_v < best_val_loss: - best_val_loss = losses_v - best_train_loss = losses_t - - stale_epochs = 0 - - try: - encoder_state_dict = encoder.module.state_dict() - except AttributeError: - encoder_state_dict = encoder.state_dict() - try: - decoder_state_dict = decoder.module.state_dict() - except AttributeError: - decoder_state_dict = decoder.state_dict() - - torch.save(encoder_state_dict, f"{outpath}/encoder_best_epoch_weights.pth") - torch.save(decoder_state_dict, f"{outpath}/decoder_best_epoch_weights.pth") - - with open(f"{outpath}/VICReg_best_epoch.json", "w") as fp: # dump best epoch - json.dump({"best_epoch": epoch}, fp) - else: - stale_epochs += 1 + losses_v = validation_run(multi_gpu, device, vicreg, loaders, loss_hparams) + + for loss in losses_of_interest: + losses["valid"][loss].append(losses_v[loss]) + + # save the lowest value of each component of the loss to print it on the legend of the loss plots + for loss in losses_of_interest: + if loss == "Total": + if losses_v[loss] < best_val_loss[loss]: + best_val_loss[loss] = losses_v[loss] + best_train_loss[loss] = losses_t[loss] + + # save the model differently if the model was wrapped with DataParallel + if multi_gpu: + state_dict = vicreg.module.state_dict() + else: + state_dict = vicreg.state_dict() + + torch.save(state_dict, f"{outpath}/VICReg_best_epoch_weights.pth") + + # dump best epoch + with open(f"{outpath}/VICReg_best_epoch.json", "w") as fp: + json.dump({"best_epoch": epoch}, fp) + + # for early-stopping purposes + stale_epochs = 0 + else: + stale_epochs += 1 + else: + if losses_v[loss] < best_val_loss[loss]: + best_val_loss[loss] = losses_v[loss] + best_train_loss[loss] = losses_t[loss] t1 = time.time() @@ -231,25 +226,39 @@ def training_loop_VICReg( print( f"epoch={epoch + 1} / {n_epochs} " - + f"train_loss={round(losses_train[epoch], 4)} " - + f"valid_loss={round(losses_valid[epoch], 4)} " + + f"train_loss={round(losses_t['Total'], 4)} " + + f"valid_loss={round(losses_v['Total'], 4)} " + f"stale={stale_epochs} " + f"time={round((t1-t0)/60, 2)}m " + f"eta={round(eta, 1)}m" ) - fig, ax = plt.subplots() - ax.plot(range(len(losses_train)), losses_train, label="training ({:.2f})".format(best_train_loss)) - ax.plot(range(len(losses_valid)), losses_valid, label="training ({:.2f})".format(best_val_loss)) - ax.set_xlabel("Epochs") - ax.set_ylabel("Loss") - ax.legend(title="VICReg", loc="best", title_fontsize=20, fontsize=15) - plt.savefig(f"{outpath}/VICReg_loss.pdf") - - with open(f"{outpath}/VICReg_loss_train.pkl", "wb") as f: - pkl.dump(losses_train, f) - with open(f"{outpath}/VICReg_loss_valid.pkl", "wb") as f: - pkl.dump(losses_valid, f) + for loss in losses_of_interest: + # make total loss plot + fig, ax = plt.subplots() + ax.plot( + range(len(losses["train"][loss])), losses["train"][loss], label=f"training ({best_train_loss[loss]:.4f})" + ) + ax.plot( + range(len(losses["valid"][loss])), losses["valid"][loss], label=f"validation ({best_val_loss[loss]:.4f})" + ) + ax.set_xlabel("Epochs") + ax.set_ylabel(f"{loss} Loss") + ax.legend( + title=r"VICReg - ($\lambda={} - \mu={} - \nu={}$)".format( + loss_hparams["lmbd"], loss_hparams["mu"], loss_hparams["nu"] + ), + loc="best", + title_fontsize=20, + fontsize=15, + ) + plt.savefig(f"{outpath}/VICReg_loss_{loss}.pdf") + + with open(f"{outpath}/VICReg_losses.pkl", "wb") as f: + pkl.dump(losses, f) + + plt.tight_layout() + plt.close() print("----------------------------------------------------------") print(f"Done with training. Total training time is {round((time.time() - t0_initial)/60,3)}min") diff --git a/mlpf/pyg_ssl/training_mlpf.py b/mlpf/pyg_ssl/training_mlpf.py index 412e36560..9fbae760b 100644 --- a/mlpf/pyg_ssl/training_mlpf.py +++ b/mlpf/pyg_ssl/training_mlpf.py @@ -119,15 +119,14 @@ def compute_weights(device, target_ids, num_classes): @torch.no_grad() -def validation_run(device, encoder, mlpf, train_loader, valid_loader, mode, tb): +def validation_run(device, mlpf, train_loader, valid_loader, tb, ssl_encoder): with torch.no_grad(): optimizer = None - optimizer_VICReg = None - ret = train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode, tb) + ret = train(device, mlpf, train_loader, valid_loader, optimizer, tb, ssl_encoder) return ret -def train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode, tb): +def train(device, mlpf, train_loader, valid_loader, optimizer, tb, ssl_encoder=None): """ A training/validation run over a given epoch that gets called in the training_loop() function. When optimizer is set to None, it freezes the model for a validation_run. @@ -142,30 +141,25 @@ def train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimize print("---->Initiating a training run") mlpf.train() loader = train_loader - if optimizer_VICReg: - encoder.train() else: print("---->Initiating a validation run") mlpf.eval() loader = valid_loader - if optimizer_VICReg: - encoder.eval() # initialize loss counters - losses = 0 - - epoch_loss_id = 0.0 - epoch_loss_momentum = 0.0 - epoch_loss_charge = 0.0 + losses_of_interest = ["Total", "Classification", "Regression", "Charge"] + losses = {} + for loss in losses_of_interest: + losses[loss] = 0.0 for i, batch in tqdm.tqdm(enumerate(loader), total=len(loader)): - if mode == "ssl": + if ssl_encoder is not None: # seperate PF-elements tracks, clusters = distinguish_PFelements(batch.to(device)) # ENCODE - embedding_tracks, embedding_clusters = encoder(tracks, clusters) + embedding_tracks, embedding_clusters = ssl_encoder(tracks, clusters) # concat the inputs with embeddings tracks.x = torch.cat([batch.x[batch.x[:, 0] == 1], embedding_tracks], axis=1) @@ -174,7 +168,7 @@ def train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimize # combine PF-elements event = combine_PFelements(tracks, clusters) - elif mode == "native": + else: event = batch.to(device) # make mlpf forward pass @@ -185,89 +179,88 @@ def train(device, encoder, mlpf, train_loader, valid_loader, optimizer, optimize target_momentum = event_on_device.ygen[:, 1:].to(dtype=torch.float32) target_charge = (event_on_device.ygen[:, 0] + 1).to(dtype=torch.float32) # -1, 0, 1 - loss_id = 100 * loss_obj_id(pred_ids_one_hot, target_ids) - # loss_id_old = torch.nn.functional.cross_entropy(pred_ids_one_hot, target_ids) # for classifying PID - - # for regression, mask the loss in cases there is no true particle + loss_ = {} + # for CLASSIFYING PID + loss_["Classification"] = 100 * loss_obj_id(pred_ids_one_hot, target_ids) + # REGRESSING p4: mask the loss in cases there is no true particle msk_true_particle = torch.unsqueeze((target_ids != 0).to(dtype=torch.float32), axis=-1) - loss_momentum = 10 * torch.nn.functional.huber_loss( + loss_["Regression"] = 10 * torch.nn.functional.huber_loss( pred_momentum * msk_true_particle, target_momentum * msk_true_particle - ) # for regressing p4 - - loss_charge = torch.nn.functional.cross_entropy( + ) + # PREDICTING CHARGE + loss_["Charge"] = torch.nn.functional.cross_entropy( pred_charge * msk_true_particle, (target_charge * msk_true_particle[:, 0]).to(dtype=torch.int64) - ) # for predicting charge - loss = loss_id + loss_momentum + loss_charge + ) + # TOTAL LOSS + loss_["Total"] = loss_["Classification"] + loss_["Regression"] + loss_["Charge"] if is_train: - tb.add_scalar("batch/loss_id", loss_id.detach().cpu().item(), istep_global) - tb.add_scalar("batch/loss_momentum", loss_momentum.detach().cpu().item(), istep_global) - tb.add_scalar("batch/loss_charge", loss_charge.detach().cpu().item(), istep_global) + tb.add_scalar("batch/loss_id", loss_["Classification"].detach().cpu().item(), istep_global) + tb.add_scalar("batch/loss_momentum", loss_["Regression"].detach().cpu().item(), istep_global) + tb.add_scalar("batch/loss_charge", loss_["Charge"].detach().cpu().item(), istep_global) istep_global += 1 # update parameters if is_train: for param in mlpf.parameters(): param.grad = None - if optimizer_VICReg: - for param in encoder.parameters(): - param.grad = None - loss.backward() + loss_["Total"].backward() optimizer.step() - losses += loss.detach() + for loss in losses_of_interest: + losses[loss] += loss_[loss].detach() - epoch_loss_id += loss_id.detach().cpu().item() / len(loader) - epoch_loss_momentum += loss_momentum.detach().cpu().item() / len(loader) - epoch_loss_charge += loss_charge.detach().cpu().item() / len(loader) + # if i == 2: + # break - losses = losses.cpu().item() / len(loader) + for loss in losses_of_interest: + losses[loss] = losses[loss].cpu().item() / (len(loader)) print( "loss_id={:.2f} loss_momentum={:.2f} loss_charge={:.2f}".format( - epoch_loss_id, epoch_loss_momentum, epoch_loss_charge + losses["Classification"], losses["Regression"], losses["Charge"] ) ) + return losses -def training_loop_mlpf( - device, encoder, mlpf, train_loader, valid_loader, n_epochs, patience, lr, outpath, mode, FineTune_VICReg -): +def training_loop_mlpf(device, mlpf, train_loader, valid_loader, n_epochs, patience, lr, outpath, ssl_encoder=None): """ Main function to perform training. Will call the train() and validation_run() functions every epoch. Args: - encoder: the encoder part of VICReg - mlpf: the mlpf downstream task - train_loader: a pytorch Dataloader for training - valid_loader: a pytorch Dataloader for validation - patience: number of stale epochs allowed before stopping the training - lr: lr to use for training - outpath: path to store the model weights and training plots - mode: can be either `ssl` or `native` - FineTune_VICReg: if `True` will finetune VICReg with a lr that is 10% of the MLPF lr + mlpf: the mlpf downstream task. + train_loader: a pytorch Dataloader for training. + valid_loader: a pytorch Dataloader for validation. + patience: number of stale epochs allowed before stopping the training. + lr: lr to use for training. + outpath: path to store the model weights and training plots. + mode: can be either `ssl` or `native`. + ssl_encoder: the encoder part of VICReg. If None is provided then the function will run a supervised training. """ t0_initial = time.time() - losses_train, losses_valid = [], [] + losses_of_interest = ["Total", "Classification", "Regression"] - best_val_loss = 99999.9 - stale_epochs = 0 + losses = {} + losses["train"], losses["valid"], best_val_loss, best_train_loss = {}, {}, {}, {} + for loss in losses_of_interest: + losses["train"][loss], losses["valid"][loss] = [], [] + best_val_loss[loss] = 99999.9 + stale_epochs = 0 tensorboard_writer = SummaryWriter(outpath) optimizer = torch.optim.AdamW(mlpf.parameters(), lr=lr) - if FineTune_VICReg: - print("Will finetune VICReg during mlpf training") - optimizer_VICReg = torch.optim.SGD(encoder.parameters(), lr=lr * 0.1) - else: - print("Will fix VICReg during mlpf training") - optimizer_VICReg = None - # set VICReg to evaluation mode - encoder.eval() + if ssl_encoder is not None: + mode = "ssl" + ssl_encoder.eval() + else: + mode = "native" + print(f"Will launch a {mode} training of MLPF.") for epoch in range(n_epochs): t0 = time.time() @@ -277,37 +270,39 @@ def training_loop_mlpf( break # training step - losses_t = train( - device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode, tensorboard_writer - ) - tensorboard_writer.add_scalar("epoch/train_loss", losses_t, epoch) - losses_train.append(losses_t) + losses_t = train(device, mlpf, train_loader, valid_loader, optimizer, tensorboard_writer, ssl_encoder) + tensorboard_writer.add_scalar("epoch/train_loss", losses_t["Total"], epoch) + for loss in losses_of_interest: + losses["train"][loss].append(losses_t[loss]) # validation step - losses_v = validation_run(device, encoder, mlpf, train_loader, valid_loader, mode, tensorboard_writer) - tensorboard_writer.add_scalar("epoch/val_loss", losses_v, epoch) - losses_valid.append(losses_v) + losses_v = validation_run(device, mlpf, train_loader, valid_loader, tensorboard_writer, ssl_encoder) + tensorboard_writer.add_scalar("epoch/val_loss", losses_v["Total"], epoch) + for loss in losses_of_interest: + losses["valid"][loss].append(losses_v[loss]) tensorboard_writer.flush() - # early-stopping - if losses_v < best_val_loss: - best_val_loss = losses_v - best_train_loss = losses_t - - stale_epochs = 0 - - try: - mlpf_state_dict = mlpf.module.state_dict() - except AttributeError: - mlpf_state_dict = mlpf.state_dict() - - torch.save(mlpf_state_dict, f"{outpath}/mlpf_{mode}_best_epoch_weights.pth") - - with open(f"{outpath}/mlpf_{mode}_best_epoch.json", "w") as fp: # dump best epoch - json.dump({"best_epoch": epoch}, fp) - else: - stale_epochs += 1 + # save the lowest value of each component of the loss to print it on the legend of the loss plots + for loss in losses_of_interest: + if loss == "Total": + if losses_v[loss] < best_val_loss[loss]: + best_val_loss[loss] = losses_v[loss] + best_train_loss[loss] = losses_t[loss] + + # save the model + torch.save(mlpf.state_dict(), f"{outpath}/mlpf_{mode}_best_epoch_weights.pth") + with open(f"{outpath}/mlpf_{mode}_best_epoch.json", "w") as fp: # dump best epoch + json.dump({"best_epoch": epoch}, fp) + + # for early-stopping purposes + stale_epochs = 0 + else: + stale_epochs += 1 + else: + if losses_v[loss] < best_val_loss[loss]: + best_val_loss[loss] = losses_v[loss] + best_train_loss[loss] = losses_t[loss] t1 = time.time() @@ -317,30 +312,37 @@ def training_loop_mlpf( print( f"epoch={epoch + 1} / {n_epochs} " - + f"train_loss={round(losses_train[epoch], 4)} " - + f"valid_loss={round(losses_valid[epoch], 4)} " + + f"train_loss={round(losses_t['Total'], 4)} " + + f"valid_loss={round(losses_v['Total'], 4)} " + f"stale={stale_epochs} " + f"time={round((t1-t0)/60, 2)}m " + f"eta={round(eta, 1)}m" ) - fig, ax = plt.subplots() - - ax.plot(range(len(losses_train)), losses_train, label="training ({:.2f})".format(best_train_loss)) - ax.plot(range(len(losses_valid)), losses_valid, label="validation ({:.2f})".format(best_val_loss)) - ax.set_xlabel("Epochs") - ax.set_ylabel("Loss") - ax.set_ylim(0.8 * losses_train[-1], 1.2 * losses_train[-1]) - if mode == "ssl": - ax.legend(title="SSL-based MLPF", loc="best", title_fontsize=20, fontsize=15) - else: - ax.legend(title="Native MLPF", loc="best", title_fontsize=20, fontsize=15) - plt.savefig(f"{outpath}/mlpf_loss.pdf") - - with open(f"{outpath}/mlpf_{mode}_loss_train.pkl", "wb") as f: - pkl.dump(losses_train, f) - with open(f"{outpath}/mlpf_{mode}_loss_valid.pkl", "wb") as f: - pkl.dump(losses_valid, f) + # make loss plots + for loss in losses_of_interest: + fig, ax = plt.subplots() + ax.plot( + range(len(losses["train"][loss])), + losses["train"][loss], + label="training ({:.3f})".format(best_train_loss["Total"]), + ) + ax.plot( + range(len(losses["valid"][loss])), + losses["valid"][loss], + label="validation ({:.3f})".format(best_val_loss["Total"]), + ) + ax.set_xlabel("Epochs") + ax.set_ylabel(f"{loss} Loss") + ax.set_ylim(0.8 * losses["train"][loss][-1], 1.2 * losses["train"][loss][-1]) + if mode == "ssl": + ax.legend(title="SSL-based MLPF", loc="best", title_fontsize=20, fontsize=15) + else: + ax.legend(title="Native MLPF", loc="best", title_fontsize=20, fontsize=15) + plt.savefig(f"{outpath}/mlpf_{mode}_loss_tot.pdf") + + with open(f"{outpath}/mlpf_{mode}_losses.pkl", "wb") as f: + pkl.dump(losses, f) print("----------------------------------------------------------") print(f"Done with training. Total training time is {round((time.time() - t0_initial)/60,3)}min") diff --git a/mlpf/pyg_ssl/utils.py b/mlpf/pyg_ssl/utils.py index caf7e6c6b..76e8ccd85 100644 --- a/mlpf/pyg_ssl/utils.py +++ b/mlpf/pyg_ssl/utils.py @@ -114,16 +114,15 @@ def combine_PFelements(tracks, clusters): def load_VICReg(device, outpath): - encoder_state_dict = torch.load(f"{outpath}/encoder_best_epoch_weights.pth", map_location=device) - decoder_state_dict = torch.load(f"{outpath}/decoder_best_epoch_weights.pth", map_location=device) - print("Loading a previously trained model..") + vicreg_state_dict = torch.load(f"{outpath}/VICReg_best_epoch_weights.pth", map_location=device) + with open(f"{outpath}/encoder_model_kwargs.pkl", "rb") as f: encoder_model_kwargs = pkl.load(f) with open(f"{outpath}/decoder_model_kwargs.pkl", "rb") as f: decoder_model_kwargs = pkl.load(f) - return encoder_state_dict, encoder_model_kwargs, decoder_state_dict, decoder_model_kwargs + return vicreg_state_dict, encoder_model_kwargs, decoder_model_kwargs def save_VICReg(args, outpath, encoder, encoder_model_kwargs, decoder, decoder_model_kwargs): @@ -162,7 +161,7 @@ def save_VICReg(args, outpath, encoder, encoder_model_kwargs, decoder, decoder_m "data_split_mode": args.data_split_mode, "n_epochs": args.n_epochs_VICReg, "lr": args.lr, - "batch_size_VICReg": args.batch_size_VICReg, + "bs_VICReg": args.bs_VICReg, "width_encoder": args.width_encoder, "embedding_dim": args.embedding_dim_VICReg, "num_convs": args.num_convs, @@ -172,8 +171,8 @@ def save_VICReg(args, outpath, encoder, encoder_model_kwargs, decoder, decoder_m "width_decoder": args.width_decoder, "output_dim": args.expand_dim, "lmbd": args.lmbd, - "u": args.u, - "v": args.v, + "mu": args.mu, + "nu": args.nu, "num_encoder_parameters": num_encoder_parameters, "num_decoder_parameters": num_decoder_parameters, }, @@ -214,7 +213,7 @@ def save_MLPF(args, outpath, mlpf, mlpf_model_kwargs, mode): "data_split_mode": args.data_split_mode, "n_epochs": args.n_epochs_mlpf, "lr": args.lr, - "batch_size_mlpf": args.batch_size_mlpf, + "bs_mlpf": args.bs_mlpf, "width": args.width_mlpf, "embedding_dim": args.embedding_dim_mlpf, "num_convs": args.num_convs, @@ -222,7 +221,6 @@ def save_MLPF(args, outpath, mlpf, mlpf_model_kwargs, mode): "propagate_dim": args.propagate_dim, "k": args.nearest, "mode": mode, - "FineTune_VICReg": args.FineTune_VICReg, "num_mlpf_parameters": num_mlpf_parameters, }, fp, @@ -251,11 +249,22 @@ def data_split(dataset, data_split_mode): data_test_qcd = data_qcd[: round(0.1 * len(data_qcd))] data_test_ttbar = data_ttbar[: round(0.1 * len(data_ttbar))] - data_VICReg_train = data_test_qcd + data_test_ttbar - data_VICReg_valid = data_test_qcd + data_test_ttbar + # label remaining data as `rem` + rem_qcd = data_qcd[round(0.1 * len(data_qcd)) :] + rem_ttbar = data_ttbar[round(0.1 * len(data_qcd)) :] + + data_VICReg = rem_qcd[: round(0.8 * len(rem_qcd))] + rem_ttbar[: round(0.8 * len(rem_ttbar))] + data_mlpf = rem_qcd[round(0.8 * len(rem_qcd)) :] + rem_ttbar[round(0.8 * len(rem_ttbar)) :] + + # shuffle the samples after mixing (not super necessary since the DataLoaders will shuffle anyway) + random.shuffle(data_VICReg) + random.shuffle(data_mlpf) + + data_VICReg_train = data_VICReg[: round(0.9 * len(data_VICReg))] + data_VICReg_valid = data_VICReg[round(0.9 * len(data_VICReg)) :] - data_mlpf_train = data_test_qcd + data_test_ttbar - data_mlpf_valid = data_test_qcd + data_test_ttbar + data_mlpf_train = data_mlpf[: round(0.9 * len(data_mlpf))] + data_mlpf_valid = data_mlpf[round(0.9 * len(data_mlpf)) :] else: # actual meaningful data splits # load the qcd and ttbar samples seperately diff --git a/mlpf/ssl_evaluate.py b/mlpf/ssl_evaluate.py index c5a8e43c3..05ab2ed5b 100644 --- a/mlpf/ssl_evaluate.py +++ b/mlpf/ssl_evaluate.py @@ -56,6 +56,7 @@ mlpf_model_kwargs = pkl.load(f) mlpf_ssl = MLPF(**mlpf_model_kwargs).to(device) + mlpf_ssl.load_state_dict(mlpf_ssl_state_dict) ret_ssl = evaluate( device, @@ -78,6 +79,7 @@ mlpf_model_kwargs = pkl.load(f) mlpf_native = MLPF(**mlpf_model_kwargs).to(device) + mlpf_native.load_state_dict(mlpf_native_state_dict) ret_native = evaluate( device, diff --git a/mlpf/ssl_optimization.ipynb b/mlpf/ssl_optimization.ipynb new file mode 100644 index 000000000..aed5eb535 --- /dev/null +++ b/mlpf/ssl_optimization.ipynb @@ -0,0 +1,13732 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "9443fc6c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Will use NVIDIA GeForce GTX 1080 Ti\n" + ] + } + ], + "source": [ + "import datetime\n", + "import os.path as osp\n", + "import platform\n", + "import pickle as pkl\n", + "\n", + "import matplotlib\n", + "import mplhep\n", + "import numpy as np\n", + "import torch\n", + "import torch_geometric\n", + "from pyg_ssl.args import parse_args\n", + "from pyg_ssl.mlpf import MLPF\n", + "from pyg_ssl.training_mlpf import training_loop_mlpf\n", + "from pyg_ssl.training_VICReg import training_loop_VICReg\n", + "from pyg_ssl.utils import CLUSTERS_X, TRACKS_X, data_split, load_VICReg, save_MLPF, save_VICReg, distinguish_PFelements, combine_PFelements\n", + "from pyg_ssl.VICReg import DECODER, ENCODER, VICReg\n", + "\n", + "matplotlib.use(\"Agg\")\n", + "mplhep.style.use(mplhep.styles.CMS)\n", + "\n", + "# Ignore divide by 0 errors\n", + "np.seterr(divide=\"ignore\", invalid=\"ignore\")\n", + "\n", + "# define the global base device\n", + "if torch.cuda.device_count():\n", + " device = torch.device(\"cuda:0\")\n", + " print(f\"Will use {torch.cuda.get_device_name(device)}\")\n", + "else:\n", + " device = \"cpu\"\n", + " print(\"Will use cpu\")\n", + " \n", + "### useful object\n", + "class objectview(object):\n", + " \"\"\"converts a dict into an object\"\"\"\n", + "\n", + " def __init__(self, d):\n", + " self.__dict__ = d " + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "6abd6ab7", + "metadata": {}, + "outputs": [], + "source": [ + "### MLPF training loop\n", + "\n", + "import json\n", + "import math\n", + "import pickle as pkl\n", + "import time\n", + "from typing import Optional\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch\n", + "import tqdm\n", + "from torch import Tensor, nn\n", + "from torch.nn import functional as F\n", + "\n", + "matplotlib.use(\"Agg\")\n", + "\n", + "# Ignore divide by 0 errors\n", + "np.seterr(divide=\"ignore\", invalid=\"ignore\")\n", + "\n", + "# keep track of the training step across epochs\n", + "istep_global = 0\n", + "\n", + "\n", + "# from https://github.com/AdeelH/pytorch-multi-class-focal-loss/blob/master/focal_loss.py\n", + "class FocalLoss(nn.Module):\n", + " def __init__(\n", + " self, alpha: Optional[Tensor] = None, gamma: float = 0.0, reduction: str = \"mean\", ignore_index: int = -100\n", + " ):\n", + " if reduction not in (\"mean\", \"sum\", \"none\"):\n", + " raise ValueError('Reduction must be one of: \"mean\", \"sum\", \"none\".')\n", + "\n", + " super().__init__()\n", + " self.alpha = alpha\n", + " self.gamma = gamma\n", + " self.ignore_index = ignore_index\n", + " self.reduction = reduction\n", + "\n", + " self.nll_loss = nn.NLLLoss(weight=alpha, reduction=\"none\", ignore_index=ignore_index)\n", + "\n", + " def __repr__(self):\n", + " arg_keys = [\"alpha\", \"gamma\", \"ignore_index\", \"reduction\"]\n", + " arg_vals = [self.__dict__[k] for k in arg_keys]\n", + " arg_strs = [f\"{k}={v!r}\" for k, v in zip(arg_keys, arg_vals)]\n", + " arg_str = \", \".join(arg_strs)\n", + " return f\"{type(self).__name__}({arg_str})\"\n", + "\n", + " def forward(self, x: Tensor, y: Tensor) -> Tensor:\n", + " if x.ndim > 2:\n", + " # (N, C, d1, d2, ..., dK) --> (N * d1 * ... * dK, C)\n", + " c = x.shape[1]\n", + " x = x.permute(0, *range(2, x.ndim), 1).reshape(-1, c)\n", + " # (N, d1, d2, ..., dK) --> (N * d1 * ... * dK,)\n", + " y = y.view(-1)\n", + "\n", + " unignored_mask = y != self.ignore_index\n", + " y = y[unignored_mask]\n", + " if len(y) == 0:\n", + " return torch.tensor(0.0)\n", + " x = x[unignored_mask]\n", + "\n", + " # compute weighted cross entropy term: -alpha * log(pt)\n", + " # (alpha is already part of self.nll_loss)\n", + " log_p = F.log_softmax(x, dim=-1)\n", + " ce = self.nll_loss(log_p, y)\n", + "\n", + " # get true class column from each row\n", + " all_rows = torch.arange(len(x))\n", + " log_pt = log_p[all_rows, y]\n", + "\n", + " # compute focal term: (1 - pt)^gamma\n", + " pt = log_pt.exp()\n", + " focal_term = (1 - pt) ** self.gamma\n", + "\n", + " # the full loss: -alpha * ((1 - pt)^gamma) * log(pt)\n", + " loss = focal_term * ce\n", + "\n", + " if self.reduction == \"mean\":\n", + " loss = loss.mean()\n", + " elif self.reduction == \"sum\":\n", + " loss = loss.sum()\n", + "\n", + " return loss\n", + "\n", + "\n", + "def compute_weights(device, target_ids, num_classes):\n", + " vs, cs = torch.unique(target_ids, return_counts=True)\n", + " weights = torch.zeros(num_classes).to(device=device)\n", + " for k, v in zip(vs, cs):\n", + " weights[k] = 1.0 / math.sqrt(float(v))\n", + " # weights[2] = weights[2] * 3 # emphasize nhadrons\n", + " return weights\n", + "\n", + "\n", + "@torch.no_grad()\n", + "def validation_run(device, mlpf, train_loader, valid_loader, ssl_encoder):\n", + " with torch.no_grad():\n", + " optimizer = None\n", + " ret = train(device, mlpf, train_loader, valid_loader, optimizer, ssl_encoder)\n", + " return ret\n", + "\n", + "\n", + "def train(device, mlpf, train_loader, valid_loader, optimizer, ssl_encoder=None):\n", + " \"\"\"\n", + " A training/validation run over a given epoch that gets called in the training_loop() function.\n", + " When optimizer is set to None, it freezes the model for a validation_run.\n", + " \"\"\"\n", + "\n", + " is_train = not (optimizer is None)\n", + " global istep_global\n", + "\n", + " loss_obj_id = FocalLoss(gamma=2.0)\n", + "\n", + " if is_train:\n", + " print(\"---->Initiating a training run\")\n", + " mlpf.train()\n", + " loader = train_loader\n", + " else:\n", + " print(\"---->Initiating a validation run\")\n", + " mlpf.eval()\n", + " loader = valid_loader\n", + "\n", + " # initialize loss counters\n", + " losses_of_interest = [\"Total\", \"Classification\", \"Regression\", \"Charge\"]\n", + " losses = {}\n", + " for loss in losses_of_interest:\n", + " losses[loss] = 0.0\n", + "\n", + " for i, batch in tqdm.tqdm(enumerate(loader), total=len(loader)):\n", + "\n", + " if ssl_encoder is not None:\n", + " # seperate PF-elements\n", + " tracks, clusters = distinguish_PFelements(batch.to(device))\n", + "\n", + " # ENCODE\n", + " embedding_tracks, embedding_clusters = ssl_encoder(tracks, clusters)\n", + "\n", + " # concat the inputs with embeddings\n", + " tracks.x = torch.cat([batch.x[batch.x[:, 0] == 1], embedding_tracks], axis=1)\n", + " clusters.x = torch.cat([batch.x[batch.x[:, 0] == 2], embedding_clusters], axis=1)\n", + "\n", + " # combine PF-elements\n", + " event = combine_PFelements(tracks, clusters)\n", + "\n", + " else:\n", + " event = batch.to(device)\n", + "\n", + " # make mlpf forward pass\n", + " event_on_device = event.to(device)\n", + " pred_ids_one_hot, pred_momentum, pred_charge = mlpf(event_on_device)\n", + " target_ids = event_on_device.ygen_id\n", + "\n", + " target_momentum = event_on_device.ygen[:, 1:].to(dtype=torch.float32)\n", + " target_charge = (event_on_device.ygen[:, 0] + 1).to(dtype=torch.float32) # -1, 0, 1\n", + "\n", + " loss_ = {}\n", + " # for CLASSIFYING PID\n", + " loss_[\"Classification\"] = 100 * loss_obj_id(pred_ids_one_hot, target_ids)\n", + " # REGRESSING p4: mask the loss in cases there is no true particle\n", + " msk_true_particle = torch.unsqueeze((target_ids != 0).to(dtype=torch.float32), axis=-1)\n", + " loss_[\"Regression\"] = 10 * torch.nn.functional.huber_loss(\n", + " pred_momentum * msk_true_particle, target_momentum * msk_true_particle\n", + " )\n", + " # PREDICTING CHARGE\n", + " loss_[\"Charge\"] = torch.nn.functional.cross_entropy(\n", + " pred_charge * msk_true_particle, (target_charge * msk_true_particle[:, 0]).to(dtype=torch.int64)\n", + " )\n", + " # TOTAL LOSS\n", + " loss_[\"Total\"] = loss_[\"Classification\"] + loss_[\"Regression\"] + loss_[\"Charge\"]\n", + "\n", + "\n", + " # update parameters\n", + " if is_train:\n", + " for param in mlpf.parameters():\n", + " param.grad = None\n", + " loss_[\"Total\"].backward()\n", + " optimizer.step()\n", + "\n", + " for loss in losses_of_interest:\n", + " losses[loss] += loss_[loss].detach()\n", + "\n", + " # if i == 2:\n", + " # break\n", + "\n", + " for loss in losses_of_interest:\n", + " losses[loss] = losses[loss].cpu().item() / (len(loader))\n", + "\n", + " print(\n", + " \"loss_id={:.2f} loss_momentum={:.2f} loss_charge={:.2f}\".format(\n", + " losses[\"Classification\"], losses[\"Regression\"], losses[\"Charge\"]\n", + " )\n", + " )\n", + "\n", + " return losses\n", + "\n", + "\n", + "def training_loop_mlpf(device, mlpf, train_loader, valid_loader, n_epochs, patience, lr, ssl_encoder=None):\n", + " \"\"\"\n", + " Main function to perform training. Will call the train() and validation_run() functions every epoch.\n", + "\n", + " Args:\n", + " mlpf: the mlpf downstream task.\n", + " train_loader: a pytorch Dataloader for training.\n", + " valid_loader: a pytorch Dataloader for validation.\n", + " patience: number of stale epochs allowed before stopping the training.\n", + " lr: lr to use for training.\n", + " mode: can be either `ssl` or `native`.\n", + " ssl_encoder: the encoder part of VICReg. If None is provided then the function will run a supervised training.\n", + " \"\"\"\n", + "\n", + " t0_initial = time.time()\n", + "\n", + " losses_of_interest = [\"Total\", \"Classification\", \"Regression\"]\n", + "\n", + " losses = {}\n", + " losses[\"train\"], losses[\"valid\"], best_val_loss, best_train_loss = {}, {}, {}, {}\n", + " for loss in losses_of_interest:\n", + " losses[\"train\"][loss], losses[\"valid\"][loss] = [], []\n", + " best_val_loss[loss] = 99999.9\n", + "\n", + " stale_epochs = 0\n", + "\n", + " optimizer = torch.optim.AdamW(mlpf.parameters(), lr=lr)\n", + "\n", + " if ssl_encoder is not None:\n", + " mode = \"ssl\"\n", + " ssl_encoder.eval()\n", + " else:\n", + " mode = \"native\"\n", + " print(f\"Will launch a {mode} training of MLPF.\")\n", + "\n", + " for epoch in range(n_epochs):\n", + " t0 = time.time()\n", + "\n", + " if stale_epochs > patience:\n", + " print(\"breaking due to stale epochs\")\n", + " break\n", + "\n", + " # training step\n", + " losses_t = train(device, mlpf, train_loader, valid_loader, optimizer, ssl_encoder)\n", + " for loss in losses_of_interest:\n", + " losses[\"train\"][loss].append(losses_t[loss])\n", + "\n", + " # validation step\n", + " losses_v = validation_run(device, mlpf, train_loader, valid_loader, ssl_encoder)\n", + " for loss in losses_of_interest:\n", + " losses[\"valid\"][loss].append(losses_v[loss])\n", + "\n", + "\n", + " # save the lowest value of each component of the loss to print it on the legend of the loss plots\n", + " for loss in losses_of_interest:\n", + " if loss == \"Total\":\n", + " if losses_v[loss] < best_val_loss[loss]:\n", + " best_val_loss[loss] = losses_v[loss]\n", + " best_train_loss[loss] = losses_t[loss]\n", + "\n", + " # for early-stopping purposes\n", + " stale_epochs = 0\n", + " else:\n", + " stale_epochs += 1\n", + " else:\n", + " if losses_v[loss] < best_val_loss[loss]:\n", + " best_val_loss[loss] = losses_v[loss]\n", + " best_train_loss[loss] = losses_t[loss]\n", + "\n", + " t1 = time.time()\n", + "\n", + " epochs_remaining = n_epochs - (epoch + 1)\n", + " time_per_epoch = (t1 - t0_initial) / (epoch + 1)\n", + " eta = epochs_remaining * time_per_epoch / 60\n", + "\n", + " print(\n", + " f\"epoch={epoch + 1} / {n_epochs} \"\n", + " + f\"train_loss={round(losses_t['Total'], 4)} \"\n", + " + f\"valid_loss={round(losses_v['Total'], 4)} \"\n", + " + f\"stale={stale_epochs} \"\n", + " + f\"time={round((t1-t0)/60, 2)}m \"\n", + " + f\"eta={round(eta, 1)}m\"\n", + " )\n", + "\n", + "\n", + " print(\"----------------------------------------------------------\")\n", + " print(f\"Done with training. Total training time is {round((time.time() - t0_initial)/60,3)}min\")\n", + " print(\"----------------------------------------------------------\")\n", + " print(\"----------------------------------------------------------\")\n", + " print(\"----------------------------------------------------------\")\n", + " return losses, best_val_loss" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "4ea789be", + "metadata": {}, + "outputs": [], + "source": [ + "## to load a VICReg model\n", + "def load_(vicreg_model):\n", + " outpath = f\"/pfclicvol/experiments/{vicreg_model}\"\n", + " state_dict = torch.load(f\"{outpath}/VICReg_best_epoch_weights.pth\")\n", + "\n", + " with open(f\"{outpath}/encoder_model_kwargs.pkl\", \"rb\") as f:\n", + " encoder_model_kwargs = pkl.load(f)\n", + " with open(f\"{outpath}/decoder_model_kwargs.pkl\", \"rb\") as f:\n", + " decoder_model_kwargs = pkl.load(f)\n", + "\n", + " vicreg_encoder = ENCODER(**encoder_model_kwargs).to(device)\n", + " vicreg_decoder = DECODER(**decoder_model_kwargs).to(device)\n", + "\n", + " vicreg = VICReg(vicreg_encoder, vicreg_decoder)\n", + "\n", + " ### because model was saved using dataparallel\n", + " from collections import OrderedDict\n", + " new_state_dict = OrderedDict()\n", + " for k, v in state_dict.items():\n", + " name = k[7:] # remove module.\n", + " new_state_dict[name] = v\n", + " # print('name is:', name)\n", + " state_dict=new_state_dict\n", + "\n", + " vicreg.load_state_dict(state_dict)\n", + "\n", + " return vicreg_encoder" + ] + }, + { + "cell_type": "markdown", + "id": "a1d4de71", + "metadata": {}, + "source": [ + "# Load dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "6fff36d3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Will use data split mode `quick`\n", + "Will use 25843 events to train VICReg\n", + "Will use 2871 events to validate VICReg\n", + "Will use 6461 events to train MLPF\n", + "Will use 718 events to validate MLPF\n" + ] + } + ], + "source": [ + "# load the clic dataset\n", + "data_VICReg_train, data_VICReg_valid, data_mlpf_train, data_mlpf_valid, data_test_qcd, data_test_ttbar = data_split(\n", + " \"/pfclicvol/data/clic_edm4hep\", \"quick\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "ed57778c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "------> Progressing to MLPF trainings...\n", + "Will use 6461 events for train\n", + "Will use 718 events for valid\n" + ] + } + ], + "source": [ + "bs_mlpf = 300\n", + "\n", + "print(\"------> Progressing to MLPF trainings...\")\n", + "print(f\"Will use {len(data_mlpf_train)} events for train\")\n", + "print(f\"Will use {len(data_mlpf_valid)} events for valid\")\n", + "\n", + "train_loader = torch_geometric.loader.DataLoader(data_mlpf_train, bs_mlpf)\n", + "valid_loader = torch_geometric.loader.DataLoader(data_mlpf_valid, bs_mlpf)\n", + "\n", + "input_ = max(CLUSTERS_X, TRACKS_X) + 1 # max cz we pad when we concatenate them & +1 cz there's the `type` feature" + ] + }, + { + "cell_type": "markdown", + "id": "ed8d1f89", + "metadata": {}, + "source": [ + "# Perform MLPF training" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "1c34d762", + "metadata": {}, + "outputs": [], + "source": [ + "mlpf_ssl = {\n", + " \"input_dim\": input_,\n", + " \"embedding_dim\": 256,\n", + " \"width\": 256,\n", + " \"k\": 32,\n", + " \"num_convs\": 0,\n", + " \"dropout\": 0.4,\n", + " \"ssl\": True,\n", + " \"VICReg_embedding_dim\": 256,\n", + "}\n", + "\n", + "mlpf_native = {\n", + " \"input_dim\": input_,\n", + " \"embedding_dim\": 256,\n", + " \"width\": 256,\n", + " \"k\": 32,\n", + " \"num_convs\": 0,\n", + " \"dropout\": 0.4,\n", + " \"ssl\": False,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b99ba62c", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Will use native\n", + "Will launch a native training of MLPF.\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=101.25 loss_momentum=2.34 loss_charge=0.98\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=63.85 loss_momentum=1.83 loss_charge=0.70\n", + "epoch=1 / 300 train_loss=104.5689 valid_loss=66.3814 stale=0 time=0.06m eta=18.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=65.78 loss_momentum=1.99 loss_charge=0.77\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=41.02 loss_momentum=1.81 loss_charge=0.64\n", + "epoch=2 / 300 train_loss=68.5518 valid_loss=43.4751 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=48.32 loss_momentum=1.89 loss_charge=0.68\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=42.09 loss_momentum=1.80 loss_charge=0.64\n", + "epoch=3 / 300 train_loss=50.8918 valid_loss=44.5295 stale=1 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=40.89 loss_momentum=1.85 loss_charge=0.66\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.36it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=38.65 loss_momentum=1.79 loss_charge=0.64\n", + "epoch=4 / 300 train_loss=43.4006 valid_loss=41.0888 stale=0 time=0.06m eta=17.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=37.24 loss_momentum=1.83 loss_charge=0.65\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 17.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=34.99 loss_momentum=1.79 loss_charge=0.64\n", + "epoch=5 / 300 train_loss=39.7199 valid_loss=37.4167 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=35.01 loss_momentum=1.82 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=33.17 loss_momentum=1.79 loss_charge=0.64\n", + "epoch=6 / 300 train_loss=37.4654 valid_loss=35.5954 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=33.64 loss_momentum=1.81 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=32.04 loss_momentum=1.79 loss_charge=0.64\n", + "epoch=7 / 300 train_loss=36.093 valid_loss=34.4603 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=32.70 loss_momentum=1.80 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=31.13 loss_momentum=1.78 loss_charge=0.64\n", + "epoch=8 / 300 train_loss=35.1434 valid_loss=33.5513 stale=0 time=0.06m eta=17.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=31.94 loss_momentum=1.80 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.51 loss_momentum=1.78 loss_charge=0.64\n", + "epoch=9 / 300 train_loss=34.3757 valid_loss=32.9297 stale=0 time=0.06m eta=17.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=31.37 loss_momentum=1.80 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.00 loss_momentum=1.78 loss_charge=0.64\n", + "epoch=10 / 300 train_loss=33.7985 valid_loss=32.4184 stale=0 time=0.06m eta=17.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.90 loss_momentum=1.79 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.63 loss_momentum=1.78 loss_charge=0.64\n", + "epoch=11 / 300 train_loss=33.3256 valid_loss=32.0467 stale=0 time=0.06m eta=17.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.56 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.33 loss_momentum=1.77 loss_charge=0.64\n", + "epoch=12 / 300 train_loss=32.9817 valid_loss=31.739 stale=0 time=0.06m eta=17.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.26 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.11 loss_momentum=1.77 loss_charge=0.64\n", + "epoch=13 / 300 train_loss=32.6868 valid_loss=31.5204 stale=0 time=0.06m eta=17.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.91 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.93 loss_momentum=1.76 loss_charge=0.64\n", + "epoch=14 / 300 train_loss=32.3333 valid_loss=31.331 stale=0 time=0.06m eta=17.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.72 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.82 loss_momentum=1.76 loss_charge=0.64\n", + "epoch=15 / 300 train_loss=32.1366 valid_loss=31.2136 stale=0 time=0.06m eta=17.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 5.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.48 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.71 loss_momentum=1.76 loss_charge=0.64\n", + "epoch=16 / 300 train_loss=31.8937 valid_loss=31.1011 stale=0 time=0.06m eta=17.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.34 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.62 loss_momentum=1.75 loss_charge=0.64\n", + "epoch=17 / 300 train_loss=31.752 valid_loss=31.007 stale=0 time=0.06m eta=17.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.15 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.53 loss_momentum=1.75 loss_charge=0.64\n", + "epoch=18 / 300 train_loss=31.5558 valid_loss=30.9129 stale=0 time=0.06m eta=17.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.09 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.46 loss_momentum=1.75 loss_charge=0.64\n", + "epoch=19 / 300 train_loss=31.4981 valid_loss=30.8392 stale=0 time=0.06m eta=17.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.90 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.40 loss_momentum=1.74 loss_charge=0.64\n", + "epoch=20 / 300 train_loss=31.3065 valid_loss=30.7771 stale=0 time=0.06m eta=16.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.81 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.36 loss_momentum=1.74 loss_charge=0.64\n", + "epoch=21 / 300 train_loss=31.2122 valid_loss=30.7315 stale=0 time=0.06m eta=16.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.70 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.26 loss_momentum=1.73 loss_charge=0.64\n", + "epoch=22 / 300 train_loss=31.0975 valid_loss=30.633 stale=0 time=0.06m eta=16.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.62 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.21 loss_momentum=1.73 loss_charge=0.64\n", + "epoch=23 / 300 train_loss=31.0104 valid_loss=30.5755 stale=0 time=0.06m eta=16.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.53 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.16 loss_momentum=1.72 loss_charge=0.64\n", + "epoch=24 / 300 train_loss=30.9237 valid_loss=30.522 stale=0 time=0.06m eta=16.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.45 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.12 loss_momentum=1.72 loss_charge=0.64\n", + "epoch=25 / 300 train_loss=30.8314 valid_loss=30.4786 stale=0 time=0.06m eta=16.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.39 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.05 loss_momentum=1.71 loss_charge=0.64\n", + "epoch=26 / 300 train_loss=30.7725 valid_loss=30.4018 stale=0 time=0.06m eta=16.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.30 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.79it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.01 loss_momentum=1.71 loss_charge=0.64\n", + "epoch=27 / 300 train_loss=30.6725 valid_loss=30.3576 stale=0 time=0.06m eta=16.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.22 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.95 loss_momentum=1.70 loss_charge=0.64\n", + "epoch=28 / 300 train_loss=30.5925 valid_loss=30.285 stale=0 time=0.06m eta=16.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.21 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.92 loss_momentum=1.70 loss_charge=0.64\n", + "epoch=29 / 300 train_loss=30.5736 valid_loss=30.2517 stale=0 time=0.06m eta=16.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.10 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.84 loss_momentum=1.69 loss_charge=0.64\n", + "epoch=30 / 300 train_loss=30.4668 valid_loss=30.1723 stale=0 time=0.06m eta=16.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.05 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.77 loss_momentum=1.69 loss_charge=0.64\n", + "epoch=31 / 300 train_loss=30.411 valid_loss=30.0891 stale=0 time=0.06m eta=16.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.04 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.71 loss_momentum=1.68 loss_charge=0.64\n", + "epoch=32 / 300 train_loss=30.3939 valid_loss=30.0292 stale=0 time=0.06m eta=16.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.93 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.67 loss_momentum=1.68 loss_charge=0.64\n", + "epoch=33 / 300 train_loss=30.28 valid_loss=29.9842 stale=0 time=0.06m eta=16.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.89 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.61 loss_momentum=1.67 loss_charge=0.64\n", + "epoch=34 / 300 train_loss=30.2393 valid_loss=29.9213 stale=0 time=0.06m eta=16.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.86 loss_momentum=1.71 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.55 loss_momentum=1.67 loss_charge=0.64\n", + "epoch=35 / 300 train_loss=30.1989 valid_loss=29.8523 stale=0 time=0.06m eta=16.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.79 loss_momentum=1.71 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.52 loss_momentum=1.66 loss_charge=0.64\n", + "epoch=36 / 300 train_loss=30.1307 valid_loss=29.8181 stale=0 time=0.06m eta=16.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.77 loss_momentum=1.70 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.44 loss_momentum=1.66 loss_charge=0.64\n", + "epoch=37 / 300 train_loss=30.0988 valid_loss=29.7336 stale=0 time=0.06m eta=15.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.72 loss_momentum=1.70 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.38 loss_momentum=1.65 loss_charge=0.64\n", + "epoch=38 / 300 train_loss=30.0438 valid_loss=29.6629 stale=0 time=0.06m eta=15.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.69 loss_momentum=1.69 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.33 loss_momentum=1.65 loss_charge=0.64\n", + "epoch=39 / 300 train_loss=30.0165 valid_loss=29.6136 stale=0 time=0.06m eta=15.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.15it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.62 loss_momentum=1.69 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.30 loss_momentum=1.64 loss_charge=0.64\n", + "epoch=40 / 300 train_loss=29.9463 valid_loss=29.5739 stale=0 time=0.06m eta=15.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.58 loss_momentum=1.69 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.22 loss_momentum=1.64 loss_charge=0.64\n", + "epoch=41 / 300 train_loss=29.8971 valid_loss=29.4911 stale=0 time=0.06m eta=15.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.56 loss_momentum=1.68 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.17 loss_momentum=1.63 loss_charge=0.64\n", + "epoch=42 / 300 train_loss=29.8687 valid_loss=29.4384 stale=0 time=0.06m eta=15.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.51 loss_momentum=1.68 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 17.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.10 loss_momentum=1.63 loss_charge=0.64\n", + "epoch=43 / 300 train_loss=29.8139 valid_loss=29.3655 stale=0 time=0.06m eta=15.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.44 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.05 loss_momentum=1.63 loss_charge=0.64\n", + "epoch=44 / 300 train_loss=29.7425 valid_loss=29.3083 stale=0 time=0.06m eta=15.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.42 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.97 loss_momentum=1.62 loss_charge=0.64\n", + "epoch=45 / 300 train_loss=29.7225 valid_loss=29.2281 stale=0 time=0.06m eta=15.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.39 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.91 loss_momentum=1.62 loss_charge=0.64\n", + "epoch=46 / 300 train_loss=29.692 valid_loss=29.1628 stale=0 time=0.06m eta=15.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.34 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 17.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.82 loss_momentum=1.62 loss_charge=0.64\n", + "epoch=47 / 300 train_loss=29.6327 valid_loss=29.0782 stale=0 time=0.06m eta=15.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.27 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.78 loss_momentum=1.62 loss_charge=0.64\n", + "epoch=48 / 300 train_loss=29.5649 valid_loss=29.0346 stale=0 time=0.06m eta=15.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.25 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.72 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=49 / 300 train_loss=29.5361 valid_loss=28.9649 stale=0 time=0.06m eta=15.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.22 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.67 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=50 / 300 train_loss=29.5067 valid_loss=28.9171 stale=0 time=0.06m eta=15.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.15 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.58 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=51 / 300 train_loss=29.4329 valid_loss=28.8245 stale=0 time=0.06m eta=14.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.13 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.51 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=52 / 300 train_loss=29.4122 valid_loss=28.7511 stale=0 time=0.06m eta=14.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.09 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.79it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.44 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=53 / 300 train_loss=29.3706 valid_loss=28.6848 stale=0 time=0.06m eta=14.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.02 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.36 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=54 / 300 train_loss=29.2971 valid_loss=28.599 stale=0 time=0.06m eta=14.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.98 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.29 loss_momentum=1.61 loss_charge=0.64\n", + "epoch=55 / 300 train_loss=29.2534 valid_loss=28.5283 stale=0 time=0.06m eta=14.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.93 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.22 loss_momentum=1.60 loss_charge=0.64\n", + "epoch=56 / 300 train_loss=29.2014 valid_loss=28.4572 stale=0 time=0.06m eta=14.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.90 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.14 loss_momentum=1.60 loss_charge=0.64\n", + "epoch=57 / 300 train_loss=29.1719 valid_loss=28.3774 stale=0 time=0.06m eta=14.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.87 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.08 loss_momentum=1.60 loss_charge=0.64\n", + "epoch=58 / 300 train_loss=29.142 valid_loss=28.3182 stale=0 time=0.06m eta=14.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.83 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.00 loss_momentum=1.60 loss_charge=0.64\n", + "epoch=59 / 300 train_loss=29.1002 valid_loss=28.2324 stale=0 time=0.06m eta=14.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.77 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.92 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=60 / 300 train_loss=29.0321 valid_loss=28.162 stale=0 time=0.06m eta=14.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.73 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.83 loss_momentum=1.60 loss_charge=0.64\n", + "epoch=61 / 300 train_loss=28.9967 valid_loss=28.0695 stale=0 time=0.06m eta=14.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.67 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.76 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=62 / 300 train_loss=28.9372 valid_loss=27.9977 stale=0 time=0.06m eta=14.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.64 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.68 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=63 / 300 train_loss=28.8994 valid_loss=27.9128 stale=0 time=0.06m eta=14.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.60 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.59 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=64 / 300 train_loss=28.8591 valid_loss=27.8225 stale=0 time=0.06m eta=14.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.54 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.49 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=65 / 300 train_loss=28.8005 valid_loss=27.7244 stale=0 time=0.06m eta=14.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.50 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.42 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=66 / 300 train_loss=28.7594 valid_loss=27.6534 stale=0 time=0.06m eta=14.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.46 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.35 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=67 / 300 train_loss=28.7155 valid_loss=27.5762 stale=0 time=0.06m eta=14.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.40 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.26 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=68 / 300 train_loss=28.6569 valid_loss=27.4944 stale=0 time=0.06m eta=14.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.37 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.20 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=69 / 300 train_loss=28.6203 valid_loss=27.4284 stale=0 time=0.06m eta=13.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.31 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.12 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=70 / 300 train_loss=28.5674 valid_loss=27.3463 stale=0 time=0.06m eta=13.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.27 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.03 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=71 / 300 train_loss=28.5255 valid_loss=27.258 stale=0 time=0.06m eta=13.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.21 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.94 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=72 / 300 train_loss=28.461 valid_loss=27.1642 stale=0 time=0.06m eta=13.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.17 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.86 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=73 / 300 train_loss=28.4175 valid_loss=27.0834 stale=0 time=0.06m eta=13.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.14 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.80 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=74 / 300 train_loss=28.3912 valid_loss=27.0273 stale=0 time=0.06m eta=13.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.06 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.72 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=75 / 300 train_loss=28.3103 valid_loss=26.949 stale=0 time=0.06m eta=13.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.04 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.65 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=76 / 300 train_loss=28.2848 valid_loss=26.8726 stale=0 time=0.06m eta=13.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.96 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.56 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=77 / 300 train_loss=28.2095 valid_loss=26.7851 stale=0 time=0.06m eta=13.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.91 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.49 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=78 / 300 train_loss=28.1501 valid_loss=26.7167 stale=0 time=0.06m eta=13.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 22/22 [00:03<00:00, 6.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.85 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.41 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=79 / 300 train_loss=28.0926 valid_loss=26.6361 stale=0 time=0.06m eta=13.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 14%|█████████████▍ | 3/22 [00:00<00:02, 6.87it/s]" + ] + } + ], + "source": [ + "### start with these\n", + "\n", + "losses_ALL = {}\n", + "best_val_loss = {}\n", + "\n", + "vicreg_models = [\"native\", \"VICReg_2_1\", \"VICReg_6_1\"]\n", + "for vicreg_model in vicreg_models:\n", + " print(f\"Will use {vicreg_model}\")\n", + "\n", + " if vicreg_model == \"native\":\n", + " mlpf = MLPF(**mlpf_native).to(device)\n", + " vicreg_encoder = None\n", + " else:\n", + " mlpf = MLPF(**mlpf_ssl).to(device)\n", + " vicreg_encoder = load_(vicreg_model)\n", + " \n", + " losses_ALL[vicreg_model], best_val_loss[vicreg_model] = training_loop_mlpf(\n", + " device,\n", + " mlpf,\n", + " train_loader,\n", + " valid_loader,\n", + " 300,\n", + " 50,\n", + " 5e-5,\n", + " vicreg_encoder,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51ce24de", + "metadata": {}, + "outputs": [], + "source": [ + "### anything you wanna add?\n", + "\n", + "vicreg_models = [\"VICReg_4_1\", \"VICReg_6_2\", \"VICReg_6_3\", \"VICReg_7_3\"]\n", + "for vicreg_model in vicreg_models:\n", + " print(f\"Will use {vicreg_model}\")\n", + "\n", + " if vicreg_model == \"native\":\n", + " mlpf = MLPF(**mlpf_native).to(device)\n", + " vicreg_encoder = None\n", + " else:\n", + " mlpf = MLPF(**mlpf_ssl).to(device)\n", + " vicreg_encoder = load_(vicreg_model)\n", + " \n", + " losses_ALL[vicreg_model], best_val_loss[vicreg_model] = training_loop_mlpf(\n", + " device,\n", + " mlpf,\n", + " train_loader,\n", + " valid_loader,\n", + " 4,\n", + " 50,\n", + " 5e-5,\n", + " vicreg_encoder,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8170780", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d2813c3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "c8b62757", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhUAAAISCAYAAAB74T3GAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAADQj0lEQVR4nOzdd1hU19bA4d8MvWtAQEABERtg7yXWxBI11muJvRsTG7FGY4sxxl4wtiixR2OJGnvs0ViSWFDsioqABQUBqXO+PwjzhQAKw9B0vc8zz5VT9l4z5HLW7LPP2ipFURSEEEIIIbJJndcBCCGEEOLtIEmFEEIIIfRCkgohhBBC6IUkFUIIIYTQC0kqhBBCCKEXklQIIYQQQi8kqRBCCCGEXhjmdQC5xcLCgtjYWAwMDLC3t8/rcIQQQogC4/HjxyQlJWFqakp0dHSGx6neleJXBgYGaDSavA5DCCGEKLDUajVJSUkZ7n9nRipSkgq1Wk3RokXT7A8LC8PBwSFLbSqKwqNHj3ByckKlUmXpXF36KyjnFaTPJbf7LEifjXwu+j1P13Pfhc9GPhf9npcTn01ISAgajQYDA4M3dq5XSUlJ+m5SL5ydnRVAcXZ2Tnd/2bJls9xmRESEAigRERFZPleX/grKeQXpc8ntPgvSZyOfi37P0/Xcd+Gzkc9Fv+flxGfzpmtoCp0nat65c4cZM2Zw584dAOLi4vjf//6HmZkZrq6uLFu2TNemc1RYWBjlypVL87p9+zZ+fn55HZ4QQgiRJ/z8/Lh9+3a618iwsLBMtaHT7Y8LFy5Qv359oqKiaNCgASVKlGDOnDn8/PPPFC1alJiYGD799FPc3Nxo2rSpLl3kGAcHB65evZpme7ly5RgyZEgeRCSEEELkvSFDhuDn55fuNdLFxYXg4OA3tqHTSMWUKVOIiYlh8eLFVKhQAYAff/wRLy8vgoKCuHLlCjY2NixatEiX5oUQQghRAOmUVJw/f55mzZoxePBgzM3NCQoK4ubNm3To0AFDQ0Ps7e354IMPuHz5sr7jFUIIIUQ+pVNSER4eznvvvaf9+dSpU6hUKurVq6fdZmpqypMnT7IfoRBCCCEKBJ2SCldXV37//Xftz3v37sXU1JTatWtrt/39998UKVIk+xHmktyeT6FrfwXlPF3lRZzy2eSP83RVkN6ffDb6PU9XBeX95cU8v2z3meXnTRRFGTlypKJWqxVfX19l/vz5irGxsdK2bVtFURTlxYsXypw5cxS1Wq20bt1al+ZzRGYfh8mK7Dy28zaTzyVj8tmkTz6XjMlnkz75XDKWE59NZq+hOj39MWbMGPbs2cPcuXMBMDMzY8qUKQAsWLCAyZMnY2Jiwrhx47KX8QghhBCiwNApqbC3t+fs2bPs3r2bx48f06JFCzw9PQHw9PTk008/pV+/flSsWFGfsQohhBAiH9O5+JWVlRVdunRh2LBh2oQCoEuXLixevFhvCcWmTZtQqVTcvn071fajR4/y0UcfYWtrS7FixRg6dCiRkZF66VMIIYQQWZetpc9DQkJSrVa2Z88e+vTpw6RJkwgKCsp2cPfu3WPQoEFptu/evZtmzZrh6OiIn58f3bt3Z9WqVXzyySfZ7lMIIYQQutHp9sfLly/p3Lkz+/bt4+TJk9SqVYuDBw/SqlUrlH8WPV2xYgV//PEHxYsX1ymwxMREunbtmu6+UaNG8emnn2rndHTu3Bl3d3eWL1/O48ePZWlzIYQQIg/oNFIxc+ZM9u7dS40aNXB0dARg1qxZWFlZsXPnTlasWMHjx4+1F31dTJ48maCgICZOnJhq+7Fjx7h27RpDhw4F0C5n3r9/f86dOycJhRBCCJFHdEoqtm7dire3N6dOncLd3Z2oqCiOHj1Kp06daNmyJX379uX999/nwIEDOgV17NgxZs6cyZo1a7Czs0u179KlS5iamnLnzh2qVauGmZkZzs7OfP7550RFRenUnxBCCCGyT6fbH/fv36dLly7an8+ePUtiYiINGjTQbvPw8ODcuXNZbjs8PJxu3boxcuRIGjduzI8//phqf3BwMElJSbRr1w5fX1+mTZtGQEAA06ZN49q1axw8ePC17SuKkq0JnSYmJpiYmGj/PWnSJO3PIpl8LhmTzyZ98rlkTD6b9MnnkrH0Ppu4uDji4uJ0bjNlakNmDswyFxcXpW7dutqfJ06cqKjVauXhw4fabQ0bNlTs7Oyy3Hbbtm2VKlWqKPHx8YqiKIq/v78CKLdu3VIURVEGDBigAMr69etTnbdu3ToFUI4dO5ZuuymFO7L7mjRpUpbfkxBCCJGXJk2apJdr4JuKX+l0+6NixYqcO3eOy5cv8+zZM/z9/SlfvjzOzs5A8kjG+fPncXV1zVK7/v7+7N27l+XLlxMfH090dDSxsbEAREdHEx0djb29PSqVijZt2qQ6t3nz5kDysuyv4+TkREREhM6vfxf0SkhKIDw2PEvvUQjxbtq9ezcqleq1qze3bNkSS0tL7a3c3r17o1Kp0j32xx9/pEOHDpQoUQIrKysqVKjAV199xYsXL1Idd+zYMVQqVZqXoaEhxYsXp0uXLly7dk1v71NXjx49omfPnri5uWFlZUXVqlVZvXp15r8hZ2DJkiWp1qXKjLCwMEqVKqUd1U5MTGTu3Ll4e3tjYWGBm5sbffr04eHDhxm2MXr0aLp3765TzBmVUnj58iVjxozB09MTCwsLKlSowLJly7SfUVJSEhUqVODKlStp2hw3bly2rn1OTk6ZC16XjOf48eOKoaGholarFSMjI0WtVis//PCDoiiKsnr1asXS0lJRq9WKn59fltodPnz4azMkS0tL5fvvv1cA5dmzZ6nODQ0NVQBl1apV6bat7zLdvz/8XWmypYky8shIvbQnhHi7JSYmKo6OjkrVqlXT3f/s2TPFyMhI6d69u3Zbr169lP/+mY6MjFTatWunqNVqpXfv3sqqVauUjRs3KiNGjFAsLS2VcuXKpSrPfPToUQVQfH19lX379mlfO3bsUGbMmKHY2toqTk5OyosXL3LmjWdCXFyc4unpqTg6OioLFixQNm/erPTp00dRqVTKhAkTdG73wYMHipubW6qR9czo2LGjMm/ePO3PX331laJWq5Vhw4YpP//8s7JgwQLF0dFRKVeunPLq1as051++fFkpVKiQ0q1btyzHfPfuXcXGxibVCH2KFi1aKDY2NsrQoUOVzZs3K0OHDlVUKpUyY8YM7TFbt25VatasqWg0miz3/TqZvYbqlFQoiqLs2bNH+eCDD5SKFSsq06ZN026fMmWKYmVlpYwZM0ZJSkrKUpt37txRTp48meo1fvx4BVA2bdqknDp1Snn48KFiaGiozJ07N9W5c+fOVVQqlXL16tV029Z3UnE9/Lri7e+t+Pj7KLef39ZLm0KIt9uoUaMUQLly5UqafStWrFAA5eDBg9pt6SUVw4cPVwwNDZX9+/enaeP48eOKSqVShg8frt2WklT4+/unG9PKlSsVQNmzZ4+ubyvb1qxZk+7t688++0wxMDBQIiMjs9Tezp07lTp16ihGRkYKkKWkIiAgQLG0tFSioqK02woVKqT06NEjTR+AcvjwYe22lStXKtWqVVPUarUCZDmpSEhIUGrVqpVuUhEUFKQAyvfff5/qnI4dOyrFixfX/qzRaBRXV1e9/z4zew3VufhV8+bNOXDgAH///TcTJkzQbh81ahSRkZF8++23qNVZa97d3Z06deqkepUqVQqAqlWrUqtWLZydnRkwYACjRo3C19eXLVu2MGrUKEaPHs2QIUMoW7asrm8pS0oVLkWjYo1QUFhxeUWu9CmESEtRFGLiE3P1peg4JN+7d28A1q5dm2bfpk2bcHJyolGjRhmef/fuXZYsWULfvn358MMP0+yvV68ePXv2JDAwMNMxFS5cGCDV4/gajYY5c+ZQpUoVLCws8PT0ZPr06SQmJqY698CBA9StWxcbGxtq1qzJjh076N27Nw0bNsx0/wCBgYGYmJikuU3RqFEjkpKSuHr1apbac3BwoG3btsyYMQMPD48snbtgwQLatWuHhYUFkHzLoWrVqmluubu5uQHw6tUr7TZXV1c6derEd999p/1csyKjUgqAdirAf5+ItLe31+4DUKlU9OjRg/nz52e5f33Q6emP9Dx9+hRbW1vMzMz01WSGFi9eTLFixdi8eTPLly+nZMmSzJ07l88++yzH+/63ARUGcPjBYfbc3cOnFT6lmHWxXO1fCAGvEpIo99X+XO3z6tSmmBtn/c9n2bJlqVGjBuvWrWP69OnaL16hoaEcPXoUX1/f134ZO3r0KPHx8fTs2TPDY1avXp3u9tjY2FQVkOPi4ggMDGTq1KlUqVKFypUra/f16tWLTZs2MWzYMMaOHcvZs2eZPHkygYGBrFu3DoBdu3bRpk0bWrRowdKlSwkJCWHAgAGYm5vj7u6epc+lX79+dOjQIc38kSNHjqBSqXBxcclSe9WrV6d69epA8lyW/yZDGVEUhe3bt6ea92JlZaV9qlBRFJ4+fUpQUBBTp07Fyckp1VOPTZo0oUmTJkDydSorUkop7Nu3L925GqVKlaJSpUpMnDgRlUpF5cqV2bdvH/7+/vTr1y/Vsc2aNeObb74hIiICGxubLMWRXTqPVGg0GpYvX06FChWwsLDAwcEBc3NzfHx8WLp0abYn16To2bMniqKkyjZVKhVjx47lr7/+4uXLl/z99998/vnnGU5oyiletl7Uda6LRtGwMmBlrvYthCiYevfuzcOHDzl69Kh225YtW0hKSnrjxL7r168DpFpvKbMGDRqEpaWl9mVra0vdunWJj4/n0KFD2r+fZ86cYe3atSxatIhZs2bRsWNHZs2ahZ+fH+vXr+fPP/8Ekkel69aty86dO+nSpQsjR45k8+bNOi3RUKJEiVRJDcCcOXPw8/OjS5cu2ocActqFCxd4+vQptWrVSnf/nTt3sLe3p1q1ahw+fJhdu3Zhbm6e7X7/W0ohIzt37uTZs2faCbqffvopVatWZfbs2amOq1KlCgYGBhw5ciTbsWWVTiMVGo2Gxo0bc/z4cYyMjChdujROTk6EhoYSGBjIkCFD2LJlC7/99pu+4813BpYfyMngk+y8tZNB5QdR1LJoXockxDvFzMiAq1Ob5nqfuurcuTMjRoxgzZo12lsdmzZtolKlSnh7e7/23JRhbmNj4yz3O378eFq0aKH9OSEhgbNnzzJp0iQ+/fRTNmzYACR/YzY0NKR9+/apRjbatm3L4MGDOX78OC4uLly/fh1fX99UX+YaNGiQ5VGF/zpz5gwjR47k1KlTtGrVihUrcu/28pUrVzA0NMzwyUVnZ2eOHz9OcHAwfn5+1K9fn8OHD1OtWrVs9duvXz8cHBz4+uuvMzwmNDSURo0aYW9vz8yZM3F2dubixYvMnDmTjh07snXrVu0ol4mJCS4uLly9ejXNbZucplNSMW/ePI4dO0abNm1YvHhxqkdNHj16xKeffsquXbuYP38+w4cP11es+VJF+4rUcKzBmdAzrApYxZc1v8zrkIR4p6hUKp1uReQVGxsb2rZty9atW1myZAlPnz7l9OnTmVrWoEyZMgDcvHmTKlWqpHvMn3/+ydGjR+nSpUuqv82lSpWiTp06qY5t0KABDx48YNmyZaxatQpTU1Pu3btHYmIiRYoUSbf9lOF/IN3HDHUdVYiJiWHMmDH4+flRvHhx1q9fn+H6TzklNDQUW1vbDPebmppq5320bt0aV1dX5s2bp03IdJFSSuH3338nPj6e+Pj4NKUULCwsmDFjBo8ePeLu3bva382HH35I+fLladasGbt27eLjjz/WtmtnZ0dISIjOcelKp9sfv/zyC66urmzcuDHNf1ROTk5s2rSJYsWKsXXrVr0Emd8NKD8AgG03t/Ek5kkeRyOEyO969+5NVFQU27dv56effkKtVqeqUpyRGjVqAMkjGxmZPXs248aNw8rKKlOx+Pj4kJCQwPPnz4HkpMDU1JQTJ05w8uTJNK9+/fpp/+6HhoamaS8sLCxT/f5bXFwcrVu3ZunSpXz11Vdcv3491xMKSE5Q/3vr/tChQ/j4+BAQEJBqu7m5OcWLF09TFySrLl68SGxsLFWqVNHemkpZnbtChQra9bVu375NyZIl0yR7tWvXBuDWrVuptiuKkutTAkDHpCIgIIA6depkWB7V1NSUunXrpluA421UzbEalewrEa+Jx/+Kf16HI4TI5xo3bkzx4sVZs2YNGzdupGnTpjg4OLzxvEqVKtG1a1cWLlyYak5GigsXLrBt2zaaN2+e6aQi5e94TEwMkHyRSvmm/O8n8QwNDVm8eDHx8fG4uLjg6urK+vXrU7V1+vRp7t27l6l+/83f35/ffvuNVatWMXny5Dwrve3o6Eh4eOqChh4eHgQEBKRZyyo4OJjAwEAqVqyYrT6HDh2aJnEbP348kJw8pvRbvnx5bty4QXBwcKrzU+ZN+Pj4pNr+7NkzbUKSm3QaM7SxsdFmtRl58eJFrs86zSsqlYoB5Qcw+NBgttzYQl+fvrxn+l5ehyWEyKdUKhU9e/Zk+vTpaDQaxowZk+lz586dS1BQEI0bN6Znz57Url0ba2trLly4wOLFi7G1tWXZsmWZbs/S0hJIvkh6eHjQsGFDWrVqRZs2bfD19aV06dJcu3aNBQsW4Obmpp0k+t1339GpUyfatGlD586dCQ0NZc6cOZQqVSrL35C3bt1K4cKFsbOzY//+tE/yVK9eXadHNLPKy8uLxMRE7t27p31k1N3dnU8++YQJEybw/PlzKleuTEhICPPmzcPGxoYRI0ZkqY/nz59z9uxZSpYsiYeHB+7u7mmelkkZdahatar2IYXhw4fj7+9P/fr1GT58OM7Ozly4cIH58+eneuoEkufePHz4kHLlymXj09CRLkUwWrVqpVhYWCgBAQHp7g8ICFDMzc2V1q1b69J8jtB38av/0mg0SqddnRRvf29l/p/zc6QPIcTb4/bt24pKpVKsra2VmJiYdI9Jr/iVoihKUlKSsmDBAqV58+aKs7OzYmVlpVSoUEEZPXq0Eh4enurYNxW/CggIUAClUaNG2m3x8fHKpEmTFG9vb8XMzExxd3dXfH1901Td3L59u1KtWjXF2tpaqV+/vvL7778rHTp0UDp06JClz8LLy+u11ZSPHj2apfb+rUGDBpkufqXRaBQ7Oztlw4YNqbZHR0crEydOVEqVKqX9PHr37q08ePAgw7bc3NzSLX6V8vuYPHlyhuf+d82rFA8ePFD69OmjuLu7K+bm5oqXl5cydepUJTo6OtVxv//+u2JgYKDXKqmZvYaqFCXrz36ePn2a999/n/fee4+xY8fSuHFjihYtSkhICL/99hszZ87k2bNnHD9+PMNHc3Kbi4sLwcHBODs7v7Zee3Ycvn+YYUeGYWFkwf72+7ExeTdGaoQQ757o6GiMjIzSPIlSq1Ytqlat+to1TvKzgQMHEhMTk26BsoJi4sSJnDt3jn379umtzcxeQ3W6/VGrVi38/PwYNWoUX3zxRap9iqJgaWnJokWL8k1C8W9hYWEZDgkNGTKEIUOG6Nx2g2IN8Czsyc3nN9kQuIHBFQfr3JYQQuRndevWxd3dnW3btmm3BQUFce7cOQYOHEhCQgLx8fFvbEelUr2x1oNGo0lVufJ1zM3NszVBcejQodSoUYOoqCjtraGCRFEU1q5dy9KlS7N8rp+fH35+funuy+wEXJ1GKlI8fvyYNWvWaCePODs74+npSY8ePTI16Sg35cZIBcC+e/sYdWwU1sbW7G+/H0vjgvcfpRBCvMmyZcsYPHgwI0eOpGXLljx//pwvv/ySFy9ecPfuXb799lsmT578xnZcXFx48ODBa485duxYqsqVr3Pr1q0sl+b+r06dOlGzZs0sz5fID7Zt28bs2bP5/fff9fr0R2avodlKKgqS3EoqkjRJtPmlDfci7zGs8jD6+fR780lCCFEArVy5kkWLFnHr1i1sbW2pVq0a8+fPp1ixYjx48ID79++/sQ1jY+M3Fo+KjIzk8uXLmYqpSpUqmJqaZurYjISFhVGvXj3Onz+PtbV1ttrKTUlJSVSuXJkNGzbg5eWl17YlqfiP3EoqAHbe3smXJ7+ksElh9rXfh7lR9su4CiGEEHkls9fQTNWpUKvVGBgYZPllaFhwqtzpUwv3FjhbOvM87jlbb74bBcCEEEKITF3169evnyeVuQoqQ7Uh/Xz6MeX0FFYHrOZ/pf+HiUHeFHMRQgghckumkoq8WOmsoPvY42OWXlxKWEwYO27uoFOZTnkdkhBCCJGjdF76XLyekYERfbz7APBDwA8kJCXkcURCCCFEzpKkIge182yHraktIdEh7L6zO6/DEUIIIXKUJBU5yNTQlN7evQFYeXkliZrEPI5ICCGEyDmSVOSwjqU6UsikEPdf3mffPf2VTBVCCCHyG0kqcpi5kTk9yvUAYMWlFWgUTR5HJITIC7t370alUr12TYyWLVtiaWlJVFQUAL17987wybsff/yRDh06UKJECaysrKhQoQJfffUVL168SHXcsWPHUKlUaV6GhoYUL16cLl26cO3aNb29z+z4+eefady4MTY2Nri7uzNp0iQSErI3H23JkiXUq1cvS+eEhYVRqlQpIiMjAUhMTGTu3Ll4e3tjYWGBm5sbffr0eW29htGjR9O9e/dM97lt2zZq1KiBlZUVrq6u9O/fn9DQ0FTHvHz5kjFjxuDp6YmFhQUVKlRg2bJlpJSbSkpKokKFCly5ciVL71ev9LaEWT6X06uUvk5kXKRSa30txdvfW9l/d3+u9y+EyHuJiYmKo6OjUrVq1XT3P3v2TDEyMlK6d++u3ZbeKqWRkZFKu3btFLVarfTu3VtZtWqVsnHjRmXEiBGKpaWlUq5cOSUiIkJ7fMqqmL6+vsq+ffu0rx07digzZsxQbG1tFScnJ72uaKmLpUuXKoaGhsrIkSOVjRs3KkOHDlXUarXy2Wef6dzmgwcPFDc3t0yvUpqiY8eOyrx587Q/f/XVV4parVaGDRum/Pzzz8qCBQsUR0dHpVy5csqrV6/SnH/58mWlUKFC6a5Smp4tW7YogNKiRQtl9erVyqJFixQnJyelfPnySmxsrPa4Fi1aKDY2NsrQoUOVzZs3K0OHDlVUKpUyY8YM7TFbt25VatasqWg0miy95zfJ7DVUkopcsuivRYq3v7fS/pf2ev9lCyEKhlGjRimAcuXKlTT7VqxYoQDKwYMHtdvSSyqGDx+uGBoaKvv3p/2Ccvz4cUWlUinDhw/XbnvT0ucrV65UAGXPnj26vq1si46OVgoXLqwsWLAg1fbJkycrdevWVeLj47PU3s6dO5U6deooRkZGCpClpCIgIECxtLRUoqKitNsKFSqk9OjRI00fgHL48GHttpUrVyrVqlVT1Gq1AmQ6qWjYsKFSo0aNVNt+/fXXVO0HBQUpgPL999+nOq5jx45K8eLFtT9rNBrF1dVV77/PzF5Ddb79cf78ecaOHUvfvn0zfPXrJ+tepOhWthvmhuZcf36d4w+P53U4Qrw9FAXio3P3pePqBr17J0/cTm9Z7U2bNuHk5ESjRo0yPP/u3bssWbKEvn378uGHH6bZX69ePXr27ElgYGCmYypcuDAA9vb22m0ajYY5c+ZQpUoVLCws8PT0ZPr06SQmpp5sfuDAAerWrYuNjQ01a9Zkx44d9O7dm4YNG2a6f4AtW7YQGxurvWZoNMm3iSdNmsSJEycwMjLKUnsODg60bduWGTNmZHlxsQULFtCuXTssLCyA5FsOVatWpU2bNqmOc3NzA0i1eqqrqyudOnXiu+++036umREbG4udnV2qbSm/j9jY2FT/m95xKfsgedXXHj16MH/+/Ez3r0861dE+cOAArVq1IjExUXsvJz0qlYqVK1fqHFxOyMmlz1+nkGkhOpXpxOqA1Sy7tIz3Xd6XKqVC6ENCDHzjlLt9jn8ExhZZPq1s2bLUqFGDdevWMX36dNTq5O91oaGhHD16FF9fX+229Bw9epT4+Hh69uyZ4TGrV69Od3tsbCzR0dHan+Pi4ggMDGTq1KlUqVKFypUra/f16tWLTZs2MWzYMMaOHcvZs2eZPHkygYGBrFu3DoBdu3bRpk0bWrRowdKlSwkJCWHAgAGYm5vj7u6epc/l0qVLuLq6snPnTr755hsCAwNxcXGhZ8+efPnll1lOKqpXr0716tWB5Lks/02GMqIoCtu3b08178XKyoqDBw9q9z99+pSgoCCmTp2Kk5NTqtVTmzRpQpMmTQBYvHhxpuPt1KkTvr6+fPvtt7Rv357bt28zbdo0nJ2dtfNBSpUqRaVKlZg4cSIqlYrKlSuzb98+/P3903yBb9asGd988w0RERHY2NhkOg59LH2uU1Ixbdo0EhISmDBhAl26dNFmdAWBg4MDV69ezZO+e5brycbAjVx+epnTIaep7VQ7T+IQQuSd3r17M2jQII4ePaodldiyZQtJSUlvnNh3/fp1ADw9PbPc76BBgxg0aFCa7WXLluXo0aPaLzlnzpxh7dq1LF26lIEDBwLQsWNHPD09GThwICNGjKBKlSqMGjWKunXrsnPnTu25lStXpmHDhllOKoKDg7l37x5Dhw5l/PjxlClThlOnTjFjxgyCg4NZsWJFlt+vLi5cuMDTp0+pVatWuvvv3LlDyZIlAbCwsOD48eOYm2d/wchhw4Zx5swZxo0bx7hx4wAwNzfn1KlTWFpaao/buXMnlStXpkOHDtpt9evXZ/bs2anaq1KlCgYGBhw5ciTNCMvrvO6LdcqCYm+iU1Jx+fJl6tWrx9SpU3U5/Z1la2ZLh1IdWBe4jmUXl0lSIYQ+GJknjxzkdp866ty5MyNGjGDNmjXapGLTpk1UqlQJb2/v156bMsxtbGyc5X7Hjx9PixYttD8nJCRw9uxZJk2axKeffsqGDRuA5KdFDA0Nad++faqRjbZt2zJ48GCOHz+Oi4sL169fx9fXN9WIa4MGDXBxcclybM+fPyc2NpbffvuN2rWT/y42a9YMExMTJk6cyIQJE3B1dc1yu1l15coVDA0NM+zL2dmZ48ePExwcjJ+fH/Xr1+fw4cNvXLr9TYYOHcovv/zCxIkTqV27NuHh4SxZsoSmTZty5MgRypYtS2hoKI0aNcLe3p6ZM2fi7OzMxYsXmTlzJh07dmTr1q3aUS4TExNcXFy4evVqlpIKfdApqTA0NKREiRL6juWd0MurFz9d/4m/Hv/F+dDzVHWsmtchCVGwqVQ63YrIKzY2NrRt25atW7eyZMkSnj59yunTp5k7d+4bzy1TpgwAN2/epEqVKuke8+eff3L06FG6dOmCk9P/3xYqVaoUderUSXVsgwYNePDgAcuWLWPVqlWYmppy7949EhMTKVKkSLrtpwz/A6naT+Hs7PzG9/Ff9vb2ODg4aBOKFC1atGDChAlcvHgxV5KK0NBQbG1tM9xvamqqvR3RunVrXF1dmTdvnjYh08Xff//NokWLWLJkCYMHD9Zub9euHeXKlWP8+PFs376dGTNm8OjRI+7evav93Xz44YeUL1+eZs2asWvXLj7++GPt+XZ2doSEhOgcl650mqjZpEkTzp49+9r5FCJ9DhYOtC3ZFoDll5bncTRCiLzQu3dvoqKi2L59Oz/99BNqtZouXbq88bwaNWoAySMbGZk9ezbjxo3DysoqU7H4+PiQkJDA8+fPgeSkwNTUlBMnTnDy5Mk0r379+mmTif/WUYDM33v/N2dn51QTHlPEx8cDZPq9ZJdKpUpzXTt06BA+Pj4EBASk2m5ubk7x4sXT1AXJqtu3bwOkueViampKpUqVuHXrlva4kiVLpkn2UhKxlONSKIqSJ/P2dEoq5syZw8uXLxk6dGiqWacic/r49MFQZcjpkNNcenIpr8MRQuSyxo0bU7x4cdasWcPGjRtp2rQpDg4ObzyvUqVKdO3alYULF3L06NE0+y9cuMC2bdto3rx5pi/EJiYmAMTExADJF6mUv+t16tTRvgwNDVm8eDHx8fG4uLjg6urK+vXrU7V1+vRp7t27l6l+/61du3ZERkayffv2VNs3bNiAmZkZFStWzHKbunB0dCQ8PDzVNg8PDwICAjhw4ECq7cHBwQQGBmY7tvLlywNpVwOPjo7m3Llz+Pj4aI+7ceNGmnkNKeelHJfi2bNnODo6Zis2Xeh0+2PVqlW0bt2aZcuWsXnzZqpWrYqDg0OarCg/Pv2RHzhbOtPSoyU7bu1g+aXlLG6c+VnCQoiCT6VS0bNnT6ZPn45Go2HMmDGZPnfu3LkEBQXRuHFjevbsSe3atbG2tubChQssXrwYW1tbli1blun2UiYCBgcH4+HhQcOGDWnVqhVt2rTB19eX0qVLc+3aNRYsWICbm5t2kuh3331Hp06daNOmDZ07dyY0NJQ5c+ZQqlSpLH9Drl69Oi1atKBbt26MGjUKLy8vDh48yIoVK5g9e3aWHs/MDi8vLxITE7l37572kVF3d3c++eQTJkyYwPPnz6lcuTIhISHMmzcPGxsbRowYkaU+nj9/ztmzZylZsiQeHh6UKlWKPn36MHbsWB4+fKidU/H9998THh7OxIkTARg+fDj+/v7Ur1+f4cOH4+zszIULF5g/f36qp04gee7Nw4cPM3zSMUfpUgRDpVJl6qVWq3VpPkfkdfGr/7oXcU8p/2N5xdvfW7n69GpehyOEyGW3b99WVCqVYm1trcTExKR7THrFrxRFUZKSkpQFCxYozZs3V5ydnRUrKyulQoUKyujRo5Xw8PBUx76p+FVAQIACKI0aNdJui4+PVyZNmqR4e3srZmZmiru7u+Lr65um6ub27duVatWqKdbW1kr9+vWV33//XenQoYPSoUOHrH4cSnx8vPLFF18oXl5eiqWlpVK9enVl48aNWW7nvxo0aJDp4lcajUaxs7NTNmzYkGp7dHS0MnHiRKVUqVLaz6N3797KgwcPMmzLzc0t3eJXKb+PyZMna7clJCQoixYtUipWrKhYWloqLi4uSseOHZWrV1NfGx48eKD06dNHcXd3V8zNzRUvLy9l6tSpSnR0dKrjfv/9d8XAwECvVVIzew1VKUrWJ0bcv38/08cWL148q83niJTHYZydnV9brz03jTk+hj139/CB6wfMbfDmSVpCCJFfREdHY2RklOZJlFq1alG1atXXrnGSnw0cOJCYmJh0C5QVFBMnTuTcuXPs26e/RSwzew3V6fZHfkkUCrr+Pv3Zc3cPB4MOcuv5LUoWLpnXIQkhRKbUrVsXd3d3tm3bpt0WFBTEuXPnGDhwIAkJCdqJlq+jUqneWOtBo9GkO5EzPebm5tmaoDh06FBq1KhBVFRUqhoRBYWiKNo6I3kh26uUhoeHc/bsWX7++WdOnz7Ns2fP9BHXO6Fk4ZI0KZ58H2zF5dwp7iKEEPowaNAgduzYwRdffMHRo0fZvn07zZs3x97eni5duvDNN99gaWn5xlfp0qXf2NeJEycy1ZalpSV37tzJ1vvy8vLio48+yrWCW/q2fft2nJycaNq0aZ70r9PtD0jOSMeNG8dPP/2UZl/Hjh357rvv8tWIRn68/QEQ+CyQ/+3+H2qVmp1tduJqnfPPYgshhD6sXLmSRYsWcevWLWxtbalWrRrz58+nWLFiPHjwIFO3yo2Njd9YPCoyMpLLly9nKqYqVapgamqaqWMzEhYWRr169Th//jzW1tbZais3JSUlUblyZTZs2ICXl5de287sNVSnpCIiIgJvb2+Cg4Px8vKiUaNGODk5ERoaym+//UZAQADFixfn0qVL+eYXkl+TCoAhvw3h+MPjtCnZhml1puV1OEIIIUQqmb2G6nT7Y+LEiQQHB/Ptt99y+fJlFixYwJgxY5g3bx6XLl1i+vTp3L9/n0mTJun8Bt4lA8oPAGD37d0ER725troQQgiRH+k0UlG5cmVUKhV//vnna48B+Ouvv3SPTo9SsixDQ8MMF+PJyVVK36T/gf78EfIH/yv1PybWmpgnMQghhHh3vW6V0ps3b5KYmJgztz+srKzo0KFDhkvsQnIZ2q1btxIZGZnV5nNEfr79AXAu9Bx99vfBSG3E3nZ7cbB4c3U9IYQQIjfk6O0PV1dXbt68+dpjbt26la8mauZ31RyrUdm+MgmaBPyv+Od1OEIIIUSW6ZRUVKtWjdOnT6f75AfA5s2b+f3336levXq2gnvXDCw/EICfb/zMs1fyaK4QQoiCRafbH48ePcLb25uIiAhatmxJ48aNKVq0KCEhIfz222/s3r2bQoUKcfny5XSXxs0L+f32ByQXLflkzydcfnqZPt59GFElazXlhRBCiJyQoxU1nZyc2L9/P59//jm7du1i165dqZaMrVatGosWLco3CUVBoVKpGFB+AJ8f/pxN1zbR26s3hUwL5XVYQgghRKbolFRAcuLwxx9/cP78ee1yrM7Oznh6er6xkInIWH2X+pQuXJrrz6+z/tp6hlTMm6dRhBBCiKzKdpnuqlWr0rVrV0aNGkXXrl0locimlNEKgPWB63kZ/zKPIxJC5FdTpkzhyJEj2p8bNmyYrXUvdBEQEECFChVISkoCICYmhi+//JIyZcpgbm5OyZIlGTFiBM+fP8+wjf/973/aJb7fRFEUli9fToUKFbCwsKBkyZKMGjUqzZOGV65coXXr1jg5OWFtbU21atVYt26ddn9ERASlSpUiLCxMh3ctMpKpkYpp06ZRvXp1bS3xrKze1r17d90ie4c1cW1CCZsS3Im4w6Zrm+hfvn9ehySEyIcmT57MhAkTaNiwIQDfffcd4eHhuda/oij069ePKVOmYGBgAMDgwYPZvHkzo0aNolKlSly7do1vv/2WS5cu8dtvv6Vp4/Dhw+zYsYMxY8Zkqs/Zs2czZswYOnfuzOjRowkODuabb74hICCAvXv3AvD06VPef/99HB0dmTp1KjY2Nmzbto3u3buj0Wjo0aMHNjY2DBo0iKFDh2b40IHQQWbWUVepVMrQoUNT/axWqxW1Wq2oVKo0r5TtarU6S+u156TMrgWfX+y6vUvx9vdW6m6sq0THR+d1OEKIfAhQJkyYkGf97969W3F3d1c0Go2iKIry/PlzBVC++uqrVMctXLhQAZQ7d+5ot02fPl0pX768AmTpfbi7uyudOnVKtc3Pzy9V+/PmzVMA5fbt26mOq1KlivL+++9rf3758qViYWGhBAQEZP5Nv6Myew3N1O2PXr16UaNGDe3Pq1ev1r78/f3TvFK2v644VmZt2rQJlUrF7du3092vKArNmzenXr162e4rP2nm1oxiVsV4EfeCLTe25HU4QuRbiqIQkxCTqy9Ft3UYadiwIV26dOH48eM0b96cQoUKUaJECebNm5fquMePH9O/f39cXFwwMTHBycmJTp06ce/ePQCOHTumvc3x9ddf4+7uDiQXHSxWrBgAXbp0oXDhwmmWH1+9ejUqlYrTp08DycuKz5kzhypVqmBhYYGnpyfTp08nMTHxje9nwYIFdO/eXRvL06dPadKkSZoVMt3c3ABSLV9eunRpevTowezZszPz0WnFxsZiZ2eXapu9vb12H4CRkRFt2rShRIkSqY5zdXVNFYOlpSXt2rVj4cKFWYpBZEznVUpzw71796hYsSIRERHcunULDw+PNMfMnTsXX19f6taty4kTJzJsqyA8Uvpf225uY9KpSdiZ2bG33V5MDbO38p4Qb6OYhBhqbKjx5gP16EzXM5gbmWf5vIYNG/LixQueP3/OiBEjMDU15fvvv+fixYvs3buXZs2aAfDBBx9w5swZhg0bho+PD1euXGHhwoWULl2aP/74g+fPn3P27FmaNWtGly5dGDRoEO+//z69e/fm0KFDPHjwgN27d9OqVSt2797NRx99pI3hww8/5OHDh1y9ehWAHj16sGnTJoYNG0b16tU5e/Ys8+fPp1OnTqnmIPzXixcvsLOz4+TJk9SsWTPN/qSkJJ4+fcrNmzcZPXo0r1694u+//063LZVKxYQJE5g27c0LKo4YMYIVK1Ywa9YsmjVrxl9//cWECRMwMTHhwoULaY6PiYnh6dOnHDlyhE8//ZTp06czfPhw7f4NGzYwfPhwwsLCcn0+SkGSo4+U9u3bl8aNG9O1a9cMj9m6dSunT5/OchaaIjEx8bXtA/z999+MHz8+36yEqm+tSrRi6cWlhESHsP3WdrqU6ZLXIQkhsunChQucOXNGWxywevXqVK5cmTNnztCsWTM0Gg1xcXFMnTo11cXv1atXzJkzB4DChQtrRwM8PDx4//330/TTtGlTbG1t2bx5szapCA0N5fDhw8ycOROAM2fOsHbtWpYuXcrAgcnF9zp27IinpycDBw5kxIgRVKlSJd33ceTIEQwNDalUqVK6+48ePUqTJk0AcHR05I8//sjqR5WuWbNm8eeff/Lpp59qt9nb22e4FtXAgQO1yVG3bt0YOnRoqv21atXiyZMnXLx4kYoVK+olxneZTknF6tWrsbKyeu1F/+jRo6xevVrnpGLy5MkEBQUxceJEvvjiizT7o6Oj6dKlC7169eL69euZGqoraIwMjOjj3YfpZ6azKmAVHTw7YGRglNdhCZGvmBmacabrmVzvU1clSpRIVW045aKc8jdMrVZz/PhxIPnWTlhYGIGBgezZsweNRpPpfoyMjOjYsSMbN24kPj4eY2NjNm/ejFqt1k6gP3bsGIaGhrRv357o6GjtuW3btmXw4MEcP348w6TiypUrFCtWDBMTk3T3V61alaNHj3Lv3j3mzJlDjRo1+OOPP7S3QnSh0Wjo2LEjV65c4bvvvqNChQoEBwczZ84cGjduzLFjx3B0dEx1zsSJE+nevTunT5/mu+++Iz4+PtXETDc3NwwMDLh69aokFXqQ6aTiv7ce/P392bVrV7rHxsXFERISkuF/jG9y7NgxZs6cyb59+zIcZhk6dCgqlYq5c+emGtp7E0VRsrXImYmJSYb/J8oJbT3bsvzSckKjQ9l5eyftS7XPtb6FKAhUKpVOtyLyStGiRd94zKlTpxg/fjznzp0jKSkJT09P7dMVWfHJJ5+wdOlSDhw4QMuWLdmwYQOtWrXSzkG4d+8eiYmJFClSJN3znz59mmHboaGh2NraZrjfxsaG+vXrU79+fZo2bYqzszPLly/nm2++yfL7SPHLL7+wY8cO9uzZQ/PmzbXbW7VqRYkSJZg5c2aa+SmlSpWiVKlSfPjhh5ibmzN69GimTZtGqVKlgOT/fmxtbQkJCdE5roIgLi6OuLg4nc/P7EyJTCcVGo1Ge78ppXpmRp0YGxtTrlw5xo8fn9nmtcLDw+nWrRsjR46kcePG/Pjjj2mO2bx5M+vWreOPP/7A3Dxrf0wePXqEjY1NluNKMWnSJCZPnqzz+VllYmBCL69ezDo/i5WXV/JxyY8xVOtcs0wIkcfedN8+ICCA999/n/79+7N06VJKly6NSqVi0qRJXLp0KUt91alTB1dXV7Zs2ULZsmU5c+YMv/76q3a/s7MzpqamHDx4MN24XlcV+d9VlFOsWbOGWbNmcezYMd577z3tdkdHRwoVKsSLFy+yFP9/pUzYr1WrVqrtdnZ2eHp6cuvWLQDatWuHo6MjS5YsSXVcmTJlANLEoSjKWz+fYsaMGUyZMiXH+8n01enu3bvaf6vVanr16sWCBQv0HlC/fv1wcHDg66+/Tnd/UFAQAwcO5Ntvv83wXt7rODk5ERgYqHN8uTlKkaJDqQ6svLySh1EP2Xt3L608WuV6DEKI3PHbb7+RlJTEhAkTcHZ2BpK/1B09ejTLbalUKrp06cL3339P8eLFcXZ2TvVkRu3atbVPTNSpU0e7/cyZM8yfP/+1X6AcHR159iz1wofFihUjICCAo0eP0q5dO+32v//+m/Dw8GzfXihfvjyQPJ+jbdu22u0hISFcv35d+96srKzYvn07s2fPTvXF89ChQxgaGuLl5aXdpigK4eHhaW6bvG3GjRvHyJEjdT6/bNmyPHr06I3H6fSV19/fX5vx6ZO/vz979+7l999/Jz4+nvj4eO1/8NHR0URHR9OzZ0/Kly9Pv379tPcAk5KSSEpKIjo6GiMjI4yNjTPsQ6VSFbiJneZG5vTw6sGCvxaw4vIKWri3wECd9aFQIUT+l3LBGzhwIF27diUuLo4ff/yRgIAAAPz8/OjXr5/2VuyZM2c4c+ZMqsf+/+2TTz7h22+/ZdasWXzxxRepbqM0bNiQVq1a0aZNG3x9fSldujTXrl1jwYIFuLm54enp+do4Hzx4QFxcnPbLVoMGDahXrx79+/fnxo0blC5dmjt37jB79my8vLzo0aNHlj6LR48ecfnyZXx8fHBycqJJkyY0adKEnj17cvHiRSpUqMDDhw9ZsGAB1tbW2omto0ePZtOmTXzwwQcMGDAAc3NzDh06xMqVK5kyZQoWFhbaPu7evUtSUhLlypXLUmwFTXZv3Wd6JCenCmUMHDhQadKkSZbOGT58uLYQSnovS0tLpVChQq895rPPPku37YJW/Oq/Xsa9VGpvqK14+3sre+/uzetwhBA6aNCggVK3bt002/lP8aeFCxcqHh4eirm5uVK1alVl0aJFypMnT5Tq1asrxYsXV8LDwxVFUZQpU6Yotra2Svny5RVFUZRevXopLi4uadovX768olKp0hSDUhRFiY+PVyZNmqR4e3srZmZmiru7u+Lr66u8ePHite/lxYsXioGBgXLq1KlU2589e6Z89tlnSokSJRQzMzOlVKlSyvDhw5Vnz55l2NZ/338Kf39/BVD8/f2126Kjo5WpU6cqXl5eirm5ueLu7q706dNHefDgQapzT506pTRp0kQpUqSIYmNjo9SoUUNZt26dtlBXivXr1ytFihRJs12kltlrqM51Kv744w+2bduWZvgLkguQ/PLLL9jZ2WmLtWTG3bt30wyv7Nmzh2+++YZNmzZRvHhxVCqVtsZ8is8//5zExES+//57ihYtmqbgCRTMOhX/9f2F71lycQmehT35udXPqFXZXrpFCCF01rRpU6pXr56p+hL5Vffu3bGwsGDp0qV5HUq+lqN1Ko4ePUqzZs20ldr+O2FHpVJhY2PDjBkzstSuu7u7tjJcipSJN1WrVk23+BUkzzJOTExMdU/wbdS1bFd+vPojN5/f5OiDozQq3iivQxJCvMOGDRvGp59+ytSpUwvkRMeoqCi2b9/O2bNn8zqUt4ZOX3XnzJmDRqNh7dq1XLx4kdq1a9O4cWPu3bvH4cOHqVKlClWrVqVLFynWpE82JjbaAljLLy3XuVSwEELoQ/PmzXF0dGTHjh15HYpOli9fTsuWLd/6+RS5SafbH8WKFcPLy4t9+/YB8OOPP+Lr66t9pjksLAx3d3cWLlxIv3799Buxjt6G2x8A4bHhNP25KbFJsSxtspQ6zm/36IwQIn8LCAjgk08+4a+//tKplkZeiYyMpGrVqpw4cQIHB4e8Diffy+w1VKeRiidPnqSqila6dGmeP3+uffbXwcGBxo0by3KyOeA90/foWLojAMsuLZPRCiFEnvL29ubixYsFKqEAsLa25saNG5JQ6JlOSUWRIkUICwvT/uzm5oaiKNoFaiC5GMlff/2V/QhFGr28emGsNubvx39zPux8XocjhBBCADomFT4+Puzfv5/z55MvaI6Ojtja2rJ3717tMX/99RemprKqZk6wN7enrWdy4ZdlF5flcTRCCCFEMp2SCl9fX+Lj46lRowZr164Fkle2mz17NuPGjaNfv35cvnyZevXq6TVY8f/6evfFUGXImdAzXHh8Ia/DEUIIIXRLKho3bsyePXto3bq1tgTqrFmzcHd3Z+bMmaxatYrixYszffp0vQYr/l9Ry6K0LtkaSJ5bIYQQQuQ1nYtfpUdRFM6ePUtERAS1a9fG0tJSX01n29vy9Me/3Y+8T6sdrdAoGja13ISXrdebTxJCCCGyKEef/siISqWiRo0afPjhh/kqoXhbFbcuTgv3FgCsuLQij6MRQgjxrstURU1dS7CqVComTJig07k5JSwsLMNCJ0OGDGHIkCGZaifp5UuCvpuDUswVjwG99RlilvT36c+vd37lt/u/ceP5DUoVLpVnsQghhCi4/Pz88PPzS3ffv5/4fJ1M3f5Qq9MOaPy7JOt/S3SnbEtvnY68ou/bHycX/IDt97OJMzal3IG9GOfhsrm+R305EHSA5m7N+a7+d3kWhxBCiLeTXm9/HD16NNXryJEj1KlTB5VKRfv27Vm5ciV79uxh1apVdOrUCZVKRbt27Xjy5Ine3lB+U6xrJ66954pJfCyXx07K01gGlB8AwL57+7gbcTdPYxFCpG/37t2oVCoWLVqU4TEtW7bE0tKSqKgoAHr37p3hmho//vgjHTp0oESJElhZWVGhQgW++uorbRHCFMeOHUOlUqV5GRoaUrx4cbp06cK1a9f09j71IS4ujgoVKtC9e/dst7VkyZIsP4kYFhZGqVKliIyMBCAxMZG5c+fi7e2NhYUFbm5u9OnT57UX19GjR2c6fo1Gw/fff0/lypWxsrLCx8eHsWPHkpCQkObYefPmUaVKFQoVKkSDBg1SlXJISkqiQoUKXLlyJUvvV690WQL1+++/VwwMDJQdO3aku3/37t2KoaGhMmfOHF2azxE5sfT59z/sVS6XKadcLV1GeXbwkN7a1cVnhz5TvP29lfEnxudpHEKI9CUmJiqOjo5K1apV093/7NkzxcjISOnevbt2W69evZT//pmOjIxU2rVrp6jVaqV3797KqlWrlI0bNyojRoxQLC0tlXLlyikRERHa448ePaoAiq+vr7Jv3z7ta8eOHcqMGTMUW1tbxcnJ6Y1Lneemzz//XAGUbt26ZaudBw8eKG5ubukuN/86HTt2VObNm6f9+auvvlLUarUybNgw5eeff1YWLFigODo6KuXKlVNevXqV5vzLly8rhQoVynT8n332mWJkZKSMGDFC+fnnn5Vp06YpNjY2SqtWrVIdN2HCBEWlUim+vr7K+vXrlTZt2iiGhobKr7/+qj1m69atSs2aNfW+lHtmr6E6JRX16tVT6tev/9pjGjVqlOVfZE7KiaQiKjZBmd3uM+Vq6TLKX7XqKUnR0XprO6suPb6kePt7KxV+rKA8iHyQZ3EIITI2atQoBVCuXLmSZt+KFSsUQDl48KB2W3pJxfDhwxVDQ0Nl//79ado4fvy4olKplOHDh2u3pSQV/v7+6ca0cuVKBVD27Nmj69vSq927dytGRkaKubm5zknFzp07lTp16ihGRkYKkKVrUUBAgGJpaalERUVptxUqVEjp0aNHmj4A5fDhw9ptK1euVKpVq6ao1epMJ0V3795VAOXbb79NtX3//v0KoJw/f15RFEWJiIhQLCwslNGjR2uPSUpKUmrVqpXq/Wk0GsXV1VXvv8/MXkN1evrj0qVLFC9e/LXHODk5cfnyZV2aLzAsTAzxHDWMMLPCmIY/4d6c+XkWi08RH2o71SZJSeKHgB/yLA4hcpuiKGhiYnL1pej4JH7v3smTulOKBv7bpk2bcHJyolGjRhmef/fuXZYsWULfvn358MMP0+yvV68ePXv2JDAwMNMxFS5cGAB7e3vtNo1Gw5w5c6hSpQoWFhZ4enoyffp0EhMTU5174MAB6tati42NDTVr1mTHjh307t2bhg0bZrr/fwsJCaF3795MnTo1VTxZ5eDgQNu2bZkxYwYeHh5ZOnfBggW0a9cOCwsLAF6+fEnVqlVp06ZNquNS1r969eqVdpurqyudOnXiu+++036ub/L3338D0LRp01TbP/jgA8zNzdm6dSsAO3fuJDo6mh49emiPUavV9OjRg5MnT3L//n0geV5jjx49mD9/fqbfsz5l6umP/3Jzc+P06dMkJSWlu4hMYmIip06dokSJEtkOML9rVcODLz/oTvedC3m1YT2xHdthWqZMnsQysPxATj06xY5bOxhYfiCOFnk3eVSI3KK8esX1ylVytc/Sf/2J6p/Cf1lRtmxZatSowbp165g+fbp2EnxoaChHjx7F19c33YnxKY4ePUp8fDw9e/bM8JjVq1enuz02Npbo6Gjtz3FxcQQGBjJ16lSqVKlC5cqVtft69erFpk2bGDZsGGPHjuXs2bNMnjyZwMBA1q1bB8CuXbto06YNLVq0YOnSpYSEhDBgwADMzc1xd3fP0ucCyclhjx498PLyYvTo0SxbpntRv+rVq1O9enUgeS7Lf5Oh18Wwffv2VPNerKysOHjwoHb/06dPCQoKYurUqTg5OdGgQQPtsU2aNKFJkyYALF68OFN9pixodufOHSpWrKjdHhwcTExMjHbeRlBQEGq1mrJly6Y639vbG4D79+9rv+w3a9aMb775hoiICGxsbDIVh77oNFLRqFEjbt++Tf/+/bUTilJERUXRr18/7t27R+PGjfUSZH6mUqnoOqwrJ5zKo1Y03Br7JUoePfFS2aEyVR2qkqhJZHVA+n9YhBB5q3fv3jx8+JCjR49qt23ZsoWkpKQ3Tuy7fv06AJ6enlnud9CgQVhaWmpftra21K1bl/j4eA4dOqSdEHrmzBnWrl3LokWLmDVrFh07dmTWrFn4+fmxfv16/vzzTwBGjRpF3bp12blzJ126dGHkyJFs3ryZoKCgLMcGyVWZ//rrL9auXfvaxConXbhwgadPn1KrVq1099+5cwd7e3uqVavG4cOH2bVrl7aqtK6qVq2Kl5cXvr6+HDx4kCdPnnDy5Enatk1e3ynlUc7Q0FAKFy6c5rOxs7PT7k9RpUoVDAwMOHLkSLZi04VOIxVff/01v/76K/7+/uzatYs6derg5OTEo0eP+P3333n27BleXl4617coaLydbdjW41NiZg/D/NpVwn/ajG3XLnkSy4DyAzh/8Dxbb26lf/n+2JnZ5UkcQuQWlZkZpf/6M9f71FXnzp0ZMWIEa9as0d7q2LRpE5UqVdJ+68xIbGwsAMbGxlnud/z48bRo0UL7c0JCAmfPnmXSpEl8+umnbNiwAUh+WsTQ0JD27dunGtlo27YtgwcP5vjx47i4uHD9+nV8fX1TPZ3SoEEDXFxcshzb+fPnmTBhAps2bdLpfH25cuUKhoaGuLq6prvf2dmZ48ePExwcjJ+fH/Xr1+fw4cNUq1ZN5z6NjY3ZsWMHffr00d7SMjY25uuvv+bRo0e89957QPIoSXq33TQaDUCq0RgTExNcXFy4evVqmts2OU2ndNDc3Jw//viD4cOH8+rVK3bu3MnSpUvZuXMn8fHxjB07lpMnT75Tq5QO6VCTTeU/AiBk1mwSHj/OkzhqFq1J+SLliUuKY82VNXkSgxC5SaVSoTY3z9VXRo95ZoaNjQ1t27Zl69atxMTEcP/+fU6fPp3qXnlGyvxza/XmzZsZHvPnn38yZ84cHj16lGp7qVKlqFOnjvbVoEEDRo8eTb9+/fj555+1Ccu9e/dITEykSJEiqUY27O3t0Wg02uF/SJ4791/Ozs6Z/iwgObnp0qULnTp1omnTpkRHRxMdHY1GoyEhIYHo6Oh0H63MCaGhodja2ma439TUlHr16tG5c2f279+Pqakp8+bNy3a/JUuW5Pjx44SFhXHx4kUiIyMZNWoUT5480X6eRYsW5cWLF9okIsWzZ8+AtJ+7nZ0dISEh2Y4tq3QeYypcuDBz584lKiqKoKAgzpw5w6NHj4iIiOCbb77J9fs4eeLJDQi/A4CtpQnlBvfmRiEXDF7F8PDrGXkSkkqlYmD5gQBsur6J57HP8yQOIUTGevfuTVRUFNu3b+enn35CrVbTpcubRzdr1KgBJI9sZCRltWgrK6tMxeLj40NCQgLPnyf/rXB2dsbU1JQTJ05w8uTJNK9+/fppk4l/D7mnyGzlxRQxMTHcunWLdevWpUpi7t+/z08//YSlpSULFy7MUpu6UqlUaUYDDh06hI+PDwEBAam2m5ubU7x48TR1QbIqISGBY8eO8ejRI+zt7SlfvjwmJiacP3+ehIQEypcvDyRPAtVoNGlqUKQ8EPHfhyeUfwpQ5ja93LgqVqwY1apVwzEPq0rmuis7YGld2PEp/JM5dqtdgh2NepCEitgD+4g6cSJPQqvnXI+y75XlVeIr1gWuy5MYhBAZa9y4McWLF2fNmjVs3LiRpk2baifsvU6lSpXo2rUrCxcuTDUnI8WFCxfYtm0bzZs3z3RSYWJiAiRf3AFq166tHbX498iGoaEhixcvJj4+HhcXF1xdXVm/fn2qtk6fPs29e/cy1W8KS0vLdJMXR0dHPvzwQ06ePEnnzp2z1KauHB0dCQ8PT7XNw8ODgIAADhw4kGp7cHAwgYGBqSZX6sLQ0JAuXbrQq1evVNsXL15M4cKF6dixIwCtW7fGwsKCNWv+fwRao9Gwfv166tSpk+aWzbNnz/LkmpypORUGBgZ8/vnn2kdUMvuIjkql4tatWzoHl685VQK1Idw/DWeXQ81BGBmo6du7Ob9cPEm728d58NVkSu/ZjTob9191oVKpGFB+ACOOjmBD4AZ6evXE2tg6V2MQQmRMpVLRs2dPpk+fjkajYcyYMZk+d+7cuQQFBdG4cWN69uxJ7dq1sba25sKFCyxevBhbW9ssPTmRsvhjcHAwHh4eNGzYkFatWtGmTRt8fX0pXbo0165dY8GCBbi5uWkniX733Xd06tSJNm3a0LlzZ0JDQ5kzZw6lSpXK0jdkAwMD6tSpk2a7qakp9vb26e7LKV5eXiQmJnLv3j3tI6Pu7u588sknTJgwgefPn1O5cmVCQkKYN28eNjY2jBgxIkt9PH/+nLNnz1KyZEk8PDxQqVSMHj2aESNGMGLECGrVqsWvv/7K2rVrWbp0KWb/XD+sra0ZMWIE06dPR6VSUalSJTZv3szZs2fZuXNnqj5iY2N5+PBhhutc5aRMjVT8d4KIRqPRbnvd67/3ft4qhV3hw6nJ/z40WXsbpK6nHSHtuvPEzAZCHvFkyZI8Ca9R8UaULFSSqIQoNgZuzJMYhBAZ69WrF4qiYG1tTevWrTN9noODA8ePH2fevHmEhoYyefJk+vXrx549exg8eDBXrlzJ0jfUlHkaU6ZM0W7bunUrn332GRs2bKBbt26sXLmS7t27c+DAAe3TB//73//Yvn07jx49YuDAgezYsYOffvqJ8uXLv3ZeQn5WoUIF7OzsOH36dKrty5cv54svvmDz5s188sknzJ49m3r16nHu3DmKFCmSpT4uXbpEs2bNtI/mAgwbNoz58+eze/du+vfvz8OHD9myZQsDBgxIde60adOYNWsWBw8eZNCgQYSHh7N7926aN2+e6ri//vqLpKQkneuFZEemFhS7f/8+VlZWmS7mkR+lLIZiaGiY4eNYWVmlFEi+7bGmNdw7Aa51oecuUKt5EB7DuC/8+PLUKhQDA0ps34ZpqdxfPXTPnT2MOTEGGxMbDrQ/gLlR9h59EkKIFNHR0RgZGaV5EqVWrVpUrVr1tWuc5GcDBw4kJiYm3QJlBcXEiRM5d+4c+/bty9J5r1ul9ObNmyQmJr5xQbFMJRVvA32vUqoVfhe+rw0JMdBiNlTvD8CcA9cp9M2X1A69gkmlSrivX4cql5+9TtIk8fEvHxMUGcTIKiPp7Z13S7QLId4ulSpVwt3dnW3btmm3BQUF4eHhwcqVK/nkk0+Ij49/YzsqleqNtR40Gk2qypWvY57Np3OuXLlCjRo1CA0N1d4aKkgURcHd3Z2lS5fSrFkzvbWr11VKHzx4oPPrrfeeOzSZnPzvg5Pg+T0ABjfwYGvdzrwyMCbu77958fPPuR6agdqAfj79APC/4k9sYmyuxyCEeDsNGjSIHTt28MUXX3D06FG2b99O8+bNsbe3p0uXLnzzzTepnubI6FW6dOk39nXixIlMtWVpacmdO3ey9b68vLz46KOPWLFiRbbaySvbt2/HyckpTdnv3JKpkQq1Wq1T5qdSqTJdHjWn5dhIBSTfBvH/CO6fAvf3ocdOUKnYefERh6ctYGDATrCywnPvHgztcrcYVYImgVbbWxEcFczY6mP5pOwnudq/EOLttXLlShYtWsStW7ewtbWlWrVqzJ8/n2LFivHgwQPtehSvY2xs/MbiUZGRkZleS6pKlSrZrpEUFhZGvXr1OH/+PNbWBWeSe1JSEpUrV2bDhg14eXnpte3MXkMzlVT07t1b5+GkVatW6XSevuVoUgHw7DZ8XwcSX0HLeVC1D4qi0OX73/nkx8mUjAjGulUrnGd9p/++32Dz9c1M+2Ma9ub27G23F2ODrFfjE0II8e7Sa1LxNsjxpALgtB/sHw/GlvDpaShUnCuPIhg5dQNzjy5CjULxVT9gUbt2zvSfgfikeJpvbc7jV4/5qtZXdCzVMVf7F0IIUbDpdU6FLn7++WeWLl2aU83nTzUGQbEaEB8FO4eCouDlZEOVpnXZVSL5WeuQyVPQxMXlaljGBsbaSZo/XP6BBE3ulLwVQgjxbtFpQbEUV69e1dYd/7fY2Fi++uorwsPDGTRoUHa6KFjUBvCxX3KlzTtH4O+1ULkHX3xYmubnW1Ln0SXs7t/n2bJlFBk6NFdDa1+qPSsuryA4Kpg9d/bwccmPc7V/IYQQbz+dRirCwsKoWLEiPj4+NGjQIM2rWbNmXLt2Tbvi2jvFzhMafpn87/1fQkQw71kYM7hFeZb5JF/Iny5fQdzt27kalpmhGT29egKw8vJKkjR5szy7EEKIt5dOScXMmTO5dOkSTZo0YcSIEdjY2ODj48OkSZPo3r07JiYmtGrVKlWN8ndKrSHgXBXiImHXMFAUutV05XGl2pxxKAuJiYROmpzuMrY5qVPpTtiY2HAv8h4Hgg68+QQhhBAiC3RKKn799VfKli3L/v37mT17NmPHjtXe8vD392fLli3s378/zapu74yU2yAGxnDrIFzciKGBmsmtvVlSvi2xBkbEnD9PxLbtuRqWhZEF3cp2A2D5peVolLe4jLoQQohcp1NS8ejRI2rWrKn9uVKlSty6dUu75v1HH32Ej48P06dP10+UBZF9GWgwLvnf+8ZCZAi1S9pRpUY51pVJvi30eNYsEp/n7tLkXct2xdLIklsvbnHk/pFc7VsIIcTbTaekwtjYmKSk/78n7+bmhqIoqVYk9fHx4dy5c9mPsCCrPTR5NdPYCNg9AhSF8S3Ksrd0A+5aFyXpxQsez8zduhXWxtZ0KdMFgGWXluX6LRghhBBvL52SCldXV44dO6YdmXB3d8fAwIA//vhDe8yDBw948uSJfqIsqAwM4eMloDaCG3vh8haKvWdOv4alWFixPRpUROzYQfSZs7kaVvdy3TEzNCMwPJATwSdytW8hhBBvL52Siq5duxIUFEStWrU4e/YshoaG1KpVi++++47r169z8uRJTp8+rV1S953mUA7qj0n+955R8DKMwfU9iHQvw1635FtIoZMno8nEwjv6Uti0MJ1KdwJktEIIIYT+6JRUfP7553Tt2pW//vqLixcvAjB37lzu3r1LuXLlqF+/PjExMXzxxRd6DVYfwsLCKFeuXLqvjJZ8zba6w8GxPMS+gF9HYmakZvxHZVldrgXPTayIv3uXZ7m8eE1Pr54Yq4259OQSZ0Nzd6RECCFE/uPn55fh9TEsLCxTbWSrTHdERASJiYnY2toCySvJrV+/nsjISDp37kzr1q11bVrvcqVM9+uEXoblDUCTCO1/QPFuT+flf2B64jfGnl+PytgY9192YOLunmshfXPmGzZe20g1x2qsapo/1mgRQgiR/+Rome6USZo2NjbahAKgXr16LF26lA0bNuSrhCJfcPSBev+M3OwZhSr6KZNaeXHCpSLn7UujxMcTOmVqrt6K6OPdB0O1IedCz/FX2F+51q8QQoi3k05JhYuLC6NHj+bq1av6juftVs8XHLzhVTjs8aWckzVda7riV6Ed8QZGxPzxB5G7duVaOI4WjnzskVzlc/ml5bnWrxBCiLeTTklFZGQks2fPxsfHh1q1arFixQoiIyP1Hdvbx9A4uSiWygCu/gJXduD7QWle2TmyvnQTAMK+nUnSixe5FlJfn74YqAz4/dHvBDx9R4uVCSGE0AudkoonT56wfv16PvroI/7++28GDhxI0aJF6dGjB0eOSEGl13KqCPVGJv/7V18K8xLfD0uxrWR9Hto4khQezuM5c3ItnGJWxfioxEdA8pMgQgghhK50SirMzc3p0qULO3fuJDQ0lBUrVlCrVi02btxIkyZNcHd3Z+rUqQQFBek73rfD+6OgSFmIeQp7R9G1enFKOhVmfvn2ALzY8jMx58/nWjh9ffqiQsXRB0e5Hn491/oVQgjxdtEpqfi3QoUK0bdvXw4dOsTDhw+ZP38+9vb2TJkyhZIlS+ojxrePoQm0WZJ8GyRgK4Y3fuWrVuW4YuvOPtcaAIRMnoySS7UrStiUoKlbUwBWXM7dR1uFEEK8PbKdVKRITEzkwoULXL58mbt376IoSqpS3uI/nCtDnaHJ/949ktpF1bTwceQHr4+INrMi/tZtnq1anWvh9C/fH4AD9w5w58WdXOtXCCHE2yNbSUV8fDy7du2iV69e2Nvb06JFC1auXImjoyPTp0/nzp3sX5w2bdqESqXi9u3b2m0vXrxg6NCheHp6YmFhQfny5Zk9e7a2bHiBUX8s2JWG6MewbyzjW5QlwdwSv3ItAXj6/ffE37+fK6GUKlyKRsUaoaCw8vLKXOlTCCHE20WnpGLbtm107dqVIkWK0KZNG9asWUOhQoUYO3Ysly5d4tKlS4wbNw43N7dsBXfv3j0GDRqUZnubNm3w9/enT58+rFmzhiZNmjB+/Hj69OmTrf5ynZHpP0+DqOHST7g8Psag+h4ccanM1aKlUeLicrV2xYAKAwDYc3cPDyIf5EqfQggh3h46JRUdOnRg06ZNmJubM2TIEE6dOsWdO3eYPn063t7eegksMTGRrl27ptl+4sQJjh07xuLFixk3bhzt27dn7ty5zJgxg3Xr1hW82hnFqkGtIcn/3jWcQdVtcS5szlyvNiQZGhH9++9E7tmTK6F42XpR17kuSUoSPwT8kCt9CiGEeHvolFT06tWL/fv3ExwczMKFC6lZs6a+42Ly5MkEBQUxceLEVNsDAwMB+PDDD1Ntb9SoEQCXL1/Weyw5ruGXYFsSokIxOzKR8S3KEmxZhJ9KJb+nsBnfkpRLdUAGlh8IwC+3fyEkKiRX+hRCCPF2MNTlpFWrcnadiGPHjjFz5kz27duXpsb4Rx99xB9//IGDg0Oq7Sn1MYoVK/bathVFyVahLhMTE0xMTHQ+P11GZslLpK9qChfW06JcG2qWeI9NSQ1pHnaJwk9DeDx3LkUnT9Zvv+moaF+R6o7VORt6llUBq/iy5pc53qcQQoicFRcXR1xcnM7nZ/Y2vN6e/tCX8PBwunXrxsiRI2ncuHGa/c7OztSoUQOVSqXdtnHjRr788ktq165N7dq1X9v+o0ePsLGx0fk1Y8YMvb9nAIrXgJqDAVDtGsaUD4uRZGjIjDLJZbRf/LSZmL//zpm+/yNltGLbzW08iXmSK30KIYTIOTNmzMjWte/Ro0eZ6kenkYqc1K9fPxwcHPj666/feOy1a9cYNWoUu3fvpmbNmuzYseON5zg5OWlvoehC76MU/9ZoIlzfC8/vUvrSTLrVHMia03CmdC1qXD9N6KTJuG/9GZWRUc7FAFRzrEbFIhW58OQC/lf8GVVtVI72J4QQImeNGzeOkSNH6nx+2bJlM5VY5KuRCn9/f/bu3cvy5cuJj48nOjqa2NhYAKKjo4mOjgaSJ3FOnTqVChUq8Mcff7Bw4UJOnjxJkSJF3tiHSqXC2tpa51eOJhXG5slPgwD8tYbRJYMpZG7E3BLNSLC0Ju7GDcLXrMm5/v+hUqkYWCF5tGLLjS2Ex4bneJ9CCCFyjomJSbauff++O/A6+SqpuHjxIrGxsVSpUgVLS0ssLS21j5RWqFABR0dHFEWhT58+TJo0iX79+nH79m0+//xzDAwM8jh6PXGrA9WTL+iWB3wZ29CJSBMLVnol1654smgx8Q+DczyMOk51KGdbjleJr1h3dV2O9yeEEKLgy1dJxdChQzl58mSq1/jx44HkIlgHDhzgwIEDrF27lqlTp+Ln54e1tXUeR50DmkyCQq4Q8YD/PV9BGUcrdjpWIsy9HEpsLKHTcr52hUqlYkD55LoVG65tICIuIkf7E0IIUfDlqzkV7u7uuLu7p9p269YtAKpWrYqHhwcDBgzA0NCQcuXKsX///jRt+Pj44OTklCvx5hhjC/h4MfzYCvVf/sz9oDEtdhnwlUdLlj64QfSx47zcfwDrZk1zNIyGxRriWdiTm89vsuHaBgZXGJyj/QkhhCjYMpVUpPcURmaoVCoOHTqk07kZefToEYmJiXTo0CHd/f7+/vTs2VOvfeYJ9/ehal84/wPlzn1JO++lbAuA41WaU//MLsKmT8eiTm0MrKxyLAS1Ss0AnwGMOj6KdVfX0b1sdyyNLXOsPyGEEAWbSsnEOLpardtdEpVKlW8WFXNxcSE4OBhnZ+c0tS/yrbiXsKQ2RNwnqkJvqv7VlKTYOH4+txjj0GAKf/IJjhMn5GgISZok2vzShnuR9xheeTh9ffrmaH9CCCHyn8xeQzOVLWg0Gp1e+SWhKLBMrKD1QgAsL67m64oRJBgYsdCnLQDPN2zgVQ5XEDVQG2hXMF1zdQ2vEl/laH9CCCEKrhybqBkcHMz9XFph863m0RAqJ9/OafdgBh42Kn6zcCO4an1QFEK+moSSmJijITR3b46zpTPhseH8fOPnHO1LCCFEwZVjScWQIUPSrM8hdPTh12DtgvrFPX4otheA8Y6NwMqauMBAwtfl7COfRmoj+vn0A8A/wJ+4JN1LvQohhHh76ZxUzJkzh+rVq+Ph4ZHm5ezszM6dO7GwsNBnrO8uU2tovQAA11tr6eUcwmNDC36r1xGAJwsXkRCSs4t/tfZojYO5A49fPWbHzR052pcQQoiCSaekYuXKlYwaNYoLFy4QFRXF3bt3efr0KYqiEBoaSkhICBUrVmT16tX6jvfdVbIJVOyGCoXxiYuxUMczx6g0ieV8UGJiCP16eo52b2xgTB/vPgD8EPADCZqEHO1PCCFEwaNTUrFq1Sqsra25efMmoaGh9OjRg0qVKnHnzh2ePn1K3759iYqKwtPTU9/xvtuaTgerohhH3GW5y34UlZrZXu3A0JCo337jpZ4f3/2vdp7tsDW1JSQ6hN23d+doX0IIIQoenZKK27dv8+GHH+Lq6opKpaJly5acP38eADMzM/z8/Hj58iXTp+fst+d3jlkhaJV8G6T2403UN7vDsQQrHjVtD0Do19NJiorOse5NDU3p5dULgJWXV5KoydkJokIIIQoWnZKKly9fUrhwYe3PJUuW5NWrV4T8c1/f2NiY+vXr673wlT6EhYVRrly5dF9+fn55Hd6blWoKFbqgQmGh+UpMiGeMWRUMnJ1JDA3l6aJFOdr9/0r/j0Imhbj/8j7776WtaCqEEKJg8vPzy/D6GBYWlqk2MlX86r9KliyJi4sLR48eBSAiIoLChQuzZ88emjVrBkCXLl3YvXs3L1++zGrzOaJAFr/KSEw4LKkJUWFsMWnPqIj2fFEonMb+34BajduWzZh5eeVY98svLWfR34vwsPFg28fbUKvy1RIyQggh9Eyvxa/+6/333+fEiRPMnj2biIgIbGxsKFGiBGvXrgWSlyY/deoUDg4OukUvXs/8PWg5H4AO8dupoLrFnIj3UBo2AY2G0EmTUXKw8FiXMl2wMrLidsRtfrv/W471I4QQomDRKakYN24cRYoUYcyYMWzevBlIrkuxceNGatasSfny5Xn48CFt27bVa7DiX8q0AJ+OqBQNS61+wEhJYHbJFqgtLYkNCOD5ho051rWVsRVdy3YFkkctcnrFVCGEEAWDTkmFp6cnf/31F3PnzsXrn2H2ESNGMGDAAAIDA7lx4wZt2rRh0qRJeg1W/Efz78CiCEXjgxhpvJ3DTzSEdkpem+PJ/PkkZPIemC66le2GuaE518Kvcfzh8RzrRwghRMGh881wJycnhg0bRu3atbXbli5dytOnT3n58iVbt27F0lJWtMxR5u/BR3MBGKDehbfqDuMSPDD2KY8mOpqw6d/kWNeFTAvRqUwnQEYrhBBCJNMpqZg2bRr796c/89/IyAgzMzMOHz7MggULshWcyIRyrcGrLWqSmG+6gieRMRxu0RsMDHh54AAvjxzJsa57lOuBqYEpl55e4nTI6RzrRwghRMGgU1IxadIk9u7d+9pj9u7dy4QJObsst/hHi9lgbktJJYjPDHcw67aCUafkOQ+h06ahiYnJkW7tzOzoUKoDkDxaIYQQ4t1mmNkDGzdunOrnbdu2cTmDZbfj4uL4+++/KVGiRPaiE5ljYZecWPzcmyGGv7A/rirzneszzOkQiY9CeOLnh8OoUTnSdS+vXvx0/Sf+DPuT86HnqepYNUf6EUIIkf9lOqk48q9hdJVKxcOHD1/7rKqFhQWff/559qITmefVFq5sxzBwJ7OMlvHxzWn06DcMq6ljCff/EZvWrTEtXVrv3TpYONC2ZFs239jM8kvLJakQQoh3WKZvf2g0Gu1LURQ+//zzVNv++3r58iUDBgzIydjFv6lU8NEcMHsPL3UQgw12MiGsEBYffABJSYR+NQlFo8mRrvv49MFAZcDpkNNcenIpR/oQQgiR/+k0p2Ly5Mm0aNFC37GI7LK0T37MFBhqtB3V46scb9odtYUFry5e5MU/NUX0zdnSmZYlWgIyt0IIId5lOiUVX331FU2bNtX+/PjxY86fP69d+0PkIZ8OUPojjEhittFS5p5/jPngzwB4PGcuiU+e5Ei3/Xz6oVapOfbwGIHPAnOkDyGEEPmbznUqXr58yfjx4ylUqBBFixalRo0auLi4YG1tzdixY4mKitJnnCKzVCpoORfFtBA+6nt0TtjB94UqYertjeblS8JmfJsj3brZuNHULTnRXHF5RY70IYQQIn/TaUGxuLg4KleuzLVr17Czs6NmzZo4OTkRGhrK6dOnefz4Md7e3pw/fx5jY+OciDvLUhZDMTQ0xNPTM91jhgwZwpAhQ3I5shxycRNsH0icYkirhG+Y+0FFDIb0AY2GYitWYFmvrt67vPX8Fm13Jpdm3956OyULl9R7H0IIIXKGn59fhqt137x5k8TExDcuKKZTUjFx4kSmT5/Op59+yqxZszAzM9Pue/XqFb6+vixdupSJEycyZcqUrDafI96qVUozQ1FgQye4uZ8LGg++cVzAwhcneb5mDUYuLpTYtRP1v35v+jLiyAgO3T/ERyU+4tt6OTMqIoQQInfl6CqlBw8epHTp0ixatChVQgFgZmbG4sWLKVWqVIZVN0UuUKmg1Xw0JtZUVN+mUvB6zjbsgKGjIwkPH/L0+6U50m3/8v0B2Ht3L0GRQTnShxBCiPxJp6QiMDCQ6tWro1Kp0m9UraZGjRoEBsqEvTxl7YS62QwARhr+zPrDpyg8diwAz1atIu7mTb13Wc62HO+7vI9G0fDD5R/03r4QQoj8S6ekwtHRkeDg4Nce8+jRIxwdHXUKSuhRxU9IKtEIE1UCY+IW8iPFsGzUCBITCZk0OUdqVwwon1yfZNftXQRHvf6/EyGEEG8PnZKKChUqcPz4cY4fT3/J6xMnTnDs2DEqVqyYndiEPqhUGHy8iERDCyqrbxH/+xKShoxEZW7Oq7/+4sXWrXrvskKRCtQsWpNEJZHVAav13r4QQoj8SaekYurUqRgZGdGsWTOGDRvGzp07OXfuHDt37mTYsGE0a9YMIyOjfDNJ851n44JBs+Rl0EeoN7Hyj8sU+aeE+uPZc0h89kzvXaaMVmy7uY3HMY/13r4QQoj8R6ekokyZMvz0008UKVKERYsW0bZtW2rWrEnbtm1ZtGgRdnZ2bNq0iTJlyug7XqEjVZWexLjUw1SVQOugb7ha8wNMypZFExFB2MyZeu+vqkNVKttXJkGTIKMVQgjxjtDpkdIUcXFx7Nq1ixs3bmgfNfH09KRVq1aYmprqM85se+ceKU3Pi/vELayBiSaGxSb96dmsGw+7dgVFofjqVVjUqqXX7k4Fn2LgoYGYGpiyr/0+bM1s9dq+EEKI3JHZa2imkooTJ07g7OxcoJcyl6Qi2atTyzA7MJpXijG762yl3pnjPF+/HmNXV9x3/oLaxERvfSmKQtdfuxLwLIA+3n0YUWWE3toWQgiRe/Rap6JBgwYsXLhQb8GJvGNWsz9httUxU8XjdmoMBv0GYFikCPFBQTxbpt/FwFQqFQMrDARg07VNRMRF6LV9IYQQ+UumkgpFUcjGXRKRn6jV2HVdTiwmVOMqp3YtweHLLwF4umIFcXfu6LW7+i71KV24NDGJMawPXK/XtoUQQuQvOi8oJgouA1t3wmqMA6BJ8BKCixfFov77kJBA6KTJek0gVSqVtsrmusB1RMXLQnNCCPG2kqTiHeXadBi3zCpgoYojYcdnOEyYgMrUlJhz54jYvkOvfX3g+gElbErwMv4lm65v0mvbQggh8o9MTdRUq9U0adKE7t27Z7kDXc7JCTJRM60nQYFYrnofM1U8FypMotgzax7PnoNBoUKU2LsHw8KF9dbXrtu7GH9yPIVNCrOv/T7Mjcz11rYQQoicpdenP9RqdYbrfLxJUlKSTufp2zu39HkmnVg7lXq35xCNKQw4SdigL4i7cQObtm1xmvGN3vpJ1CTSekdrHrx8wBdVv6CnV0+9tS2EECL7cm3pc7VaTdmyZalRo0aWg1y1alWWz8kJMlKRvti4eG7OrIeP5hp3barjUP87grp2BaD4jz9iUaO63vradnMbk05Nws7Mjn3t92FioL/HV4UQQuSczF5DDTPbYJMmTViwYIFeghP5h6mJMREfziN2b2vcI87yLOo8hTp14sVPPxE6eTLuv+xAbWysl75alWjF0otLCYkOYdvNbXQp00Uv7QohhMgfZKKmoE6NWmwv1AsAsyOTsO/XGQM7O+Lv3uXZypV668fIwIg+3n0AWBWwioSkBL21LYQQIu9JUiFQqVRU6zKBvzWemCvRvNgzGoexYwB4tnQZ8ffu6a2vtp5tKWJWhNDoUHbe3qm3doUQQuQ9SSoEACUdC/GHz1TiFCNsQ45hXvQFFnXqoMTHEzJlit5qV5gYmNDLqxcAKy+vJFGTqJd2hRBC5L1MJRW9evXSaZKmKFi6tvyA5er/AaDZOxZH30GoTEyIOf0Hkbt3662fDqU6UNikMA+jHrL37l69tSuEECJvZSqpWLVqFV3/eSJAvL1szIxwaPYFFzUlMEl8ifLnd9gNHgRA2IxvSXrxQi/9mBuZ08OrBwArLq8gSZM/HjsWQgiRPXL7Q6TSoZo7ywv7Eq8YYHJ7P7bVrTEu6UFSeDiP58zVWz+dS3fGytiKuxF3OXT/kN7aFUIIkXckqRCpqNUq+rRrwYLE9gAk7R9L0dHDAHixZQsxf/6pl34sjS3pVrYbAMsvLUejaPTSrhBCiLyT75OKTZs2oVKpuH37dqrt8+bNo0qVKhQqVIgGDRqwd6/cm9eXKq7vEeozkACNG4ZxEZg9Wo1N++QkI3TyZJT4eL3080nZT7AwsuDG8xsce3BML20KIYTIO/k6qbh37x6DBg1Ks33ixIn4+vrSsGFDlixZQuHChWndujV79uzJgyjfTqNbeDOBT0lQDFBd+xWHj0ph8N57xN28xbPV/nrpw8bEhs6lOwOw7NIyva6OKoQQIvfl26QiMTEx3cmhkZGRzJs3j1GjRjF79my6du3K1q1bqVatGjNmzMiDSN9ODtamfNioMYsT2wCgPjEJh2GDAXi6ZAnxDx7opZ8eXj0wNTDlyrMrnHp0Si9tCiGEyBv5NqmYPHkyQUFBTJw4MdX2nTt3Eh0dTY8ePbTb1Go1PXr04OTJk9y/fz+3Q31r9a3rzm6bzgRqiqN6FY41+zGvWRMlLo7QKVP1MrLwnul7dCzdEZDRCiGEKOgyvfZHbjp27BgzZ85k3759aRYuCQoK0i5w9m/e3t4A3L9/n+LFi2fYtqIoREZG6hybiYkJJibvxkJYJoYGjGtZgS/WDuIX4wkYBu7E8ZPZ3P3zT6JPnuTl3r1Yt2iR7X56efXip2s/8ffjvzkfdp5qjtX0EL0QQogUcXFxxMXF6Xx+Zr/w5buRivDwcLp168bIkSNp3Lhxmv2hoaEULlwYtTp16HZ2dtr9r/Po0SNsbGx0fr1rt1gal7XHzrMaS5JaA2Dy97fY9ukOQOg3M0jKRoKWwt7cnraebYHk0QohhBD6NWPGjGxd+x49epSpfvLdSEW/fv1wcHDg66+/Tne/oijpZkwaTfIjiYmJry/77OTkRGBgoM7xvSujFClUKhUTW5aj9fx2fKj5kzIxD7Atc4VINzfi793j8bx5FJ00Kdv99PHuw9YbWzkTcoYLjy9Q0b5i9oMXQggBwLhx4xg5cqTO55ctWzZTiUW+Sir8/f3Zu3cvv//+O/Hx8cTHxxMbGwtAdHQ00dHRFC1alBcvXqDRaFKNVjx79gwAZ2fn1/ahUqmwtrbOuTfxFippb0nX2p6M+n0gO0y+wuDadhz7TOb+V8t5seknCn38MWYVK2arDydLJ1qXbM22m9tYfmk5S5os0UvsQgghsn/rXqVSZeq4fHX74+LFi8TGxlKlShUsLS2xtLTUPlJaoUIFHB0dcXV1RaPRcOXKlVTnXr58GeC18ymE7oY28STEogzLElsCYBG0BJtWzUFRCJk0GSUh+8uY9/Xui1ql5kTwCa4+u5rt9oQQQuSufJVUDB06lJMnT6Z6jR8/HkgugnXgwAFat26NhYUFa9as0Z6n0WhYv349derUwdXVNa/Cf6tZmxoxumkZFiS247biDNGPsS//HAMbG+KuXyd8zdps91HcujjN3ZsDyVU2hRBCFCz56vaHu7s77u7uqbbdunULgKpVq+Lh4QHAiBEjmD59OiqVikqVKrF582bOnj3Lzp07cz3md0mHKi6sOxOEb/BAtplMxvD2Nux7jCRk0SaeLF6MdbOmGL3h9tOb9Pfpz547e/jt/m/cfH4Tz8KeeopeCCFETstXIxWZNW3aNGbNmsXBgwcZNGgQ4eHh7N69m+bNm+d1aG81tVrF5NZeXFBKsjwx+VFSm5gNmFeuiPLqFaFTp2W7zoRHIQ+auDYBYMWlFdmOWQghRO5RKe9ItSEXFxeCg4NxdnZOU/tCZM3IzRf49a+7HLb4EuekYOKc2nBn0d+QkIDzggVYN/0wW+1fD79Oh10dUKHilza/4G7j/uaThBBC5JjMXkML5EiFyFtjm5XB0NiMz2P6o6DC5NEObNs1AiBs+nSSoqKy1X7p90rTwKUBCgo/XP5BHyELIYTIBZJUiCyztzbl88ae/KWUYoP6IwDszPdjVMyFxMePeTJ/Qbb7GFB+AAC77+zm4UsZWRJCiIJAkgqhk9513HCzNWdaTHvCTVxQv3pE0WZFAHi+fj2v/nnEV1c+RXyo7VSbJCWJVQGr9BGyEEKIHCZJhdCJiaEBX7UqRywmDInui4IKi5e/Yl2/6j+1KyahvKG66ZukjFbsuLWD0OjXl18XQgiR9ySpEDprVMaBBqWLcDqxNL9ZfQyAQ/G/UFtZEXc1kOfr12er/SoOVajqUJUETQL+V/z1ELEQQoicJEmFyJaJLcthZKDi8yeteWVRDMOEh9h/WAyAxwsWkhASkq32U0Yrfr7xM09fPc12vEIIIXLOO5dUhIWFUa5cuXRffn5+eR1egeNRxJLeddx5hSnjkwYCUMjwEGZlS6DExBA6fXq22q9ZtCbl7coTlxTHmitr3nyCEEIInfj5+WV4fQwLC8tUG1KnQmTby9gEGs4+xtOoOH712I5X8BZiNcW4uw1ITMLFbzFW6Sxjn1nHHx5nyG9DMDM040D7AxQyLaS32IUQQryZ1KkQucbK1IgxzUoD0PthS5Ksi2GqfoDt+24AhH49HU10tM7t13OuR9n3yvIq8RVrA7O/xogQQoicIUmF0Iv2lV2oUKwQj+OMWFl4BAB2753EyNGOxJAQnixarHPbKpVKO7diQ+AGIuMj9RKzEEII/ZKkQuiFWq1icqtyAMy47sjT0l1QGyo4Vn4BQPiaNcRe1X0580bFG1GyUEmiEqLYdG2TPkIWQgihZ5JUCL2pVLww7Su7APDZ0/Yo1i5YWt/HqqITaDSETJqMkpSkU9tqlZr+Pv0BWHt1LTEJMXqLWwghhH5IUiH0akyz0liaGPJHcDwnykwEwMH1b9TmZsRevszzjbqPMjR1a4qrtSsv4l6w+fpmfYUshBBCTySpEHplb23K541KAjDyLzviy3+CkVkSRaomV9d8Mm8eCWGPdWrbQG1AX+++APhf8Sc2MVY/QQshhNALSSqE3vWu404JOwueRsWx2LAXWBWlsGMQpq6F0URHE/bNNzq33dKjJU4WTjyLfcbWm1v1F7QQQohsk6RC6J2xoZqJLZMnbX5/5ikh73+LSg1Fy9wAtZqX+/fz8uhRndo2UhvR1yd5tGJ1wGrik+L1FbYQQohskqRC5IiGZexpVMaehCSF8QFOUKELpoUTeK988n9yYVOnoYnRbbJlm5JtsDezJywmjF9u/6LPsIUQQmSDJBUix6SsC3Lk+hOOe4wES0eKeDzAsLA5CY8e8XTJEp3aNTYwprd3bwB+uPwDCZoEfYYthBBCR5JUiBzjbmdBn7ruAEw68IiEFnNQGyk4+gQD8Gy1P7HXr+vUdvtS7XnP9D2Co4LZc2eP3mIWQgihO0kqRI76vJEnRaxMuPs0mh+elAWf/2Hl9AorD0NISiL0q0koGk2W2zUzNKOnV08AVl5eSZJGt/oXQggh9EeSCpGjLE0MGdusDACLfrvJk7pTwMIeB6+HqE0MeXXxIi8261ZzolPpTtiY2HAv8h4Hgw7qM2whhBA6eOeSCln6PPe1reRMxWKFiI5PYsaxx/DRHIzMNRTxCgfg8Zy5JD55kuV2LYws6Fa2GwDLLi1Do2R9xEMIIUQyWfo8C2Tp87x18cELPvb7HYBtn9am8pmRKJe3ce9oMWIfJ2H90Uc4z5md5XYj4yNp+nNTohKimN9wPo2L677EuhBCiPTJ0uciX6lQrBAdqySvCzJl5xU0zb5DZWmHY8VQUKmI/PVXok7+nuV2rY2t6VKmCwDLLi7jHcmRhRAiX5KkQuSaUf+sC3LxYQQ/X4+Fj2Zj9l4ChUtFAxA6ZQqa2KyX3u5erjtmhmYEhgdyMvikvsMWQgiRSZJUiFxjb2XKsMaeAHy37xqRHi2hbGuKeEdgaKkm4cEDnn6/NMvtFjYtzP9K/Q9InlshoxVCCJE3JKkQuapnbTdKFLHgaVQ8i367CR/NwcC6MA4VnwLwbNUq4m7ezHK7vbx7Yaw25uKTi5wNPavvsIUQQmSCJBUiVxkbqvnqn3VBVv9+j1sx5tBiFlbOsVg6x0FCAiGTp2S5doWdmR3tS7UHYPml5XqPWwghxJtJUiFyXYPS9jQuY0+iRmHa7qsoXu1QlfkIx8ovUBnBqz//JGLbtiy328e7D4ZqQ86GnuXvx3/nQORCCCFeR5IKkScmtiyHsYGaYzeecPj6E2g5FyNbK4p4RQAQNms2ic+eZalNRwtHPvb4GEieWyGEECJ3SVIh8oTbv9YFmbr7KnFmRaD5TN4rFY1J4UQ0ERE8/u67LLfb16cvBioDfg/+nYCnAfoOWwghxGtIUiHyzGeNSmJvZULQsxhWnbwH5TuhKtOMolWfAxDxy06iT5/OUpvFrIrxUYmPAJlbIYQQuU2SCpFnLE0MGdv8n3VBDt8k7GUctJyHmZM5hT3/qV0xeQqauLgstdvXpy8qVBx5cITr4bqtgiqEECLrJKkQeapNRWcqFy9ETHwSM/deA2snaPYNRXwiMTTTEB8UxLNlWRtxKGFTgg/dPgRgxeUVORG2EEKIdEhSIfKUWq1icmsvVCrY9ncwfwY9h4qfYFCuMQ6VXgDwbMUK4u7czVK7/X36A3Dg3gHuRNzRd9hCCCHS8c4lFbJKaf5T3qUQ/6tSDIDJO6+gUYBWC7DyMMKiaCxKQgKhkydnqVJm6fdK07BYQxQUVl5amUORCyHE20NWKc0CWaU0f3saFUfDWUd5GZfIzPY+dKpWHP78kfiNI7iz1x4lSUXRGTMo1LZNptu88vQKnX/tjIHKgF1tdlHMuljOvQEhhHiLySqlokCxszRhWJOUdUGuE/EqASr3wLj8+9h5vwTg8cyZJD5/nuk2vey8qONchyQliR8CfsiRuIUQQvw/SSpEvtGzthseRSx4Fh3Pwt9ugkoFrRdi6wMmNgkkvXjB41mzs9TmoPKDAPjl9i+ERIXkRNhCCCH+IUmFyDeMDNR81coLgB9P3ePW45dQqDiqplNxrPYCgIht24g+m/kFwyraV6S6Y3USNYmsvrI6J8IWQgjxD0kqRL5Sv1QRmpR1IFGjMGXX1eTJmVV6Y161JoU8/lW7Ij4+020OKD8AgK03tvIk5kmOxC2EEEKSCpEPTWxZFmMDNSduPuVQ4GNQq+HjxdhXScTAJIn4O3cI/yHzcySqO1anYpGKxGvi+fHKjzkYuRBCvNskqRD5jqutBf3qJa8LMm33VWITkqCwGwYfTcahUiQAT7//nvh79zLVnkql0o5WbL6xmeexmZ/sKYQQIvMkqRD50pCGJXGwNuF+eAw/nPyn8FW1fli/XwkLh1iU+ARCp0zNdO2Kus51KWdbjleJr1h7dW0ORi6EEO8uSSpEvmRhYsi45mUB8Dtyi9CIWFCrUX28GMeacajUCtGnTxO5e3em2vv3aMWGaxuIiIvIsdiFEOJdle+SisTERObOnYu3tzcWFha4ubnRp0+fVMU2Xr58yZgxY/D09MTCwoIKFSqwbNmyLFVcFPnfxxWdqOJamJj4JL7dG5i80dYD4zYTsPNKrl0R9s03JL14kan2GhZrSMlCJYlOiGbDtQ05FLUQQry78l1SMW3aNEaNGkWTJk1Ys2YNI0eOZO/evTRt2pTY2FgAOnfuzLJly2jRogX+/v40aNCAwYMHM3PmzDyOXuiTSqVicqvkdUF2XHjE+XvhyTtqDMT2Ay+MrRNIev6Cx3PmZqo9tUrNwPIDAVh3dR3RCdE5FboQQryT8l2Z7sKFC9O6dWt+/PH/Z+nv2rWL1q1bc/jwYTw8PHB1deX7779n0KBB2mP+97//cebMGYKCgtJtV8p0F1xjt15i07kHeDtb88uQuhioVfD0FjFT6hN00BoA1w3rMa9c+Y1tJWmSaPNLG+5F3mNElRH08e6T0+ELIUSBVyDLdL98+ZKqVavSpk2bVNvd3NwAePXqlXa0ws7OLtUx9vb22n3i7fJF09JYmRoSEBzJlvMPkjfalcS8y1hs3P+pXTHxS5SEhDe2ZaA2oH/55BVMf7zyI68SX+VY3EII8a4xzOsA/s3KyoqDBw8CoCgKT58+JSgoiKlTp+Lk5ESDBg0wNzenUqVKTJw4EZVKReXKldm3bx/+/v7069fvjX0oikJkZKTOMZqYmGBiYqLz+SLr7CxNGN6kFNN2X+W7/ddp7lMUGzMjqPkp9i22EbUymLjb93i2ejV2Awa8sb3m7s1ZcmEJwVHBbL2xlW7luuXCuxBCiLwTFxdHXFyczudn9qZGvrv9keL27duULFkSAAsLC44fP07lf4a3Hz58SOXKlXny5P+rI9avX59Dhw5haJh+npQydJNdkyZNYvLkydluR2RNQpKG5gtOcOtxFH3quPNVq3LJO55c58XoxoSctkJlbEiJX/dgXOzNq5FuubGFqaenYm9mz572ezAxkERRCPH2mjx5MlOmTMl2O2+6/ZFvk4rY2FjOnTtHcHAwfn5+XLhwgcOHD1OsWDHef/99jI2N8fX1xdnZmYsXLzJz5kzq1avH1q1bUavT3tVJSSqcnJwIDAzUOS4Zqcg7J24+ofsPZzFQq9g3rB6eDlYAKCfmcv/LxcQ8NsGiVnWKrfJHpVK9tq34pHhabGtBWEwYE2tO5H+l/5cbb0EIIfJEdkcqypYty6NHjwpuUvFvMTExuLq68sEHH1CkSBF++OEH7t69S5EiRbTH7N+/n2bNmrFjxw4+/vjjNG3IRM23w4A15zlwNYy6Je1Y27d6cvKQlEjcrIbcXfMERaPCee4crFu0eGNb6wPX8+3Zb3GycGJ3u90YqY1y4R0IIUTBUyAnah46dAgfHx8CAgJSbTc3N6d48eK8ePFCe1vk3wkFQO3atQG4detWrsUrct+Ej8phbKjm5K2nHLgalrzRwBCT3suw9YoBIHTqJJIyMW+mvWd7bE1teRT9iN23M1dESwghRMbyVVLh4eFBQEAABw4cSLU9ODiYwMBAKlasSPny5blx40aa+RFHjhwBwMfHJ9fiFbmvuK05/f9ZF+TrX/9ZFwTAoRy2gz7F2CqRpBdRPPluxhvbMjU0pZdXLwBWXl5JkiYpp8IWQoh3Qr67/dGtWze2bduGr68vlStXJiQkhHnz5hEVFcWlS5dQFIWKFStibm7O8OHDcXZ25sKFC8yfP5/q1auzf//+186pkNsfBV90XCKN5xwjNDKWLz4sxWeNPJN3JCUQPake939OLsHttmkjZhUrvratmIQYmm5tyou4F3xb71s+KvFRDkcvhBAFT4G8/QGwfPlyvvjiCzZv3swnn3zC7NmzqVevHufOnaNIkSLY29tz9uxZ6tevz9y5c+nWrRtbt27liy++4Jdffkk3oRBvFwsTQ8a1KAOA35HbhET8U2vCwAiLz1Zi455cryRkzPA31q4wNzKne7nuAKy4tAKNosm5wIUQ4i2X70YqcoqMVLxdFEWh49LTnA96TusKTizsUkm7L3HXZO58uZGkeDX2wwZjO3joa9t6Gf+Spj835WXCS+Y2mMsHrh/kdPhCCFGgFNiRCiEyQ6VSMbl18rogOy8+4lzKuiCAYfPx2L+f/LjpkyXLSHhDfRIrYyu6lu0KwPJLy2VhOiGE0JEkFaLA8na2oXO14gBM3nmFJM0/yYChMTbjV2JWJB4lQUPo6M/emCh0K9sNM0MzroVf40TwiZwOXQgh3kqSVIgC7YsPS2FlasiVR5H8dO6BdrvKqSJFB7UDtULUn9d4uXv7a9spZFqIzqU7A7Ds4jIZrRBCCB1IUiEKNFtLE0Z+UAqA2QeuExHz/xMzTTpNx7aKKQBh06aQFBX12rZ6ePXAxMCES08v8UfIHzkXtBBCvKUkqRAFXrearnjaWxIeHc+8Qzf+f4ehMXZTlmJkmUhiZDxPJg1/bTt2ZnZ0KNUBgGWXluVgxEII8XaSpEIUeEYGaia18gJg7R9B3Ah7qd2nLlETx55NAHi+5ySvzv/+2rZ6efXCSG3En2F/cj70fM4FLYQQbyFJKsRboa6nHU29HEjSKEzZdSXVnAjLQfOwLmUIiorQ0cNREhMzbMfRwpE2JdsAsOLyipwOWwgh3irvXFIRFhZGuXLl0n35+fnldXgiG1LWBfn91jP2Xwn7/x1GpjhMn4/aSEPsoyiez5/42nb6+vTFQGXAqUenuPzkcg5HLYQQ+YOfn1+G18ewsLA3N4AUvxJvmTkHrrPo8C1cCptxaGR9TI0MtPueT/qE0J/+Qm2kUGLXLxi5lc6wnQknJ/DL7V9o4NKARY0X5UboQgiRb0nxK/FOGtzAg6I2pjx8/ooVx++k2ldo/HLMHNVoElSE+fZ7bTv9fPqhVqk5+vAo18Kv5WTIQgjx1pCkQrxVzI0NGdeiLAB+R2/x6MUr7T6ViQWOU6aASuHllae8XDc3w3bcbNxo6tYUSK6yKYQQ4s0kqRBvnVbli1Ld7T1iEzTM2Jt6lMG0fgdsGyXXtQidtwJNeEiG7fT36Q/AoaBD3H5xO+cCFkKIt4QkFeKto1KpmNS6HGoV7Lr4iDN3nqXab/fNaoysVCRGw5MxvTJsx7OwJ02KN0FBkSdBhBAiEySpEG8lLycbOlf/Z12QXVf/f10QQG1ji+OYYQCEnwwidr9/hu30L588WrH37l7uR97PuYCFEOItIEmFeGt98WFprE0NCQyJZOPZ1AmBZYeBWFVwAkVFyNczUaKfp9tGOdty1HOuh0bRsPLyytwIWwghCixJKsRb6z0LY+26IHP+sy4IgMOcH1AbQ+wTeD6tb4btDCg/AIBdt3fxKOpRzgUshBAFnCQV4q3WraYrpRwseR6TkHpdEMDIxY0i/boA8OTXKySc25FuGxXtK1KjaA0SlURWBazK6ZCFEKLAkqRCvNUMDdRM/te6INdDX6baX3jIl5gWt0GToCZs0niIS38l04HlBwKw/eZ2Hsc8ztmghRCigJKkQrz1ape0o7m3Y7rrgqgMDCg6yw9U8PKOQtSiT9Nto6pDVSrbVyZeE4//Ff9cilwIIQoWSSrEO2F8i7KYGKo5dfsZ+wJCU+0zrVCF99omr2QauvE0mmu/pTlfpVJp51Zsub6FZ6+epTlGCCHedZJUiHdCsffMGVjfA4Cvfw0kNiEp1f4iX36LYSFTEqINeTplKMRHp2mjtlNtvG29iU2KZe3VtbkStxBCFCTvXFIhq5S+uwbX98DJxpTgF69Ydiz1uiBqCwscp3wNwLMLScSuHZXm/H+PVmy8tpGIuIicD1oIIXKJrFKaBbJKqQDYfekRn234G1MjNb/5NsC5kFmq/Q97d+Ll6UuY2cbjum4NKvc6qfYrikLHXR25/vw6gysM5tOK6c/BEEKIt4msUipEOj7yKUoN9+R1Qb7ZE5hmv8OMBaiNDXj1zJgX3w6G+JhU+1UqlbbK5rrAdUTFp/+0iBBCvIskqRDvFJVKxaRWXqhV8OulEP74z7ogRo6OFBk2FIDHp+JI/GVimjaaFG+Cu407L+Nfsun6plyJWwghCgJJKsQ7p5yTNV1r/LMuyM4rJCZpUu0v3Ksvph4uybUrVmyFB2dT7TdQG2hXMF1zZQ0xCalHM4QQ4l0lSYV4J/l+UBobMyOuhb5k47kHqfapDAxwnDkfVBB534yohQMg4VWqY5q7N6eYVTGexz3n5xs/52LkQgiRf0lSId5JhS2M8f3w/9cFeRETn2q/mbcXhTt3BCD0cDSaA1+n2m+oNqSfTz8A/K/4E5cUlwtRCyFE/iZJhXhnda1enDKOVryISWDuwRtp9hfxHY2hrU1y7YpVa+Dhn6n2tyrRCkcLR568esL2m9tzK2whhMi3JKkQ7yxDAzVftSoHwLo/gggMiUy138DSEodJUwF4FmhB3OqBkPj/IxJGBkb08e4DwA8BP5CQlHoVVCGEeNdIUiHeabU97Gjh44hGIc26IABWH3yA5ft1QKMi5EA4ypFvU+1v59kOOzM7QqND2XVnV26GLoQQ+Y4kFeKdl7IuyB93wtn7n3VBVCoVjpOmoDIx4tUTEyLWLoNHf2v3mxiY0MurFwArLq0gUZOYm6ELIUS+IkmFeOe5FDZn0D/rgkz/NZBX8anXBTFydqbIsBEAPL5gReKGwZD4/xM7O5bqSGGTwjyMesjeu3tzL3AhhMhnJKkQAhhU3wPnQmbJ64Icv51m/3s9umNSqiRJ8WoeHwqBE7O1+8yNzOnh1QOAFZdXoFE0ac4XQoh3gSQVQgBmxgaMb1EWgO+P3ubh8/+U5zY0pOi0r0GlIuKeOdFbFkLIJe3+zqU7Y2Vsxd2IuxwMOpirsQvxf+3dd3hUVf7H8fe0lEnvDUI6BEKVLkhAiljAsrsWsKxldQELll39qYiI61oApayCawFX7O5SbDSlSSd0pCSQQBKSkJ5M2syc3x9DBicJGmASEvJ9PU8e9c4t5x4vmQ/3nvs9QrQUEiqEOOParqH0j/GnymzllW9/qfe5e/fu+N1+GwCntnlh/eqvcOaND08XT8YnjgdgwZ4F9QZ8CiFEW9DmQoVMfS7OxWFekL3Z/Jx6ut46QZMnowvwp7pUT/6P6bBhlv2zcYnjMOqNHC48zE8nfmq+hgshhBPI1OfnQaY+F401Zck+Fm1Kp1OoF8sfHoRe55i9S777jszJj6PRKqKvLcT1qTUQ0gWAN3e8yXv73iMpIInF1y1Go9FcilMQQginkqnPhbhAj49IwNdomxdk8daMep97XXMNHoMHoawaTm31QP33IftjkDs734mbzo19+fvYlLWpuZsuhBCXlIQKIerwNbrwxIjaeUEOU1juOC+IrXbFC2hcXTHlulK86QhsfAuAAPcA/tjRNmfI/D3zZWyFEKJNkVAhRANuPzMvSHFFDTNWHqr3uUu7dgROnAhA7i5vzCteg9yDANzT5R4MWgM7c3eyPWd7s7ZbCCEuJQkVQjRAr9MydYxtnMTiLRkcyCqpt07An+/BNT4eS5WO3B1usGQiWMwEG4O5Of5mwHa3Qggh2goJFUKcQ/+YAK7rFoZVwdQG5gXRGAyEvvgiAMXHPDCl7IVNcwG4N+le9Bo9W7K3sCt3V3M3XQghLgkJFUL8hv+7NhE3g5atxwr4Zm92vc+NvXri+6c/AZC93Qe16h+Qd5hwz3BuiL0BsFXZFEKItkBChRC/IcLXnb8OiQPgHw3MCwIQ/MTj6AICqC4xkL/fAEsmgNXC/V3vR6vRsu7kOg7kH2jupgshRLNrcaHCbDYzc+ZMkpKS8PDwICoqinvvvbfee7E//fQT1113HQEBAbRv355HHnmEkpL6z72FuFgPDokhwtedrOJK3l5bf14QnY8PIU8/DcDp/V5UH9wJm98m0juS0dGjAdsMpkIIcblrcaHipZde4qmnnmL48OEsWrSIxx9/nO+++45Ro0ZRWVkJwPLly7nmmmsIDQ1l3rx53Hnnnbz//vuMGzfuErdeXI7cDDqeu842L8j8tamcKDDVW8f7+uvwGDjAVrtiuw9q9UuQn8oDXR9Ag4ZVGas4UnikuZsuhBDNqsWFitmzZzN+/HjefPNNbrnlFh555BEWLFjAgQMH2LTJVkzoqaeeYsKECbz33nvcdttt/OMf/2DWrFmcOnWK3NzcS3wG4nJ0TVIoA2ICqDJb+ce3B+t9bq9d4eJCeY4bJakaWDKRWO9ohncYDsjYCiHE5a9FhYrS0lJ69+7NjTfe6LA8KioKgIqKCtauXcsvv/zCI488AoDVaptm+oEHHmDbtm0EBwc3Z5NFG6HRaHhhTGd0Wg3f7TvFz0frzwvi0qEDgX99CICcXT5Yjm6GrQv4S7e/APDD8R84Xny8OZsthBDNqkWFCi8vL1auXMlNN92EUoq8vDy2b9/Os88+S3h4OMnJyezZswc3NzfS0tLo06cP7u7uRERE8PDDD1NWVva7x1BKUVJScsE/VVVVzdAToiXqFOrN+H6RALy47ABmi7XeOv733YdLbCyWSi25u71h1VQ64UJyu2Ssysq/9/67uZsthBBUVVVd1HdfY6sDt6hQ8WtpaWkEBwfTp08f1qxZw7JlyzAajWRmZmKxWLj55psZM2YMS5YsYfLkySxatIibbrrpd/eblZWFj4/PBf+88sorzXD2oqWaPCIBP6OBQzmlfLyl/rwgWhcXwqa+AEBRqgemU2ZY8jAPJN0HwPK05WSWZTZrm4UQ4pVXXrmo776srKxGHafFzlJaWVnJtm3byMzMZN68eezatYs1a9bw73//mwULFvDxxx9zxx132Nf/+OOPGT9+PGvXruWqq66qt7/aGdbCw8M5eLD+M/HGcnV1xdXV9YK3F63ffzan89z/9uHtpuenp4bi7+FSb52s/3uW4q+/xtXXQvTIHDTXv8FfiraxKXsT/UL7MX3QdEI9Qi9B64UQbVFVVdVF3WlPTEwkKyvrd2cpbbGh4tdMJhMdOnRgxIgRxMbG8vLLL1NWVobRaLSvU1BQQEBAAG+99ZZ9vMWvydTnwlksVsX1czZwMLuEcf0iefmmrvXWMRcWknbtdVgKCwnqXkJgN8We2z/g7o1PY7aaMeqNPNzzYW7rdBt6rf4SnIUQQjReq5z6fNWqVXTt2pV9+/Y5LDcajURGRlJUVERERARKKfvrpbVqamxTT3t5eTVbe0XbpNNqeLF2XpCtGezPKq63jt7Pj+C//Q2A0/t9qC6spNv6uXx63ad0D+qOyWzi1W2vcsc3d7A3b2+ztl8IIZpKiwoVsbGx7Nu3jxUrVjgsz8zM5ODBg/To0YMbbrgBvV7PwoULHdZZvHgxGo2G/v37N2eTRRvVN9qf67uFoRS8uPRAg4OYfG4ci7FvX5RZcWqnPyptHR3TNrJo9CKmDJiCl4sXBwsOMu7bcby8+WVKq0svwZkIIYTztLjHH+PHj+frr7/miSeeoFevXmRnZzNr1izKysrYs2cPQUFBTJw4kfnz5/Poo4/Sv39/tm7dyptvvslDDz3EnDlzGtyvPP4QzpZVVMGwGT9RWWNl9u09GdM9vN46VWnHODZ2LKqmhoiBBXjH6WHCJvCNJL8inxnbZ7AsbRkAge6B/L3P3xkVNQqNRtPcpyOEEOfU2O/QFhcqTCYT//znP/nss884ceIEoaGhJCcnM23aNNq1awfYXgt99dVX+fzzzzly5AhxcXHce++9TJo06Zy/jCVUiKYwe/URZq48TJiPG6ufGILRpf74iLw5czk9bx46Dy2xozLRBUbA0P+D7reBVseW7C1M3zyd4yXHARgYPpBn+z1LpHdkM5+NEEI0rNWGiqYioUI0hcoaC8NnruVkYQUPD4vjiZEd661jrari2JixVKen49dFQ2jXM6+UBiXC1VOg42iqrTW8t+89/r3n31Rbq3HRuvCXbn/hz0l/xkVX/+0SIYRoTq1yoKYQrY3DvCDr0hqcF0Tr6kroi1MBKDwApugJ4OYLeQfh09vh/VG4nNzOX7v/la/Hfk3/sP5UW6uZu2sutyy9ha3ZW5vxjIQQ4sJJqBDiIo3qEsqVcQFUm61M/6bhKc49+vfHZ+wYUIqMGd+SY74Pc4+JoHeHE1vgg9Hw8Z/oYCplwYgFvDr4VQLcAjhecpz7VtzHsxueJb8iv5nPTAghzo+ECiEukkaj4YUbuqDTavhhfw4bG5gXBCD46acx9uuHqq6m4D+fkPrSCvKMk7F0uRM0OjjyA7wzCM1/H+Rav84svWkpt3a8FQ0alqYuZcz/xvDl4S+xqvrlwYUQoiWQUCGEEySEeHFn/w4AvLhsPzUNzAui9/Mj8sMPaP/uAlw7J2ItL+f0gg9JnZVCQfBzWDuOBRTs+Qzm9MZ79cs8l/Qg/7n2P3Ty70RJdQkvbnqRu7+7m8OFh5v5DIUQ4vdJqBDCSSYPt80LcjinjP9sTm9wHY1Gg+fgwUR/+SURM2fg0qEDloICct56l9R3T1LUfioqKhmsNbDlHZjdg277vuGT4Qv4W5+/YdQb2ZW3iz8t+xMzt8/EVFN/DIcQQlwqEiqEcBIfo4GnRnUCYNbKw+SXnbvOvkarxfvaa4lZvozQaS+iDw7GnJVN9usLSPvCQknsVFRYD6gug7X/RD/nCu4sKWPJDV8wPHI4FmXhg/0fcOOSG/npxE/Ncn5CCPF7JFQI4US39mlPl3BvSirNvLHi9x9RaAwG/P70J2JX/EDwU0+h8/GhOjWVzJcXcHx1COUdnwP/WDDlw/dPE/r+dczy78fcobMJ9wgnuzybh9c8zGM/Psap8lPNcIZCCHFuba5OhV6vJz4+vsF1Jk6cyMSJE5u5ZeJys+14AX98ZxMaDSybNIikCJ9Gb2spLSX//fcpWLgIZbI92jD270fw6ATcTyyEsjPBIbgLpuSnmW9KZdGBRZiVGXe9OxN7TGRc4jiZpEwIcd7mzZvHvHnzGvzsyJEjmM1mKX5VS4pfieb0yCcpLN2dRe8Ofnzx0IDzLrttPn2a0+/Mp/Czz6B2sryrhxE0JADXtA+h8swkZpEDONz/fqanLyUlNwWAjn4dmTJgCt2CujnzlIQQbZgUvxLiEnrm2k64G3RsTy9k6e6s895eHxhI6HPPEvvdd/iMHQsaDaWr15A29SuyCv9ETeIDoHeDjE0kfH4fHxZU8WLSg/i4+nCo8BDjvx3PS5teoriq/gyqQgjRVCRUCNEEwnzcmTg0FoBXvv0FU7X5gvbj0i6C8Ff/SczSJXgOvxqsVoqXfEPq9BXkmO/HnHA7aHRoj3zPzcueY6mhE2PaX41C8fnhzxnzvzF8k/ZNg7OoCiGEs0moEKKJ3D84hvb+7pwqqeRfP6Ze1L5c4+NpP3cuUZ9+YptOvaaGgk+/JvWNbeS5PYol+jpA4b/3C17e+DHv+/Un2iuSgsoCnl7/NA+sfIDjxcedcl5CCHEuEiqEaCK2eUE6A7BgfRoZ+RdfU8K9Rw8iF35I+3//G7cuXbCaTJz+4FNS3z5Gvt9TWNsPAks1fXZ+zle/7OZh3x646lzYkr2Fm5fezNu73qbKcu5XXYUQ4mJIqBCiCY3sHMKguMDfnBfkfGk0GjwHXUnUl18Q8eabuERFYSkqIvftj0n9j4mi4CdRwV0xVJfyl5Sl/De3hCs9Iqmx1vCv3f/ilqW3sClrk1PaIoQQvyahQogmZJsXpDM6rYYVB3JYfyTPqfv2vmYUMcuXETb9JfShoZizT5E9ezFpy7wpiXgc5RdN+5Jc3t63gdfLIEjvSXpJOn9Z+Rf+vu7vnK5oeJ4SIYS4EBIqhGhi8SFe3DWgdl6QAw3OC3IxNHo9vn/4A7E/fE/w3/+OzteX6mPHyJzxKcfXxVEW+TB4hHBNXgZLjh7kjhoXNGj49ti3jPnvGD4/9LlMUiaEcAoJFUI0g8eGJ+Dv4cLR3DL++d0vVNZYnH4MrasrAX++h9hVKwmcMAGt0Ujl/v2ceO0rMvb0oyLqQbxcvHjm5FE+ycwmURkorSnlpc0vced3d3Ko4JDT2ySEaFuk+JUQzeSzbRn8/au9AAR5uTIxOZbb+kbiZtA1yfHM+fmcnj+fok8+RZ0poOU59CqC+7vimvEpFksVn3p7MicgkHKs6DQ6xieOZ0KPCRgNxiZpkxCidWrsd6iECiGaiVKKr3ZmMmvlYTKLKgAI83Fj4tA4/tS7PS76prlxWJOZSd7ceRQvWQJWK2i1+Iy+msCkMlwy/kuOVsNrAX6s8LAFiRBjCM/0e4arI69ukvYIIVofCRV1SKgQLUW12coXO04wd81RsosrAYjwdeeRq+O4uVc7DLqmCRdVR4+S99ZblK5cZVtgMOA3ZiSB0RnoT/7AOnc3/hHoT6beNm9Icvtknun7DOGe4U3SHiFE6yGhog4JFaKlqTJb+HTrCeb9eJTcUlvtiEh/I49cHc+NPcLRN1G4qNi9m9xZb2LavBkAjdFIwE0j8A/aTXXOJt719eYDH2/MGg3uOjf+2mMC4zuPx6A1NEl7hBAtn4SKOmSWUtFSVdZY+HhLBm//dJTTZdUAxAR68OjweK7vFo5Oe36TkTVW+c8/kztzFpX79gGg8/Eh4Oah+BnXcazkF6YF+rPTzQ2AeN84pgx4gR7BPZqkLUKIS09mKT0PcqdCtHSmajMfbUrnnbWpFJpsAyvjgz15bHgCo5NC0TZBuFBKUbpiJXlvvUV1WhoA+pAQAsf2w0fzLUst+czw96VIZxtMekvcLUzuPRkf18ZP5y6EaP3kTkUdEipEa1FWZWbhz8dZsC6N4gpbuOgU6sXkEQmM7Bxy3tOoN4YymylesoS8ufMwZ2cD4BLVgaDrkrBU/o9Z7hb+6+UJgL/Bkyf7PsP1sTc0SVuEEC2PhIo6JFSI1qaksob3NxzjvfXHKK2yzXKaFOHN4yMSGNoxuEm+0K1VVRR9+imn35mPpbAQALfETgSNiORQ+RJe8nUl1cUFgL5+iTw35FWifaKd3g4hRMsioaIOCRWitSo21fDu+jQ+2HiM8mpb0azu7X15fEQCV8UHNkm4sJSVUfDhQgrefx+ryTYRmvGKnvgP8uSz6hXM9/agUqvFgIZ7427h/n5/x03v5vR2CCFaBgkVdUioEK1dQXk189elsujndCrOVOTs3cGPx0ckMDAusEmOaS4oIH/+AgoXLz5bQOuqAVh7mPinZjsbjO4AtNe68Vz/5xkYP6ZJ2iGEuLQkVNQhoUJcLvJKq5i/NpWPNqdTZbbN2dE/xp/HR3Skb7R/kxyzJiuLvHnzKP7v/2wFtDQavEdcxaGEVF52P0numdoWo90ieGr4HIICGn7DSgjROkmoqENChbjc5JRU8vZPqSzekkH1mUnKBsUFMnlEAld08GuSY1alppL31mxKV6ywLTAY8LxmIF912MkHniasGg2eVsWjQQP44/CZ6Ny8mqQdQojmJaGiDgkV4nKVVVTBvB+P8vn2E9RYbH+ckzsGMXl4At3b+zbJMSv27iVv1izKf94EgMbojnVkd17tsIOdRlsbkmqsPN9xPJ0HPgk6KZwlRGsmoaIOCRXicneiwMTcNUf5cudJLFbbH+vhiSFMHhFPl/CmqStRvnmzrYDWnj0AaL29OTEsgmmxhyl00aBVijuqdUzq9zQeXW8FrUyMLERrJKGiDgkVoq1Izy9n9uqj/DflJGeyBaOTQnlseAIdQ53/OEIpRemqVeS9+RbVqakAaIMCWH+lgbkJeVh0GoLNZp62+jJ86Mto4oY5vQ1CiKYloaIOCRWirUnNK+OtVUdYticLpUCjgeu6hvHY8ATigj2dfjxlsVC8ZCl5c+dgzrIV0LKEB7G4XznLO1ahNBoGmyr4P2MC7YZPh4heTm+DEKJpSKioQ0KFaKsO55Ty1qojfLPX9kWv1cCNPSJ45Op4ogI9nH48a3X12QJaBQUAlEb686/+xeyIATeleLCohLvDkzFc/QIExjm9DUII55JQUYeECtHWHcwuYdbKw6w4kAOATqvh5p62cNHe3+j041nKyilY+CEF73+AtbwcgBMxnsy/soLD7TTEVVfzfH4xvbrcCkOeBu8wp7dBCOEcEirqkFAhhM3ek8XMWnWYNb/kAqDXavhj7/ZMGhZHhK+7049nLiwkf8G7FH78MaraNgvrnngDi66ykhGs4ebSMiaXVOLb90G48lFwb5rXYYUQF05CRR0y9bkQjlIyCpm16gjrDucB4KLTclvf9kxIjiPUx/klt2uyszn9r39R9NXXYLWiNLChs4bPBmup9rbyREERY80GNIMmQ78HweD8gCOEODeZ+vw8yJ0KIRq27XgBs1Ye5ufUfABc9FrG9Yvkr8mxBHs5P1xUpR0jb/ZsSr//HgCLFlb10PDVlVpidVVMyS8gxi0Ykp+GHuNAp3d6G4QQ50fuVNQhoUKI37YpNZ+ZKw+x7fiZ2UkNWu4aEMWDV8UQ4Onq9ONV7NtvK6C1cSMAVQb4treGb/ppuLWqlAeKSnD3j4Orn4fEMbbXV4QQl4SEijokVAjx+5RSbDh6mhkrDrPrRBEARhcd9wyM4oHBMfh5uDj9mOWbt5A7ayaVu20FtMrcYEl/Lbt7KP5enM+gikoI7wXDp0LMEKcfXwjx+yRU1CGhQojGU0rx0+E8Zq08zJ6TxQB4uuq5d1A09w2KxsfduWW3lVKUrVlD7sxZ9gJaBZ7w1ZVatPE1/K3wNMEWC8QOg6tfgPAeTj2+EOK3SaioQ0KFEOdPKcWqg7nMXHmYg9klAHi76XlgcAz3XBmFl5uTw4XFQvGyZeTOmYMlMwuAU76wZIiePiHF3FZSjA6gy80w7DkIiHXq8YUQDZNQUYeECiEunNWq+GH/KWatOszhnDIAfI0G/nJVDHcPiMLD1bmDKa3V1RR99jk5/5oLhbY7JceDYWOykdtdM+hSUw1aPfS6G4b8DbxCnXp8IYQjCRV1SKgQ4uJZrYrle7N5c9Vh0vJsBa0CPFx4aEgs4/t3wN1F59zjlZeTv3AhOf9egM5UBcDBdhryhnpzh/kXvJQCgxH6/9VW48KtaSZOE6Ktk1BRh4QKIZzHYlUs2ZXJW6uPkJ5vAiDIy5UJybHc3jcSN4Nzw4W5sJCT78yhdPFn6GusAOyLNxAw0MjQqoNowFY0a/AT0OcBMDj/VVgh2jIJFXVIqBDC+cwWK1+nZDJ79RFOFlYAEOrtxsRhcfypdztc9c4NFzU5Oex//QX0365FZ8sWHOruTc9uNXSosQ3wxDsCkp+B7rdLjQshnKSx36HaZmxTo5jNZmbOnElSUhIeHh5ERUVx7733nvMklFKMHj2awYMHN3NLhRB6nZY/9W7PmieS+cdNXQn3ceNUSSXP/28fw95Yy6dbM6ixWJ12PENICD3eeIcOy5aQM8BWGbfj7hJKPq5gTUZvKnThUJIJSyfB2wPh4DJoG39vEqJFaHGh4qWXXuKpp55i+PDhLFq0iMcff5zvvvuOUaNGUVlZWW/9WbNm8f2ZynxCiEvDRa/ljn6R/PhUMtPGdiHYy5XMogqe/novw2b8xBfbT2B2Yrjwik0g+YOluC6aw7FEX/RWCPs5i8Ofa9idPwSL1g9OH4LPxsN7I+D4BqcdWwhxbi3u8Yefnx9jxoxh4cKF9mXLli1jzJgxrFmzhqFDh9qXp6SkMGDAAFxdXenWrRvr168/537l8YcQzaeyxsLHWzJ4+6ejnC6zTSIWHejBo1fHc0P3cHRa51XHVEqxeulsKuf+m9gTZgCqjAYChiUQ4bkRLbYxH8QNt9W4COvmtGML0Va0yscfpaWl9O7dmxtvvNFheVRUFAAVFRX2ZeXl5dx+++3cc8899OrVqxlbKYT4PW4GHfcNimbd34byzOhO+BkNHDtdzmOf7WLUm+tYvicLq9U5f5/RaDQMH/sog5atZ+MjV5ERBK6mGsqW72f/9xHkVw1HKT0cXQXzB8NX90PBMaccWwjhqMXdqaillOL06dOkp6czbdo0duzYwZEjRzAajQDcd999/Pzzz+zYsYPrrrsOs9ncqDsV4eHhHDx48ILb5erqiqur8+dBEOJyVlZlZuHPx1mwLo3iihoAOoV68djwBEZ1CUHjxHk9dp9KYek7T3HVd5kEF59ZGBpI+CBfvHXrbFOIaA3Q+89w1VPgGey0YwvRUlVVVVFVVXXB2ycmJpKVldV63/5ITU0lLi4OAA8PD9atW2e/I/H5559z5513snnzZnr27MnQoUMbHSou1gsvvMDUqVMvej9CtEUllTV8sOE4/16fRmmV7VFFl3BvHh+RwLBOwU4LF2armcV7FnHww9mMWV+Fr62kBobodoT0AU/NVlu4MHjAgIkw8GFw83bKsYVoiaZOncqLL7540ftptaGisrKSbdu2kZmZybx589i1axdr1qwhODiYHj16MGXKFCZPngxwXqFC7lQIcekVm2r494Y03t9wjPJqCwDd2/kweUQCQxKCnBYussuyeWP9dDz+9xNjNlvxOPMXNffEGIK7FWHU7DuzwB+uehJ63yc1LsRlqc3fqfg1k8lEhw4dGDFiBFlZWSilWL58OVqtbUjI6NGjMZvNrFy5EoPBgItL/ZkUZaCmEC1PQXk1C9alsfDn41TU2MLFFR38eHxEAgNjA5wWLn7M+JE3f5rOgDXZjN6ucLHdJMGjV0eC49Jx06bZFvi0P1Pj4jbQOrfGhhCtWassfrVq1SomT57MJ598QlJSksNnV1xxBSEhIWzatImioqJz7mPSpEnMmTOn3nIJFUK0XKfLqnjnp1Q+2pxOldn26mnfaH+eGJFAv5gApxzDVGPind3vsGzLQm7aUMOwXQrdmd9+3gMSCWp/EBetbRIzghLh6inQcTQ4cbyHEK1VqwwVx44dIyYmhhkzZvD444/bl2dmZhIfH89jjz3GmDFjsFgsDts9/PDDmM1m3n77bcLCwoiJiam3bwkVQrR8uSWV/OunVBZvyaD6TF2LQXGBTB6RwBUd/JxyjEMFh3hp80ucOrSLW9dbGXTgzK9AnQ7fKxMIDNmBQVdkW9a+PwyfCh0GOOXYQrRWrTJUAIwfP56vv/6aJ554gl69epGdnc2sWbMoKytjz549BAUF1dvmfMZUSKgQouXLLq5g3o9H+WzbCWostl9RQxKCeHxEAt3b+170/q3KytdHvmbWjln4nSjm9rVWeqXajqNxdcFvcAyBfpvR6c7UuIgfBcNfgJAuF31sIVqjVhsqTCYT//znP/nss884ceIEoaGhJCcnM23aNNq1a9fgNhIqhLg8nSgwMe/Ho3yx4ySWM3UthicG89jwBJIiLn5G0vyKfGZsn8GytGV0OqG4a52WuAzbK69aTw8CBoXh7/kzWr0Z0EC3W2HoM+AXddHHFqI1abWhoqlIqBCi9UrPL2f26qP8N+UktTWzrukSymMj4ukUevGvgm7N3spLm1/iePExeqYq7t/oTlCW7T1UnZ8vgQN98DNuQqPDVuOiz30w+EnwrH/nVIjLkYSKOiRUCNH6peWV8dbqIyzdnWWfJ+y6bmFMHh5PXLDXRe272lLN+/ve590971JjqeKqgzru3eyGe04JAIbQIIJ6a/E2pqDRAi6eMGASDJwErhd3bCFaOgkVdUioEOLycSSnlDdXHeGbvdmA7QWNsd3DeXR4AtGBHhe174ySDKZvns6m7E3oLIo/HvLnxvXVaAts5TldO4QR1N2Ep/tB24shxkBbZc7efwa91LARlycJFXVIqBDi8nMwu4Q3Vx3mh/05AOi0Gm7qGcEjw+KJDDBe8H6VUnx//Hte3foq+ZX5uFYrJh/ryBUrM1ClZQC4J7QnKDEHD/fjto18I2Hos9D1j1LjQlx2JFTUIaFCiMvXvsxiZq08zOpfcgHQazX8sXc7Jg6No53fhYeLkuoSZu+czeeHPkehCLF4MCW1G8HfbENVVgLg0TWKoNg03N1O2TYK7mJ7UyR+pNS4EJcNCRV1SKgQ4vKXklHIrFVHWHc4DwCDTsNtfSKZODSOUJ8LL7+9N28v0zZP45eCXwC40rUzj+4Oh2WrwGwrz+l1RTRB7ffj6lZk2yhyAAx/ESL7XdQ5CdESSKioQ0KFEG3H9uMFzFp1mI1H8wFw0Wu5o28kE4bGEux1YeHCbDXzyS+fMDdlLiazCZ1Gx4MBY7l2dQmm734ApWwFtPpGEhi6E4NrhW3DjtfaqnMGJzrr9IRodhIq6qjtEL1eT3x8fIPrTJw4kYkTJzZzy4QQTWVzWj4zVxxm6/ECANwMWu7s34GHhsQS4HlhgypPlZ/itW2vsTJ9JQBhHmE8H3AnUZ9upGztWgA0Lgb8+ocRELgNvYsF0ED32201LnwjnXJuQjjbvHnzmDdvXoOfHTlyBLPZLKGiltypEKJtUkqx8Wg+M1YeIiWjCACji467B0bxl8Ex+HnUn4CwMdadXMc/tvyDzLJMAIa2H8pTLtdjeXsRFTt2AKD1MOLf15cA/x1oDQp0LtDnfluNCw/nzGkiRHOQOxV1SKgQom1TSvHT4TxmrTzMnpO210M9XfXce2UU9w2OwcfdcN77rDBXMH/3fBbuX4hZmXHXuzOx+wTG5kVS8NYcqn6xjcHQ+XoT2NuAr99e24shLl5w5SPQfwK4ejrzNIVoEhIq6pBQIYQAW7hYdTCXmSsPczDbVtjKy03PA4Nj+POVUXi5nX+4OFp4lJc2v8TO3J0AJPglMKXfc0RtyyJv9mxqMjIAMAT7E9ijGh/fw7YCWh5BcNXf4Ip7QH9hd0yEaA4SKuqQUCGE+DWrVbHiwClmrTzCoZxSAHyNBh4YHMM9A6PwcNWf3/6UlSVHlzBjxwyKq4rRoOEPCX/gka4TUctXcXrePMx5trdSXNoFEdSlEC/fDNtbp35RMPQ5SLoFtFonn6kQF09CRR0SKoQQDbFaFd/szebNVYdJzbPN9+Hv4cJDQ2K4s38U7i7nV8iqsLKQGdtnsCR1iW1fbv482ftJrg27mqLFizn97r+xFtsev7jFhBLcMRMPH1vxLkK62mpcxA2XGheiRZFQUYeECiHEb7FYFUt3Z/LWqiMcz7dNeR7o6cqE5Fju6BeJm+H8wsW2U9uYvnk6acVpAPQL7cdz/Z+jvcaf/Pfep2DRIlSF7bVTj8RwgmKO4u5VZNu4wyAYPhXa93HW6QlxUSRU1CGhQgjRGGaLla9TMpm9+ggnC21f+iHerkwaGsef+rTHVd/4cFFjqeHD/R8yf898qixVGLQG7u96P/d1vQ9dQQmn336Hwi++gBrbdOtePSIIarcPV88zNS46XW+rcRHU0ennKcT5kFBRh4QKIcT5qDZb+WrnSeasPkJWsa0kd4SvO5OGxfGHK9ph0DV+7MOJ0hO8vOVlNmZuBKCDdwee7fcsA8IHUH3iBHlz5lCybLmtgJZWi0+vEILCd2MwmkGjhQ5XQuxQiBkKYT1k3IVodhIq6pBQIYS4EFVmC59vO8HcH4+SU1IFQHt/dx4ZFs9NPSPQNzJcKKVYkb6CV7e+Sl6FbcDmtdHX8lSfpwh0D6Ty0GHy3nyTsh9/BM4U0LrCj4DQPehdrWd35O4PMUMgdpgtZPi2d+4JC9EACRV1SKgQQlyMyhoLi7dk8K+fUjldZgsXUQFGHh0ez5juEei0jRtYWVZdxpyUOXx66FOsyoqXwYtHez3KHzv+Ea1Gi2lnCnkzZ2Lavh0ArdEdr55RGAPKMeoP4OJS4rjDgHjbXYzYYRA1CFy9nHreQoCEinokVAghnKGi2sJHm4/zzto0CsqrAYgN8uCx4Qlc1zUMbSPDxf7T+5m2eRoH8g8A0C2wG88PeJ5O/p1QSlG+YQO5s2ZRdeCgw3aGkECMMT4YfQvwMByyPSKppdVDu75nQ0Z4T5mGXTiFhIo6JFQIIZypvMrMhz8fZ8G6NIorbAMtO4Z4MXlEPCM7hzYqXFisFj479BmzU2ZTXlOOVqNlXOI4JvaYiIfBA2W1Ytq6lfJNmzFt2ULFvn32WVFrGUID8OjgjtHzFEbPkxjcf/WoxM0HooecDRl+Uc7sAtGGSKioQ0KFEKIplFbW8MHG47y7Po3SStsXfucwbx4fkcDVicFoGlFvIteUy2vbXuOH4z8AEGIM4Zm+zzAscpjD9tbyckw7d2LasoXyLVup3L8frFaHfbmE+WOM0OLhcRKjXxF6t1997hdtCxexQyFqMLj7XnwHiDZBQkUdEiqEEE2p2FTDexvSeH/jccqqbOGiezsfJo9IYEhCUKPCxYbMDUzfPN0+SdmQdkP4v37/R7hneIPrW0pLMW3fjmnLVkxbt1J58KDtDZJfcQ33xRhqwehxEmOgCb3rmc81Ooi44mzIiLgCdOdfoly0DRIq6pCpz4UQzaGwvJoF69P4cONxKmosAPSK9OXxER25Mi7gd8NFhbmCd/e8ywf7P8BstU1SNrT9UHoG96RncE/ifOPQnWOchKW4GNP27ZRv2YJpy1aqDh1yXEGjwTXMC48gE0bvHIxB1ehcznwFuHrb7l7UPirxj5Gqnm2MTH1+HuROhRCiOZ0uq2L+2lQWbUqnymx7BNE32p/HRyTQP+b3pz1PLUrlpc0vsSNnh8NyT4Mn3YO70zOoJ71CepEUmIS73r3BfZgLCzFt3WZ7XLJ1C9VHUx1X0GhwCzNi9C/Cw78E96BqdIYzXwk+kWcCxlDbuAyj//l3grhsyJ2KOiRUCCEuhdySSv71UyqLt2ZQfSZcXBkXwOMjEriiw29/USul2J6zne0520nJSWF33m5MZpPDOnqNnsSARPudjB7BPQh0D2xwf+bTp20DP7dsxbRlC9XHjzuuoNXgFuqCh28hxqAKjEHVaPUK0NjeJKl9VNKur8yq2sZIqKhDQoUQ4lLKLq5g3o9H+WzbCWostl+7VyUE8fiIBHq0923UPsxWM0cKj5CSm0JKbgo7c3eSa8qtt16kV6Q9ZPQM6Um0d3SDj11qcnLOhAzb45KaEyccV9BqcA/RYvQrwiO4CvfAarR6wOBhq4lRGzICE+RRyWVOQkUdEiqEEC3ByUIT8348yhfbT2K22n79Xt0pmMkjEkiK8DmvfSmlyC7PdggZRwuPonD8te7r6kuP4B70DO5Jr+BedA7ojIuu/p2Gmqws+12M8q1bMGdlO3yu0WlwD7LYCnGFVOEeUG0rg+EdYavuGTsUYpLBo+E7JaL1klBRh4QKIURLkpFvYvaaI3y98yRnsgWjuoTw2PAEEsO8L3i/JdUl7M7dbQ8a+07vo9JS6bCOi9aFpMAkh0cmPq6OgUYpRc3Jk/bXV01btmDOdbwrotFrcA+oxiO4AmNwNe7+1Wh0QFj3MyFjGET2B73rBZ+PaBkkVNQhoUII0RKl5ZUxe/URluzOsr8Nel23MB67Op74kIsvuV1jqeFgwUF7yEjJTaGgsqDeerE+sfQM6WkPGu082zk8MlFKUX38+K8Gfm7Fcvq0wz40ejAGVmIMrsYjpAo3vxo0Lu4QdeXZkBGcKI9KWiEJFXVIqBBCtGRHckp5c/URvtlje+Sg0cCY7uE8enU8MUGeTjuOUoqM0gx25uxkV94udubs5HjJ8XrrBboH2gNGr+BedPTviF6rd9hPdVqafTyGaetWLIWFDvvQGhTugVV4hFRhDK7GzbcGjXeo7RFJ7DDbP71CnHZuoulIqKhDQoUQojX45VQJs1Ye5of9OQBoNdC7gz/9Y/zpFxNAr0g/3F2cO59HQWUBu3J3sSt3Fztzd7I/fz9mq2M5cHe9O90Cu9nuZgT1pFtQNzxdzoYdZbVSdeSofTyGadt2rMXFDvvQGqwYg6vwCK7GGFyFq68ZTWjS2ZDRYSAYGn49VlxaEirqkFAhhGhN9mUW8+aqw6w66DiOwaDT0L2dL/1jAugfE0CvDr4YXfTn2MuFqTRXsj9/v8Mjk9LqUod1tBotCX4JZ98yCe5JqEeo/XNlsVB16JB9PIZp+3asZWUO+9C52EKGsTZk+OvQRA04+6gkJAm0jZtaXjQtCRV1SKgQQrRG6fnlbErNZ8uxAjan5ZNd7DjoUq/V0L29L/2i/ekfE8AVHfzwcHVuyLAqK2lFaezM3Wm/m1FbSvzXwjzCHELGr6t/KrOZyoMHzw783LEDZXKsuaFztdjGYwRXYQypxiXEF03c0LNvlng3XK5cND0JFXVIqBBCtHZKKU4UVLA5Ld/+k9VAyOjazof+MQH0i/and5Q/nk4OGWCbBC0lN8UeMg4VHMKiLA7r1Fb/7BXci57BPR2qf6qaGir27TszHmMLpp0pqMo65+Jmsd3JCLEFDUN0HJq4q20hI+pKcPFw+nmJhkmoqENChRDicqOU4mRhBZvS8tmSZruTkVlU4bCOTquha4QP/WJsdzJ6d/DDy835E4eZakzsOb2HlBzb45Lzrf5pra6mcs8e+8DPil27UNXVjtu7W84M+qzCGGrFpXPfs+MxwrrDOeZEERdPQkUdEiqEEG3BiQKT/VHJlmP5nCioHzKSwr1tdzJibHcyvJsgZNRW/7Q/MsnZSW5F46t/WquqqNi12z7ws2LXbjA7Dh41eJjPPi7p4Iaha/LZ8Ri+7Z1+Tm2ZhIo6ZJZSIURblFlUwRb745ICMgoc7x5oNZAU4WMfk9E7yh8fd+eHDKUUWeVZtoGfOSmk5KX8ZvXP2kcmtdU/rRUVVKSk2Ad+VuzdCxbHxy0GT7MtYARXY+wUjqFb7aOSQeB24QXF2gqZpfQ8yJ0KIYSArKIKthzLZ3NqAVuO5XM83zFkaDTQJdyb/tEB9IsJoG+UPz5G54cMqF/9c+/pvVRZqhzWOVf1T2t5OaadO213MjZvofLAfuylSWu39aqxjccIMWPs0QV9txG2kBHeE3TOH2dyOZM7FXVIqBBCiPpOFVfaQsaZOxnHTpc7fK7RQOcwb/pFB9A/xp++0f74GptmhtKLqf5pLSvDtH07pi1bKd/8M1WHjkCdrzdXnxrbeIx2eox9+6HvOtIWMvyjm+R8LicSKuqQUCGEEL8vp6TyzHgM27iMtLz6IaNTqLetGFe07Q0TP4+mCRlKKdJL0h1CRkPVP4PcgxwemXT074imxBYyyrdsxfTzeqpS626ncPU987gkxhfjlUPQJY2CqMHg7tsk59OaSaioQ0KFEEKcv9ySyl8N/CzgaG5ZvXU6hXqdKcblT9/oAPybKGTA2eqftSGjsdU/3cprzsxbspnyjeuoTq9TZ0OjcPOtwRhSg0fnSNwHj0DXeSS06w26pnn805pIqKhDQoUQQly8vNIqthw7+wrrkQZCRscQL/srrH2j/Qn0bLpZSivNlew7vc8+j8muvF2Nqv4ZWKHHtHUr5T9vwPTzBqqz8hx3rFG4+dfgEaYw9kjEOOQ6tIkjISC2TU6IJqGiDgkVQgjhfKfLqthaeycjrYBDOaX11okP9rS/wtovOoAgr6YLGVZlJbUo1eGRSUPVP8M9wu2PTHoE96BDlRdV23dQvm4Npi2bqcktctxAq3D3r8YY6YZH7564J49F22k4GP2b7FxaEgkVdUioEEKIppd/JmTUPjL55VT9kBEX7Gl/hbVfjD/BXm5N2qba6p8puSnszNnJocJDWJXVYR0vgxfdgrvZx2V0qgnAsm0XprU/UL5tJ+YCxzsyGq3CPaAaY6w/xv79cR92C9qYK0HfdI9+LiUJFXVIqBBCiOZXUF599k7GsQIOZpfUWycmyMNeVrx/TAAh3k0bMsprytmTt8deYnxP3p7frv4Z1IOuNSG47thL+U/fY0rZh7lOeXSNTuEeZMGjUwTGKwfjfvWtaMK6XDaPSiRU1CGhQgghLr0iU23IsAWNg6dK6r75SUygh31MRr/oAEJ9mjZkmK1mDhcePvvIJCflN6t/9gruSbeqYPy3H6Bi3QrK9x7BUlbjsK5GZ8UYqsXYNQaPq4bjdvXtaHxC6+2ztWi1ocJsNjN79mzef/99jh07RlBQEMOGDWPatGm0a9cOgKKiIqZMmcJ3331HVlYWsbGx3HXXXTz66KMYDA2P0pVQIYQQLU+xqYatx8+WFd+fVT9kRAUYbXUyYm1jMsJ93Zu0TbXVP3fmnJ2VNbUotV71Tz9XP9uEaUE96VUeSPiOA1T9vB7TgXQsFY7VPrV6K+7tXPHokYhx6LW4DfkDGrfWMyFaqw0VL7zwAtOnT+fhhx9m8ODBZGZm8sorr+Dv78+OHTtwc3MjOTmZnTt38swzz5CQkMDGjRuZO3cut956Kx999FGD+5VQIYQQLV9xRQ3bz4SMzWkF7M8qrlsok0h/I/1r72TEBBDRxCEDoLiqmN15u+0hY9/pfeeu/hnYg95lfkRvP4h123ZMh7KxVjmehNbFirGDNx5X9MA44kZc+1+DRtdyJ0RrtaHCz8+PMWPGsHDhQvuyZcuWMWbMGNasWYNer+eqq65i4cKF3HXXXfZ1ZsyYwZNPPsn+/fvp3Llzvf1KqBBCiNanpLI2ZBSwJS2fvZn1Q0Z7f/czFT9ttTLa+RmbvF01lhoOFBywz8qakptCYVVhvfVifWLpFdSdfvmexKUcwZCyn4rUfKw1jmMtdK4KY1wQxr598Bj1J1y690PTgsZjNPY7tEUVPy8tLaV3797ceOONDsujoqIAqKiosJ/MyJEjHdYZNmwYAHv37m0wVAghhGh9vN0MDOsUwrBOIQCUVtawPb3QfidjX2YxJwoqOFFwki932L4fInzd7W+WDIgJoJ2fu9O/oA06A92DutM9qDv3cM85q3+mFqeSWpzKFwBREJQYRM+Aa7gy15WOe47juTuViowyLFUaSvefpnT/d/DBd+jcNRg7heMxYBDGUX/EJaFziwoZ59Li7lTUUkpx+vRp0tPTmTZtGjt27ODIkSMUFhZy8uRJ+vbt69DBM2fO5IknnmDjxo0MHDiw3v5qU1Z4eDgHDx684Ha5urri6tp071gLIYRovLIqM9uPn32Fdc/JYix1bmVE+Lrb3yzpHxNAe3/nh4yG5Ffksytvl/2RyYH8Aw1W/+zhm8jgUwa67MvCd/9JqjOrUBatw3p6Tx3GztEYBw/FY/hNGKKizuscqqqqqKqq+v0VzyExMZGsrKzW9/ijVmpqKnFxcQB4eHiwbt06evXq1eC6n3zyCffeey+9evVi48aNDa5TGyou1gsvvMDUqVMvej9CCCGcr7zKzA77nQxbyDDXCRlhPm4Or7B2CDA2S8iorf5ZeydjV+4uSmvqV/9M9IhiaLaBbgfyCPwlF8sphbI6tk/v7YJH944Yk6/BOGQULu0ifvPYU6dO5cUXX7zoc2i1oaKyspJt27aRmZnJvHnz2LVrF2vWrKFPnz72dX755Reeeuopli9fTv/+/Vm6dClBQUEN7k/uVAghRNtjqraFjNqy4rtPFlFjcfzaC/V2+9UrrP5EB3o0S8hobPXPSH0gw7Nc6HmokJAjRZCnhTohw+BvxNgzCY+h12EcdBWGUMfXV9v8nYpfM5lMdOjQgREjRrB48WLMZjP/+Mc/ePnll/H29mbKlClMmDAB3W+MnJWBmkIIISqqLezMOHsnY9eJ+iEj2MvVPiajf0wAMc0UMgByynNIyUuxDwBtqPpngNWNEVlu9D5SQkRqObrTelCO7fO5qivhCz53Wrta5dsfq1atYvLkyXzyySckJSU5fHbFFVcQEhLCN998w913381HH33EhAkTeOWVV/D29v7dfUuoEEIIUVdFtYWUjEI2nxmTsSujiGqL45d4kJfrr8Zk+BMb5NlsIaO2+mftnYzdebupMFc4rONRo2FEpit9j5QTebwGl3wdQdd2JnDG105rR6t8+yM2NpZ9+/axYsUKh1CRmZnJwYMHGTVqFCtWrOCjjz5i2rRpPP/885ewtUIIIVo7dxcdA+MCGRgXCEBljYWUjCJ7Ma6dGUXklVaxfE82y/dkAxDo6XLmFVZb0IgLbrqQ4WHwYED4AAaEDwDOUf2TXP4XVcn/onSADvdKxQ2hAVyKb8gWFSqio6MZN24czz33HIWFhfTq1Yvs7GxmzZqFj48PkydP5tlnn0Wv19O5c2d++OGHevvo2rUr4eHhl6D1QgghWjs3g44BsQEMiA0AbCFj14ki+5iMnRmFnC6r5pu92Xyz1xYyAjxc7DOw9o8JID7YE622aUKGXqunc0BnOgd0ZlziOJRSZJZlOozLOFp0lJDoPr+/sybQoh5/gG38xD//+U8+++wzTpw4QWhoKMnJyfYy3ddffz3ffPPNObf/8MMPufvuu+stl8cfQgghLlaV2cLuE8X2Oxk70guprHF8XOLv4ULfKH/bnYzYABKCvZosZDSkuKoYpRS+br5O22erHFPRlCRUCCGEcLYqs4U9J4vZcqYY1470QipqHOf98DUa6Bd99k5Gp9DmDRnOIKGiDgkVQgghmlq12crezCL7LKzbj9cPGT7uBvpGn32FNTHMG10LDxkSKuqQUCGEEKK51Vis7M0stpcV3368AFO1Y8jwdtPT91cDP1tiyGiVb38IIYQQlxODTkuvSD96RfoxIdkWMvZlFtvLim87VkBJpZlVB3NYdTAHAC83/ZkxGbZaGZ3DvNHrtL99oBZC7lQIIYQQl4jZYmV/Vom9GNe244WUVTnOD+LlqqdPtL+9VkaX8OYPGXKnQgghhGjh9Dot3dv70r29Lw8OicVssXIgu8T+CuvWYwWUVplZ80sua37JBcDTVU/vKD/7mIykCB8MLeROhoQKIYQQooXQ67R0a+dLt3a+PHBVDBar4mB2iX1MxtZj+ZRUmvnpUB4/HcoDwMNFxxW1r7DGBND1EoYMCRVCCCFEC6XTakiK8CEpwof7B58NGbVjMrYeK6C4ooZ1h/NYd9gWMowuOsb378D/XZvY7O1tc6EiJyeHzp07N/jZxIkTmThxYjO3SAghhGicX4eM+wZFY7UqfjlVai/GteVYAUWmGtwM555g81zmzZvHvHnzGvwsJyenUfuQgZpCCCHEZcJqVRzKKcXb3UCEr7vT9isDNYUQQog2RqvVkBj2+zN3N9nxL9mRhRBCCHFZkVBxEaqqqpg6dSpVVVWXuiktivTLuUnfNEz65dykbxom/XJul7JvZEzFRSgpKcHHx4fi4mK8vS/d7aaWRvrl3KRvGib9cm7SNw2Tfjm3puibxn6Hyp0KIYQQQjiFhAohhBBCOIWECiGEEEI4hYQKIYQQQjiFhAohhBBCOIWECiGEEEI4hYQKIYQQQjiFhIozzjWJSks7XmvZ7kJdinZK37SM7S5Uazo/6RvnbnehWsv5NXe/OOWYqo2IiIhQgNLr9SoxMbHej4uLi5o7d+557bO4uFgBqri4+Lzbk5iYeN7btJbtWlO/NPcxW1PfSL84d7sL3bYt9I30i3O3u9C+mTt3rnJxcWnwO1Kv1ytARURE/OY+2tyEYiEhIRw4cKDe8s6dO8u050IIIdqsiRMnMm/evAa/I2srav4eefwhhBBCCKeQUCGEEEIIp5BQIYQQQginkFAhhBBCCKdoM1Ofu7i4UFNTg1arJSwsrN7nOTk5hISEnNc+lVJkZWURHh6ORqM5r20v5HitZbvW1C/NfczW1DfSL87d7kK3bQt9I/3i3O2aom+ys7OxWq0YDAaqq6vPuX2bCRU6nQ6r1XqpmyGEEEK0WlqtFovFcs7P28wrpW5ublRWVqLT6QgODr7UzRFCCCFajdzcXCwWC25ubr+5Xpu5UyGEEEKIpiUDNYUQQgjhFBIqhBBCCOEUEiqEEEII4RQSKoQQQgjhFBIqhBBCCOEUbeaVUnFpVVZWNvhus16vx9XV9RK0SLR0cs2I8yXXzKUndyp+w44dO7jmmmvw9/enS5cuPP30079Z9AOgoqKCCRMmEB8fT0hICGPHjiU1NbWZWtw8LqRfrrnmGjw9Pev93H///c3U6uZz4MABNBrN7/YJtI3r5dfOp2/awjWzePFievfujbe3N5GRkYwbN4709PTf3KatXDMX0jeX+zVjNpuZOXMmSUlJeHh4EBUVxb333svJkyd/c7tmvWaUaFBKSory9PRUQ4YMUYsWLVLTpk1Trq6u6vbbbz/nNlarVQ0ePFj5+fmpGTNmqPfee09169ZNhYSEqIyMjGZsfdO5kH5RSqnw8HB1zz33qA0bNjj8HDp0qJla3jzKy8vVDTfcoABlNpt/c922cL382vn0jVKX/zXz/vvvK0Ddfvvt6rPPPlNz585V0dHRKigoSGVnZze4TVu5Zi6kb5S6/K+ZKVOmKK1Wqx599FH15ZdfqrfeekuFhoaqzp07q4qKiga3ae5rRkLFOYwfP15FRUWp8vJy+7J//etfSqPRqMOHDze4zapVqxSgvv32W/uynJwc5enpqZ577rkmb3NzuJB+KSsrU4D68MMPm6uZze7o0aNq5MiRytfXVwGN+uJsC9eLUhfWN23hmomJiVFDhw51WJaRkaHc3d3VU0891eA2beWauZC+aQvXjK+vr7rrrrscli1dulQBas2aNQ1u09zXjDz+aIDZbObLL7/kD3/4A0aj0b78jjvuwGAw8Omnnza43SeffEJwcDCjRo2yLwsODua6665j8eLFTd7upnah/XL06FEA4uPjARp167u1MRqNjBw5kueee46RI0c2apvL/XqpdSF9c7lfM5WVlRw7dqxef7Rv3574+Hj27t3b4HZt4Zq50L653K+Z0tJSevfuzY033uiwPCoqCrA94mhIc18zEioakJOTQ2VlJUlJSQ7LfXx8aN++/Tmf66Wnp9O5c2e0WsduTUpKIiMjA9XKK6JfaL8cOXIEgPnz5xMYGIirqyuJiYnMnz+/1fdJrbCwMJ544gmeeOIJBg4c2KhtLvfrpdaF9M3lfs1otVo2bdrEvffe67A8Ly+P/fv30759+wa3awvXzIX2zeV+zXh5ebFy5UpuuukmlFLk5eWxfft2nn32WcLDw0lOTm5wu+a+ZuTtjwacOnUKgICAgHqfBQYG2j9vaLuOHTs2uI3ZbCY/P5/AwEDnNrYZXWi/1P5hP378OHPmzMFoNPLVV1/x0EMPkZuby/PPP990jW7BLvfr5WJc7teMi4sL/fr1c1iWnp7ODTfcgF6v5+GHH25wu7ZwzVxo31zu18yvpaWlERcXB4CHhwfr1q1zuHv8a819zUioaEBtcmsowVmtVsxm8zm3O9c2wDm3ay0utF9GjRpFfHw8Y8eOxWAwADB27FhqamqYPn06Tz75JO7u7k3X8Bbqcr9eLkZbumYqKip4/fXXee211zAYDHzxxRd07dq1wXXb2jVzPn3Tlq6ZiIgI1q1bR2ZmJvPmzWPIkCGsWbOGPn361Fu3ua8ZefzRgLCwMAAKCgrqfZafn09ERMQ5tzvXNnq9vtVPuX6h/dKrVy/+8Ic/2P+g17r55puprq7mwIEDzm9sK3C5Xy8Xo61cMz/99BNdu3blxRdf5Oabb2bfvn3ccMMN51y/LV0z59s3beWaAXBzc2Pw4MHcdttt/PDDD7i5uTFr1qwG123ua0ZCRQNCQkJwc3Njz549DsuLi4s5ceIEHTp0aHC7Dh06sH//fnsCrLV3717at29f75lWa3Oh/bJy5cp62wD2/vD19XV6W1uDy/16uRht4Zr5/vvvGTlyJJ6enmzbto1FixadM5jXaivXzIX0zeV+zaxatYquXbuyb98+h+VGo5HIyEiKiooa3K7Zrxmnv09ymbjzzjtVhw4dHF6dfPvtt5VGoznnO8+rV69WgFq+fLl9WW5urvLy8lLPPvtsk7e5OVxIv4wdO1bFxMQok8nksPyOO+5QYWFhymq1Nmmbm9vUqVMb9dpkW7he6mps31zu14zZbFbt2rVTXbt2dfiz9HvawjVzoX1zuV8zaWlpClAzZsxwWH7y5Enl7u6unnnmmQa3a+5rRkLFOdQWeUpOTlYfffSRvcjTuHHj7OusXbtWrV271v7ftUVG/P391cyZM9V7772nunfvrkJCQtSJEycuxWk43YX0y+bNm5Wrq6vq2bOneuONN9TixYvVrbfeqjQajfrvf/97Cc6iaZ3ri7MtXi91NbZvLvdrZuPGjQpQEydOVN9//329n61btyql2uY1c6F9c7lfM0opNW7cOOXu7q6ee+459fXXX6t58+apuLg4FRoaqnJzc5VSl/6akVDxG7Zt26ZGjBih/Pz8VGJionrmmWccfhlGRUWpqKgoh23Ky8vVgw8+qGJiYlRQUJAaM2aMSktLa+6mN6kL6Ze1a9eqoUOHKj8/P+Xv76+uvvpqtX79+uZuerM41xdnW71efu18+uZyvma++OILeyGwhn6Sk5OVUm3zmrmYvrmcrxmlbP/vn3/+eZWQkKDc3d1VdHS0+vOf/+wQDi71NaNR6jJ4gVcIIYQQl9zlMapHCCGEEJechAohhBBCOIWECiGEEEI4hYQKIYQQQjiFhAohhBBCOIWECiGEEEI4hYQKIYQQQjiFhAohhBBCOIWECiGEEEI4hYQKIYQQogHp6eloNJpG/SxcuPBSN9eBRqNh6NChzX5cfbMfUQghhGhFvLy8uPvuu39znU6dOjVTa1o2CRVCCCHEbwgICGDOnDmXuhmtgjz+EEIIIYRTSKgQQgghnESj0fDAAw+QnZ3NvffeS3x8PMHBwYwePZqVK1c2uM2mTZsYM2YMUVFR+Pn5MXjwYN544w0sFku9dc1mM9OnT2fAgAF4eXkRExPDPffcw/Hjxxvcd05ODg8++CCdO3fGy8uLvn37smTJknrrrV+/nhtuuIF27dphNBrp1KkTzz77LCUlJed3/jL1uRBCCFFfeno6UVFRREVFcezYsUZto9FoGDlyJKmpqZhMJoYMGcLp06dZt24dZrOZOXPmMGHCBPv6CxYsYMKECbi4uDBkyBD8/PzYuHEjGRkZXHXVVaxevRq93jZSoaKigmHDhrF582a6dOlC7969SUtLY/369QQHB7Nr1y7CwsLs7ejatSsVFRUopRg4cCDp6emsW7cOrVbL+vXrGThwIADfffcdN9xwA1qtlj59+tCxY0e2bt3K/v37GT16NN9++23jO00JIYQQop7jx48rQHl5ealJkyb95o/JZFJKKQUoQA0ePFgVFRXZ97V582bl4+OjvLy8VF5enlJKqVOnTikvLy8VGBiodu/ebV/XZDKpG2+8UQHq7bffti9/+eWXFaAmT56srFarffncuXMVoCZMmGBfVtuOW2+9VVVVVdmXT5kyRQHqySeftC8bMWKEAlRKSop9mcViUf3791eAOnnyZKP7TEKFEEII0YDaUNGYn9oAASiNRuMQEmq9+OKLClAzZsxQSin12muvKUC9/vrr9dY9efKkcnFxUUlJSfZl/v7+KigoSFVUVDisa7FY1KBBg9Qf//hH+zJAubi4qFOnTjmsu2/fPgWoe+65x76se/fuSqfTqdzcXId1jx49qjZs2KBKSkoa22VKxlQIIYQQvyEqKgpl+0v4OX98fHzs60dERNCtW7d6+xk9ejQAhw8fdvjn8OHD660bERFBx44dOXr0KEopcnNzKSgoYODAgbi5uTmsW/s44/PPP3dYHhsbS0hIiMMyT0/Pese65ZZbsFgs9OrVi+eff57Vq1dTWlpKbGwsV155JV5eXo3pJltbGr2mEEIIIX5XREREg8vbtWsHQEZGBgCZmZkA9nEQdYWHh1NZWUleXp59IOa51m1IcHBwo9Z79tlneffdd/H392f69OkMHz4cf39/RowYwYoVKxp9PJBQIYQQQjhVbm5ug8uzsrIAW1iAs+EjOzu7wfVPnTqFi4sLAQEB9jCRl5fX6HZoNJpGrafVarn//vvZvXs3GRkZ/Oc//+Gee+5hy5YtjBo1iuXLlzf6mBIqhBBCCCdKT08nLS2t3vLvv/8egI4dOwIQHx8PwOrVq+utm5mZycGDB4mLi0On09lf9dy8eTPV1dX11k9OTqZbt26o83yh02Qy8eKLL/LBBx8A0L59e8aNG8e7777Lxx9/DMCXX37Z6P1JqBBCCCGcyGq1MmnSJEwmk33Z1q1bef311/Hw8ODOO+8E4K677sLT05NXX32Vffv22detqKhg4sSJVFdX218/1Wg0/PWvfyUzM5MpU6Y4hIelS5eydu1aEhMTG313opa7uztvvPEGkyZNIj093eGz2jsutY9tGkPKdAshhBC/IT8/n4cffvg314mPj+eRRx4BIDIykh07dtCpUycGDx5MXl4ea9euxWw2M3v2bEJDQwEIDQ3ltddeY9KkSfTt25ehQ4fi6+vLhg0byMjIYMiQITz00EP2Yzz//PN89913vPrqq3zzzTf07t2bnJwcfvjhB/z9/XnjjTfO+9xqw8rrr79OUlISvXv3JjY2ltTUVNatW0dwcDD33Xdf43fY6PdEhBBCiDbkfF4pTU5OVkop+79nZGSo2267TUVGRqrAwEA1cuRItXLlygaPs2HDBnX99deryMhI5ePjowYOHKjeeOMNZbFY6q1rMpnU008/rXr16qU8PDxUbGys+vOf/6xOnDjhsN6v29TQOf36ldKamho1Z84c1bNnT+Xv76+MRqPq2LGjmjRpkjp27Nh59ZlU1BRCCCGcRKPRkJyczI8//nipm3JJyJgKIYQQQjiFhAohhBBCOIWECiGEEEI4hbz9IYQQQjhJWx+mKHcqhBBCCOEUEiqEEEII4RQSKoQQQgjhFBIqhBBCCOEUEiqEEEII4RQSKoQQQgjhFBIqhBBCCOEUEiqEEEII4RT/D3HZplEyzqeEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + " \n", + "for loss in [\"Total\", \"Classification\", \"Regression\"]:\n", + " # make total loss plot\n", + " fig, ax = plt.subplots(figsize=(6,6))\n", + "\n", + " for vicreg_model in losses_ALL:\n", + " ax.plot(range(len(losses_ALL[vicreg_model][\"valid\"][loss])), losses_ALL[vicreg_model][\"valid\"][loss], label=f\"{vicreg_model} ({best_val_loss[vicreg_model][loss]:.2f})\")\n", + "\n", + " ax.set_xlabel(\"Epochs\")\n", + " ax.set_ylabel(f\"{loss} validation loss\")\n", + " ax.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f21ebf4", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24d378a3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "efdda742", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "549580b8", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "200bd674", + "metadata": {}, + "source": [ + "# OLD" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "01595a98", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.plot(range(len(losses_train_tot)), losses_train_tot, label=\"training ({:.2f})\".format(best_train_loss_tot))\n", + "ax.plot(range(len(losses_valid_tot)), losses_valid_tot, label=\"validation ({:.2f})\".format(best_val_loss_tot))\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_ylim(0.8 * losses_train_tot[-1], 1.2 * losses_train_tot[-1])\n", + "if mode == \"ssl\":\n", + " ax.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss id plot\n", + "fig, (ax1,ax2) = plt.subplots(1,2, figsize=(10,4))\n", + "ax1.plot(range(len(losses_train_id)), losses_train_id, label=\"training ({:.2f})\".format(best_train_loss_id))\n", + "ax1.plot(range(len(losses_valid_id)), losses_valid_id, label=\"validation ({:.2f})\".format(best_val_loss_id))\n", + "ax1.set_xlabel(\"Epochs\")\n", + "ax1.set_ylabel(\"Classification Loss\")\n", + "ax1.set_ylim(0.8 * losses_train_id[-1], 1.2 * losses_train_id[-1])\n", + "if mode == \"ssl\":\n", + " ax1.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax1.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss momentum plot\n", + "ax2.plot(\n", + " range(len(losses_train_momentum)),\n", + " losses_train_momentum,\n", + " label=\"training ({:.2f})\".format(best_train_loss_momentum),\n", + ")\n", + "ax2.plot(\n", + " range(len(losses_valid_momentum)),\n", + " losses_valid_momentum,\n", + " label=\"validation ({:.2f})\".format(best_val_loss_momentum),\n", + ")\n", + "ax2.set_xlabel(\"Epochs\")\n", + "ax2.set_ylabel(\"Regression Loss\")\n", + "ax2.set_ylim(0.8 * losses_train_momentum[-1], 1.2 * losses_train_momentum[-1])\n", + "if mode == \"ssl\":\n", + " ax2.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax2.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "losses_to_plot[\"ssl\"][\"tot\"] = losses_valid_tot\n", + "losses_to_plot[\"ssl\"][\"id\"] = losses_valid_id\n", + "losses_to_plot[\"ssl\"][\"p4\"] = losses_valid_momentum" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "11e468de", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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vXnzJps2bcrT5uZt2rTh888/NyzVK4qHtOxFFmZmZgwaNIiEhASj7ofbt2+zadMmWrRoYQje6enpfPnllyxcuNAQ6EHfCg0ICADg5s2beb62UopFixbh6urKF198YQj0AI888giPPvpolnOGDh3KsmXLsnRZNG7cON/Xz3T48GEOHDhA7969jQI9wBtvvEGDBg348ccfuXHjhtExFxcXPvnkE6NWeeYnpZiYmFyve/ToUUD/KaQwRo8ejZubG9OnT+err77ixo0bREVFMX/+fF599VWAbLvE7mVubm7o9jl27BhLly5l+/btgH6nL3t7e6P8K1eu5Mcff+T999/P8xt8/fr1gf9euyge0rIvSha2+lZ1abOwLXQRTz75JPPmzePnn3+mf//+APzyyy/cvXvX6MGhm5sbzz33HABpaWmEhoZy+fJljh07xpIlS/J93StXrpCUlESXLl1wdHTMcrxnz55ZupcGDRpk+D4yMpLLly9z/vx5vv7663xfP9P58+cBTG5NqNFoeOihhzh16hQXL17Ezc3NcKx58+bY2hrffzu7vH/Kymxt59RFkxdubm6sXr2ap59+mueee87wO9JqtUyfPp1PP/0Ud3f3XMt57rnnWLx4MU8++SSTJ0/Gz8+Pq1evMn/+fD777DPOnTvHX3/9hUaj4dq1a4wdO5agoCDDG0peVKpUCdD/7kTxqXDBPjo62tCSuF+htyXUaArVfVKWtGnThurVq7N27Vru3r2LpaUlK1euxNramsGDBxvlPXLkCK+++ip79+4lPT0djUZDrVq18PX1zfIgMzeZD3S9vEx3h5lKT0hI4PXXX2f16tWGVryLiwuBgYH5uva9rl27BoCnp2eO9QgPD6d169aGdA8PjwJfE/TPKwCTb3T51blzZ06dOsX69es5efIkVapUoUOHDtSvX5933nmHJk2a5Hj+6dOnWbx4Me3bt+f77783jMbx9/dn7ty5XL9+nZUrV/LXX3/Ro0cPnnvuOTIyMli+fHmOD3bv5+TkBJDlU5LQy2lbwrxObIMKGOw9PDw4ffp0aVejXBgyZAgzZsxgy5YtBAYGsn37dp544gmcnZ0NeXbu3Em3bt2oXr06CxcupE2bNtSqVQsrKyumT59OcHBwvq7p6+sLZN+ffP/oHp1OR8uWLbl06RITJ07k4Ycfpn79+ri6uhIWFkb16tXz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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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RqVSaRo0aKBp27atRq1Wa958802NRqPR7N27V9O+fXuNWq3WvPbaazo7pq5Vy+tSXVBYqNF84KFcf6MvlXv3Hw5d03jN2qoZ/d3Rcu0nn1fNIZ9VzVEZ1yatxiy99tprbN++ndatW2NgYEBBQQFz584FYOXKlbz44otkZmYyceLEcrc9f/58+vTpw9q1a4uXDR8+nCZNmrB48WKGDRvG/v37WbVqFePGjQPgsccew93dnZkzZzJ79uy7DpStdorGLBXkQHYymNUrdbOW7jb8evomF2/KI38hhAAYP348V65c4fPPPycsLIy+ffsye/ZsQOmSd+rUKbp27cqsWbOqOFJR7ahUSle8yACIDQTn8v3N0LOxMk4u4Hoiadl5WJmWf4JaIUTNoVU3vB49erB582b69euHn58f8+bNK06MwsPDUalUvPrqqzz//PPlajc7O5vr16+XGKAL4Onpia+vLxcuXCAoKAjgjm369u0LwIULF7R5S1XDyPR2gpR69654LTxsALggyZIQQhT74IMPSElJISkpiV27dmFhYQHA448/TkBAAPv378fOzq6KoxTVUlFXPC3GLTVytMTbwYK8Ag0HrsbrODAhRHWj1ZMlgAceeIAHHnjgjuWvvvoq77zzjlZtqtVqjh49ire3d4nlcXFxXLp0iU6dOjF06FCOHTuGs7NziW327t0LKInVvWg0GlJTy19ZrmifnJyccu97T9bukJUEqTfvenfrv0UenK21GwsmhBDayMnJKT4HanP+1Gg0ug6pmIGBATY2NiWWNWnSBLW6QnOui9quKFmKDdJq935Nnfj+0HV2B8UwtKWrDgMTQlQ3Or2aZGVlceLECa5dK//cBQDGxsZ06tQJJyen4mVhYWH069cPQ0NDXnzxRdzd3enUqRMqlap4m3Xr1vHmm2/StWtXunbtes9jREVFYWNjU+5XURK2ePFird7bXdnWV74mh911k38XeZDqO0KIyrZgwYLic6Cnp2e5z59RUVF6ievatWssWLCg+JqTk5PDE088gZmZGV5eXnzzzTd6Oa6oBRz+mSMp/qpWuw9ortyw3RkUQ05+ga6iEkJUQ1onSxs3bmTQoEGcOXMGgFu3buHn50efPn3w9fVl9OjR5Ofnax1YVlYW7777Ln5+fkRERPDLL7/QokWLEttcvnyZYcOGMXr0aFq3bs3vv/9+33bd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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.plot(range(len(losses_train_tot)), losses_train_tot, label=\"training ({:.2f})\".format(best_train_loss_tot))\n", + "ax.plot(range(len(losses_valid_tot)), losses_valid_tot, label=\"validation ({:.2f})\".format(best_val_loss_tot))\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_ylim(0.8 * losses_train_tot[-1], 1.2 * losses_train_tot[-1])\n", + "if mode == \"ssl\":\n", + " ax.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss id plot\n", + "fig, (ax1,ax2) = plt.subplots(1,2, figsize=(10,4))\n", + "ax1.plot(range(len(losses_train_id)), losses_train_id, label=\"training ({:.2f})\".format(best_train_loss_id))\n", + "ax1.plot(range(len(losses_valid_id)), losses_valid_id, label=\"validation ({:.2f})\".format(best_val_loss_id))\n", + "ax1.set_xlabel(\"Epochs\")\n", + "ax1.set_ylabel(\"Classification Loss\")\n", + "ax1.set_ylim(0.8 * losses_train_id[-1], 1.2 * losses_train_id[-1])\n", + "if mode == \"ssl\":\n", + " ax1.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax1.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss momentum plot\n", + "ax2.plot(\n", + " range(len(losses_train_momentum)),\n", + " losses_train_momentum,\n", + " label=\"training ({:.2f})\".format(best_train_loss_momentum),\n", + ")\n", + "ax2.plot(\n", + " range(len(losses_valid_momentum)),\n", + " losses_valid_momentum,\n", + " label=\"validation ({:.2f})\".format(best_val_loss_momentum),\n", + ")\n", + "ax2.set_xlabel(\"Epochs\")\n", + "ax2.set_ylabel(\"Regression Loss\")\n", + "ax2.set_ylim(0.8 * losses_train_momentum[-1], 1.2 * losses_train_momentum[-1])\n", + "if mode == \"ssl\":\n", + " ax2.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax2.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "losses_to_plot[\"ssl\"][\"tot\"] = losses_valid_tot\n", + "losses_to_plot[\"ssl\"][\"id\"] = losses_valid_id\n", + "losses_to_plot[\"ssl\"][\"p4\"] = losses_valid_momentum" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c07bade5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "a2fa34a8", + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"/pfclicvol/losses_to_plot.pkl\", \"wb\") as f: # dump model architecture\n", + " pkl.dump(losses_to_plot, f, protocol=pkl.HIGHEST_PROTOCOL)" + ] + }, + { + "cell_type": "markdown", + "id": "3bc51356", + "metadata": {}, + "source": [ + "# Native" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6464fc8b", + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"/pfclicvol/losses_to_plot.pkl\", \"rb\") as f:\n", + " losses_to_plot = pkl.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "b2bf23ea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MLPF(\n", + " (nn_id): Sequential(\n", + " (0): Linear(in_features=16, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=6, bias=True)\n", + " )\n", + " (nn_pt): Sequential(\n", + " (0): Linear(in_features=22, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_eta): Sequential(\n", + " (0): Linear(in_features=22, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_phi): Sequential(\n", + " (0): Linear(in_features=22, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_energy): Sequential(\n", + " (0): Linear(in_features=22, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_charge): Sequential(\n", + " (0): Linear(in_features=22, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Dropout(p=0.4, inplace=False)\n", + " (16): Linear(in_features=256, out_features=256, bias=True)\n", + " (17): ELU(alpha=1.0)\n", + " (18): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (19): Linear(in_features=256, out_features=3, bias=True)\n", + " )\n", + ")\n" + ] + } + ], + "source": [ + "ssl = 0\n", + "\n", + "mlpf_model_kwargs = {\n", + " \"input_dim\": input_,\n", + " \"width\": 256,\n", + " \"num_convs\": 0,\n", + " \"dropout\": 0.4,\n", + " \"ssl\": ssl,\n", + " \"VICReg_embedding_dim\": 0\n", + "}\n", + "\n", + "mlpf = MLPF(**mlpf_model_kwargs).to(device)\n", + "print(mlpf)\n", + "\n", + "if ssl:\n", + " mode = \"ssl\"\n", + "else:\n", + " mode = \"native\"" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "02ca4486", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Training native MLPF over 300 epochs\n", + "Will fix VICReg during mlpf training\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=73.70 loss_momentum=2.11 loss_charge=0.83\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.79it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=43.73 loss_momentum=1.70 loss_charge=0.64\n", + "epoch=1 / 300 train_loss=76.6419 valid_loss=46.0732 stale=0 time=0.06m eta=18.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=38.78 loss_momentum=1.85 loss_charge=0.65\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=33.41 loss_momentum=1.69 loss_charge=0.63\n", + "epoch=2 / 300 train_loss=41.2865 valid_loss=35.7371 stale=0 time=0.06m eta=18.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=33.30 loss_momentum=1.82 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.97 loss_momentum=1.69 loss_charge=0.63\n", + "epoch=3 / 300 train_loss=35.7551 valid_loss=32.3008 stale=0 time=0.06m eta=18.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=31.23 loss_momentum=1.81 loss_charge=0.64\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.59 loss_momentum=1.69 loss_charge=0.63\n", + "epoch=4 / 300 train_loss=33.6764 valid_loss=30.9067 stale=0 time=0.06m eta=18.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=30.14 loss_momentum=1.80 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.99 loss_momentum=1.68 loss_charge=0.63\n", + "epoch=5 / 300 train_loss=32.5734 valid_loss=30.3074 stale=0 time=0.06m eta=18.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.46 loss_momentum=1.80 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.66 loss_momentum=1.67 loss_charge=0.63\n", + "epoch=6 / 300 train_loss=31.891 valid_loss=29.9697 stale=0 time=0.06m eta=18.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=29.07 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.49 loss_momentum=1.67 loss_charge=0.63\n", + "epoch=7 / 300 train_loss=31.4914 valid_loss=29.7855 stale=0 time=0.06m eta=18.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.69 loss_momentum=1.79 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.37 loss_momentum=1.66 loss_charge=0.63\n", + "epoch=8 / 300 train_loss=31.1064 valid_loss=29.6559 stale=0 time=0.06m eta=18.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.48 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.23 loss_momentum=1.65 loss_charge=0.63\n", + "epoch=9 / 300 train_loss=30.8985 valid_loss=29.5162 stale=0 time=0.06m eta=18.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.28 loss_momentum=1.78 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.12 loss_momentum=1.64 loss_charge=0.63\n", + "epoch=10 / 300 train_loss=30.6928 valid_loss=29.393 stale=0 time=0.06m eta=18.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=28.12 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.99 loss_momentum=1.63 loss_charge=0.63\n", + "epoch=11 / 300 train_loss=30.5221 valid_loss=29.2552 stale=0 time=0.06m eta=18.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.96 loss_momentum=1.77 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.88 loss_momentum=1.63 loss_charge=0.63\n", + "epoch=12 / 300 train_loss=30.3592 valid_loss=29.14 stale=0 time=0.06m eta=18.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.85 loss_momentum=1.76 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.78 loss_momentum=1.62 loss_charge=0.63\n", + "epoch=13 / 300 train_loss=30.2427 valid_loss=29.027 stale=0 time=0.06m eta=17.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.67 loss_momentum=1.75 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.39it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.64 loss_momentum=1.61 loss_charge=0.63\n", + "epoch=14 / 300 train_loss=30.056 valid_loss=28.8807 stale=0 time=0.06m eta=17.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.60 loss_momentum=1.74 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.53 loss_momentum=1.60 loss_charge=0.63\n", + "epoch=15 / 300 train_loss=29.9712 valid_loss=28.7614 stale=0 time=0.06m eta=17.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.48 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.40 loss_momentum=1.59 loss_charge=0.63\n", + "epoch=16 / 300 train_loss=29.8485 valid_loss=28.6234 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.38 loss_momentum=1.73 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.28 loss_momentum=1.58 loss_charge=0.63\n", + "epoch=17 / 300 train_loss=29.736 valid_loss=28.4921 stale=0 time=0.06m eta=17.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.26 loss_momentum=1.72 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.12 loss_momentum=1.57 loss_charge=0.63\n", + "epoch=18 / 300 train_loss=29.6108 valid_loss=28.3245 stale=0 time=0.06m eta=17.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.18 loss_momentum=1.71 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.99 loss_momentum=1.56 loss_charge=0.63\n", + "epoch=19 / 300 train_loss=29.5144 valid_loss=28.1773 stale=0 time=0.06m eta=17.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.84it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=27.06 loss_momentum=1.70 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.79 loss_momentum=1.55 loss_charge=0.63\n", + "epoch=20 / 300 train_loss=29.3875 valid_loss=27.9758 stale=0 time=0.06m eta=17.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.94 loss_momentum=1.69 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.66 loss_momentum=1.54 loss_charge=0.63\n", + "epoch=21 / 300 train_loss=29.2597 valid_loss=27.8294 stale=0 time=0.06m eta=17.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.85 loss_momentum=1.68 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.48 loss_momentum=1.53 loss_charge=0.63\n", + "epoch=22 / 300 train_loss=29.1582 valid_loss=27.6394 stale=0 time=0.06m eta=17.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.73 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.29 loss_momentum=1.52 loss_charge=0.63\n", + "epoch=23 / 300 train_loss=29.0363 valid_loss=27.4438 stale=0 time=0.06m eta=17.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.60 loss_momentum=1.67 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.13 loss_momentum=1.52 loss_charge=0.63\n", + "epoch=24 / 300 train_loss=28.8979 valid_loss=27.2761 stale=0 time=0.06m eta=17.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.51 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.95 loss_momentum=1.51 loss_charge=0.63\n", + "epoch=25 / 300 train_loss=28.8019 valid_loss=27.0986 stale=0 time=0.06m eta=17.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.39 loss_momentum=1.66 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.76 loss_momentum=1.51 loss_charge=0.63\n", + "epoch=26 / 300 train_loss=28.6724 valid_loss=26.8965 stale=0 time=0.06m eta=17.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.27 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.60 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=27 / 300 train_loss=28.5519 valid_loss=26.7299 stale=0 time=0.06m eta=17.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.14 loss_momentum=1.65 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.40 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=28 / 300 train_loss=28.4184 valid_loss=26.5324 stale=0 time=0.06m eta=17.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=26.04 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.23 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=29 / 300 train_loss=28.3128 valid_loss=26.3599 stale=0 time=0.06m eta=17.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.90 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.06 loss_momentum=1.50 loss_charge=0.63\n", + "epoch=30 / 300 train_loss=28.1725 valid_loss=26.1857 stale=0 time=0.06m eta=16.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.15it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.79 loss_momentum=1.64 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.15it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.90 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=31 / 300 train_loss=28.0576 valid_loss=26.0257 stale=0 time=0.06m eta=16.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.64 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.73 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=32 / 300 train_loss=27.8996 valid_loss=25.8546 stale=0 time=0.06m eta=16.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.49 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.59 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=33 / 300 train_loss=27.7491 valid_loss=25.7092 stale=0 time=0.06m eta=16.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.40 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.46 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=34 / 300 train_loss=27.6533 valid_loss=25.5815 stale=0 time=0.06m eta=16.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.29 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.37 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=35 / 300 train_loss=27.5434 valid_loss=25.4953 stale=0 time=0.06m eta=16.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.18 loss_momentum=1.63 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.19 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=36 / 300 train_loss=27.4373 valid_loss=25.3055 stale=0 time=0.06m eta=16.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=25.07 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.08 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=37 / 300 train_loss=27.3204 valid_loss=25.2035 stale=0 time=0.06m eta=16.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.95 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.01 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=38 / 300 train_loss=27.2042 valid_loss=25.124 stale=0 time=0.06m eta=16.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.82 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.90 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=39 / 300 train_loss=27.0654 valid_loss=25.0178 stale=0 time=0.06m eta=16.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.68 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.74 loss_momentum=1.49 loss_charge=0.63\n", + "epoch=40 / 300 train_loss=26.9297 valid_loss=24.854 stale=0 time=0.06m eta=16.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.60 loss_momentum=1.62 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.61 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=41 / 300 train_loss=26.8463 valid_loss=24.7237 stale=0 time=0.06m eta=16.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.46 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.59 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=42 / 300 train_loss=26.7091 valid_loss=24.7049 stale=0 time=0.06m eta=16.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.36 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.45 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=43 / 300 train_loss=26.602 valid_loss=24.5679 stale=0 time=0.06m eta=16.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.25 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.35 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=44 / 300 train_loss=26.4878 valid_loss=24.459 stale=0 time=0.06m eta=16.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.12 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.50it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.23 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=45 / 300 train_loss=26.3564 valid_loss=24.3451 stale=0 time=0.06m eta=16.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=24.03 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.15 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=46 / 300 train_loss=26.2667 valid_loss=24.2579 stale=0 time=0.06m eta=15.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.92 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.07 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=47 / 300 train_loss=26.1562 valid_loss=24.1842 stale=0 time=0.06m eta=15.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.81 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.95 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=48 / 300 train_loss=26.0442 valid_loss=24.0656 stale=0 time=0.06m eta=15.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.72 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.90 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=49 / 300 train_loss=25.9543 valid_loss=24.01 stale=0 time=0.06m eta=15.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.58 loss_momentum=1.61 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.81 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=50 / 300 train_loss=25.8155 valid_loss=23.9245 stale=0 time=0.06m eta=15.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.50 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.75 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=51 / 300 train_loss=25.7306 valid_loss=23.8634 stale=0 time=0.06m eta=15.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.38 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.67 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=52 / 300 train_loss=25.6141 valid_loss=23.7762 stale=0 time=0.06m eta=15.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.32 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.63 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=53 / 300 train_loss=25.5508 valid_loss=23.7383 stale=0 time=0.06m eta=15.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.21 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.53 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=54 / 300 train_loss=25.4414 valid_loss=23.6381 stale=0 time=0.06m eta=15.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.14 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.51 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=55 / 300 train_loss=25.3671 valid_loss=23.6141 stale=0 time=0.06m eta=15.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=23.05 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.42 loss_momentum=1.48 loss_charge=0.63\n", + "epoch=56 / 300 train_loss=25.2794 valid_loss=23.5296 stale=0 time=0.06m eta=15.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.96 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.67it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.37 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=57 / 300 train_loss=25.1864 valid_loss=23.4782 stale=0 time=0.06m eta=15.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.88 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.36 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=58 / 300 train_loss=25.1081 valid_loss=23.4692 stale=0 time=0.06m eta=15.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.81 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.24 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=59 / 300 train_loss=25.0315 valid_loss=23.3433 stale=0 time=0.06m eta=15.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.72 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.22 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=60 / 300 train_loss=24.9403 valid_loss=23.3194 stale=0 time=0.06m eta=15.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.66 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.17 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=61 / 300 train_loss=24.8858 valid_loss=23.2741 stale=0 time=0.06m eta=14.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.57 loss_momentum=1.60 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.36it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.13 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=62 / 300 train_loss=24.7934 valid_loss=23.2262 stale=0 time=0.06m eta=14.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.53 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.54it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.08 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=63 / 300 train_loss=24.7466 valid_loss=23.1759 stale=0 time=0.06m eta=14.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.44 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.05 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=64 / 300 train_loss=24.6596 valid_loss=23.149 stale=0 time=0.06m eta=14.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.36 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.00 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=65 / 300 train_loss=24.5788 valid_loss=23.0985 stale=0 time=0.06m eta=14.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.27 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.95 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=66 / 300 train_loss=24.4921 valid_loss=23.0508 stale=0 time=0.06m eta=14.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.21 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.96 loss_momentum=1.47 loss_charge=0.63\n", + "epoch=67 / 300 train_loss=24.4262 valid_loss=23.0567 stale=1 time=0.06m eta=14.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.16 loss_momentum=1.59 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.90 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=68 / 300 train_loss=24.378 valid_loss=22.9968 stale=0 time=0.06m eta=14.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.11 loss_momentum=1.58 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.85 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=69 / 300 train_loss=24.3212 valid_loss=22.9485 stale=0 time=0.07m eta=14.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.03 loss_momentum=1.58 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 35.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.84 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=70 / 300 train_loss=24.2414 valid_loss=22.9316 stale=0 time=0.07m eta=14.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=22.00 loss_momentum=1.58 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.81 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=71 / 300 train_loss=24.2129 valid_loss=22.9017 stale=0 time=0.07m eta=14.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.92 loss_momentum=1.58 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.79 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=72 / 300 train_loss=24.1279 valid_loss=22.8752 stale=0 time=0.07m eta=14.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.86 loss_momentum=1.58 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.76 loss_momentum=1.46 loss_charge=0.63\n", + "epoch=73 / 300 train_loss=24.0633 valid_loss=22.8509 stale=0 time=0.07m eta=14.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.82 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=74 / 300 train_loss=24.026 valid_loss=22.8197 stale=0 time=0.06m eta=14.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.77 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.73 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=75 / 300 train_loss=23.9676 valid_loss=22.8127 stale=0 time=0.06m eta=14.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.71 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.68 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=76 / 300 train_loss=23.9079 valid_loss=22.7627 stale=0 time=0.06m eta=14.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.65 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.67 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=77 / 300 train_loss=23.8522 valid_loss=22.7488 stale=0 time=0.06m eta=14.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.60 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.64 loss_momentum=1.45 loss_charge=0.63\n", + "epoch=78 / 300 train_loss=23.794 valid_loss=22.7211 stale=0 time=0.06m eta=13.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.56 loss_momentum=1.57 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.62 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=79 / 300 train_loss=23.7592 valid_loss=22.6952 stale=0 time=0.06m eta=13.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.52 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.61 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=80 / 300 train_loss=23.7167 valid_loss=22.6879 stale=0 time=0.06m eta=13.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.47 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.59 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=81 / 300 train_loss=23.6642 valid_loss=22.6608 stale=0 time=0.06m eta=13.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.43 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.58 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=82 / 300 train_loss=23.6248 valid_loss=22.6551 stale=0 time=0.06m eta=13.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.38 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.56 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=83 / 300 train_loss=23.5741 valid_loss=22.6333 stale=0 time=0.06m eta=13.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.38 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.55 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=84 / 300 train_loss=23.568 valid_loss=22.6148 stale=0 time=0.06m eta=13.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.34 loss_momentum=1.56 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.53 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=85 / 300 train_loss=23.5222 valid_loss=22.5965 stale=0 time=0.06m eta=13.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.30 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.52 loss_momentum=1.44 loss_charge=0.63\n", + "epoch=86 / 300 train_loss=23.487 valid_loss=22.5859 stale=0 time=0.06m eta=13.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.27 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=87 / 300 train_loss=23.4529 valid_loss=22.5792 stale=0 time=0.06m eta=13.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.24 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=88 / 300 train_loss=23.4243 valid_loss=22.5773 stale=0 time=0.06m eta=13.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.22 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=89 / 300 train_loss=23.3963 valid_loss=22.5703 stale=0 time=0.06m eta=13.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.18 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.47 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=90 / 300 train_loss=23.3554 valid_loss=22.5341 stale=0 time=0.06m eta=13.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.17 loss_momentum=1.55 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.47 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=91 / 300 train_loss=23.3463 valid_loss=22.5311 stale=0 time=0.06m eta=13.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.13 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.46 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=92 / 300 train_loss=23.2996 valid_loss=22.5188 stale=0 time=0.06m eta=13.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.11 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=93 / 300 train_loss=23.2795 valid_loss=22.5005 stale=0 time=0.06m eta=13.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.10 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=94 / 300 train_loss=23.2732 valid_loss=22.496 stale=0 time=0.06m eta=12.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.07 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.43 loss_charge=0.63\n", + "epoch=95 / 300 train_loss=23.2376 valid_loss=22.4982 stale=1 time=0.06m eta=12.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.08 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=96 / 300 train_loss=23.2446 valid_loss=22.4778 stale=0 time=0.06m eta=12.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.03 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=97 / 300 train_loss=23.2006 valid_loss=22.4748 stale=0 time=0.06m eta=12.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.01 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=98 / 300 train_loss=23.176 valid_loss=22.4633 stale=0 time=0.06m eta=12.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=21.00 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.40 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=99 / 300 train_loss=23.1612 valid_loss=22.4487 stale=0 time=0.06m eta=12.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.98 loss_momentum=1.54 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.40 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=100 / 300 train_loss=23.147 valid_loss=22.4529 stale=1 time=0.06m eta=12.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.94 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.39 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=101 / 300 train_loss=23.1065 valid_loss=22.4461 stale=0 time=0.06m eta=12.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.94 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.36 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=102 / 300 train_loss=23.1019 valid_loss=22.4096 stale=0 time=0.06m eta=12.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.93 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.37 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=103 / 300 train_loss=23.0885 valid_loss=22.4185 stale=1 time=0.06m eta=12.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.91 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=104 / 300 train_loss=23.0752 valid_loss=22.3946 stale=0 time=0.06m eta=12.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.89 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.37 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=105 / 300 train_loss=23.0487 valid_loss=22.4175 stale=1 time=0.06m eta=12.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.88 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=106 / 300 train_loss=23.037 valid_loss=22.4013 stale=2 time=0.06m eta=12.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.89 loss_momentum=1.53 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=107 / 300 train_loss=23.04 valid_loss=22.3773 stale=0 time=0.06m eta=12.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.87 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=108 / 300 train_loss=23.0228 valid_loss=22.3841 stale=1 time=0.06m eta=12.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.83 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=109 / 300 train_loss=22.9826 valid_loss=22.3782 stale=2 time=0.06m eta=12.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.82 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=110 / 300 train_loss=22.9767 valid_loss=22.3803 stale=3 time=0.06m eta=11.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.82 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.42 loss_charge=0.63\n", + "epoch=111 / 300 train_loss=22.9748 valid_loss=22.3565 stale=0 time=0.06m eta=11.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.36it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.80 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=112 / 300 train_loss=22.9473 valid_loss=22.3527 stale=0 time=0.06m eta=11.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.80 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=113 / 300 train_loss=22.9487 valid_loss=22.3604 stale=1 time=0.06m eta=11.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.79 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=114 / 300 train_loss=22.9368 valid_loss=22.3429 stale=0 time=0.06m eta=11.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.67it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.77 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=115 / 300 train_loss=22.9158 valid_loss=22.3443 stale=1 time=0.06m eta=11.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.77 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=116 / 300 train_loss=22.9153 valid_loss=22.3402 stale=0 time=0.06m eta=11.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=117 / 300 train_loss=22.8887 valid_loss=22.3382 stale=0 time=0.06m eta=11.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.76 loss_momentum=1.52 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.29 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=118 / 300 train_loss=22.9086 valid_loss=22.3269 stale=0 time=0.06m eta=11.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=119 / 300 train_loss=22.8826 valid_loss=22.3086 stale=0 time=0.06m eta=11.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.74 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=120 / 300 train_loss=22.8822 valid_loss=22.2994 stale=0 time=0.06m eta=11.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.70 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=121 / 300 train_loss=22.8374 valid_loss=22.3005 stale=1 time=0.06m eta=11.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.70 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=122 / 300 train_loss=22.8443 valid_loss=22.2919 stale=0 time=0.06m eta=11.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.69 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.41 loss_charge=0.63\n", + "epoch=123 / 300 train_loss=22.8296 valid_loss=22.2927 stale=1 time=0.06m eta=11.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.68 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=124 / 300 train_loss=22.8203 valid_loss=22.2769 stale=0 time=0.06m eta=11.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.67 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=125 / 300 train_loss=22.8091 valid_loss=22.2714 stale=0 time=0.06m eta=11.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.67 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 36.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=126 / 300 train_loss=22.8062 valid_loss=22.2623 stale=0 time=0.06m eta=10.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.66 loss_momentum=1.51 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=127 / 300 train_loss=22.7967 valid_loss=22.2626 stale=1 time=0.06m eta=10.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.66 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=128 / 300 train_loss=22.7944 valid_loss=22.249 stale=0 time=0.07m eta=10.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.65 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=129 / 300 train_loss=22.783 valid_loss=22.2571 stale=1 time=0.06m eta=10.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.65 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.11it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=130 / 300 train_loss=22.7821 valid_loss=22.2482 stale=0 time=0.07m eta=10.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.63 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=131 / 300 train_loss=22.761 valid_loss=22.25 stale=1 time=0.07m eta=10.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.64 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=132 / 300 train_loss=22.7678 valid_loss=22.2333 stale=0 time=0.06m eta=10.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.62 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=133 / 300 train_loss=22.7486 valid_loss=22.2288 stale=0 time=0.06m eta=10.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.61 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=134 / 300 train_loss=22.74 valid_loss=22.2303 stale=1 time=0.06m eta=10.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.62 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.40 loss_charge=0.63\n", + "epoch=135 / 300 train_loss=22.7451 valid_loss=22.2202 stale=0 time=0.06m eta=10.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.60 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=136 / 300 train_loss=22.7259 valid_loss=22.2204 stale=1 time=0.06m eta=10.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.61 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=137 / 300 train_loss=22.7382 valid_loss=22.2146 stale=0 time=0.06m eta=10.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.59 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=138 / 300 train_loss=22.7208 valid_loss=22.1989 stale=0 time=0.06m eta=10.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.58 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 37.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=139 / 300 train_loss=22.7042 valid_loss=22.2026 stale=1 time=0.06m eta=10.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.57 loss_momentum=1.50 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=140 / 300 train_loss=22.7017 valid_loss=22.1969 stale=0 time=0.06m eta=10.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.58 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=141 / 300 train_loss=22.7012 valid_loss=22.1886 stale=0 time=0.06m eta=10.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.56 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=142 / 300 train_loss=22.6867 valid_loss=22.1822 stale=0 time=0.06m eta=9.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.56 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.67it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=143 / 300 train_loss=22.6855 valid_loss=22.1841 stale=1 time=0.06m eta=9.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.54 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=144 / 300 train_loss=22.6639 valid_loss=22.1876 stale=2 time=0.06m eta=9.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.53 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=145 / 300 train_loss=22.6523 valid_loss=22.1772 stale=0 time=0.06m eta=9.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.55 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=146 / 300 train_loss=22.6676 valid_loss=22.1719 stale=0 time=0.06m eta=9.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.53 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=147 / 300 train_loss=22.6513 valid_loss=22.1635 stale=0 time=0.06m eta=9.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.52 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=148 / 300 train_loss=22.6389 valid_loss=22.1663 stale=1 time=0.06m eta=9.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.52 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=149 / 300 train_loss=22.6381 valid_loss=22.154 stale=0 time=0.06m eta=9.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.39 loss_charge=0.63\n", + "epoch=150 / 300 train_loss=22.6269 valid_loss=22.1494 stale=0 time=0.06m eta=9.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=151 / 300 train_loss=22.6271 valid_loss=22.1442 stale=0 time=0.06m eta=9.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.49 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=152 / 300 train_loss=22.6085 valid_loss=22.1449 stale=1 time=0.06m eta=9.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.50 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=153 / 300 train_loss=22.6146 valid_loss=22.1391 stale=0 time=0.06m eta=9.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.51 loss_momentum=1.49 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=154 / 300 train_loss=22.6222 valid_loss=22.1269 stale=0 time=0.06m eta=9.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.50 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=155 / 300 train_loss=22.6079 valid_loss=22.1246 stale=0 time=0.06m eta=9.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.50 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=156 / 300 train_loss=22.614 valid_loss=22.1145 stale=0 time=0.06m eta=9.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.47 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=157 / 300 train_loss=22.5777 valid_loss=22.1288 stale=1 time=0.06m eta=9.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.46 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=158 / 300 train_loss=22.5741 valid_loss=22.1288 stale=2 time=0.06m eta=8.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.48 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=159 / 300 train_loss=22.5894 valid_loss=22.1061 stale=0 time=0.06m eta=8.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=160 / 300 train_loss=22.5627 valid_loss=22.1071 stale=1 time=0.06m eta=8.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.46 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=161 / 300 train_loss=22.5707 valid_loss=22.1078 stale=2 time=0.06m eta=8.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.74it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.46 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.38 loss_charge=0.63\n", + "epoch=162 / 300 train_loss=22.57 valid_loss=22.1127 stale=3 time=0.06m eta=8.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=163 / 300 train_loss=22.5618 valid_loss=22.1024 stale=0 time=0.06m eta=8.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.08 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=164 / 300 train_loss=22.5472 valid_loss=22.0857 stale=0 time=0.06m eta=8.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=165 / 300 train_loss=22.5541 valid_loss=22.0906 stale=1 time=0.06m eta=8.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.45 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.08 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=166 / 300 train_loss=22.5563 valid_loss=22.083 stale=0 time=0.06m eta=8.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.44 loss_momentum=1.48 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.07 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=167 / 300 train_loss=22.5421 valid_loss=22.0733 stale=0 time=0.06m eta=8.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.43 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.08 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=168 / 300 train_loss=22.5391 valid_loss=22.0847 stale=1 time=0.06m eta=8.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.07 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=169 / 300 train_loss=22.5232 valid_loss=22.0676 stale=0 time=0.06m eta=8.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.43 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=170 / 300 train_loss=22.5283 valid_loss=22.0627 stale=0 time=0.06m eta=8.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.21it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=171 / 300 train_loss=22.5186 valid_loss=22.063 stale=1 time=0.06m eta=8.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=172 / 300 train_loss=22.5072 valid_loss=22.0572 stale=0 time=0.06m eta=8.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.42 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=173 / 300 train_loss=22.5159 valid_loss=22.0609 stale=1 time=0.06m eta=8.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.39 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=174 / 300 train_loss=22.4938 valid_loss=22.0547 stale=0 time=0.06m eta=7.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.37 loss_charge=0.63\n", + "epoch=175 / 300 train_loss=22.5076 valid_loss=22.041 stale=0 time=0.06m eta=7.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.40 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.06 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=176 / 300 train_loss=22.4992 valid_loss=22.0505 stale=1 time=0.06m eta=7.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.41 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=177 / 300 train_loss=22.5039 valid_loss=22.0401 stale=0 time=0.06m eta=7.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=178 / 300 train_loss=22.4722 valid_loss=22.0423 stale=1 time=0.06m eta=7.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.04 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=179 / 300 train_loss=22.4713 valid_loss=22.0354 stale=0 time=0.06m eta=7.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.47 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.04 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=180 / 300 train_loss=22.4718 valid_loss=22.0329 stale=0 time=0.06m eta=7.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.39 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.05 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=181 / 300 train_loss=22.4776 valid_loss=22.0363 stale=1 time=0.06m eta=7.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.37 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.04 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=182 / 300 train_loss=22.4591 valid_loss=22.031 stale=0 time=0.06m eta=7.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.36it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.03 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=183 / 300 train_loss=22.4674 valid_loss=22.0155 stale=0 time=0.06m eta=7.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.38 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.03 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=184 / 300 train_loss=22.4727 valid_loss=22.0144 stale=0 time=0.06m eta=7.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.74it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.37 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.02 loss_momentum=1.36 loss_charge=0.63\n", + "epoch=185 / 300 train_loss=22.4541 valid_loss=22.0096 stale=0 time=0.06m eta=7.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.36 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.02 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=186 / 300 train_loss=22.4533 valid_loss=22.0032 stale=0 time=0.06m eta=7.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.36 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.02 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=187 / 300 train_loss=22.4545 valid_loss=22.0023 stale=0 time=0.06m eta=7.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=188 / 300 train_loss=22.44 valid_loss=21.9969 stale=0 time=0.06m eta=7.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=189 / 300 train_loss=22.4295 valid_loss=21.997 stale=1 time=0.06m eta=6.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=190 / 300 train_loss=22.4357 valid_loss=21.9901 stale=0 time=0.06m eta=6.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=191 / 300 train_loss=22.4346 valid_loss=21.988 stale=0 time=0.06m eta=6.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.01 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=192 / 300 train_loss=22.4314 valid_loss=21.9893 stale=1 time=0.06m eta=6.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 17.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=193 / 300 train_loss=22.4339 valid_loss=21.9761 stale=0 time=0.07m eta=6.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.35 loss_momentum=1.46 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=194 / 300 train_loss=22.4328 valid_loss=21.9808 stale=1 time=0.06m eta=6.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.35 loss_charge=0.63\n", + "epoch=195 / 300 train_loss=22.4203 valid_loss=21.9769 stale=2 time=0.06m eta=6.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.34 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=196 / 300 train_loss=22.4211 valid_loss=21.9797 stale=3 time=0.06m eta=6.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.00 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=197 / 300 train_loss=22.4095 valid_loss=21.9706 stale=0 time=0.06m eta=6.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.33 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.99 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=198 / 300 train_loss=22.4126 valid_loss=21.9626 stale=0 time=0.06m eta=6.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.99 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=199 / 300 train_loss=22.3915 valid_loss=21.9595 stale=0 time=0.06m eta=6.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.99 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=200 / 300 train_loss=22.3946 valid_loss=21.9613 stale=1 time=0.06m eta=6.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.98 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=201 / 300 train_loss=22.394 valid_loss=21.9461 stale=0 time=0.06m eta=6.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.99 loss_momentum=1.34 loss_charge=0.63\n", + "epoch=202 / 300 train_loss=22.3823 valid_loss=21.953 stale=1 time=0.06m eta=6.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.32 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.98 loss_momentum=1.33 loss_charge=0.63\n", + "epoch=203 / 300 train_loss=22.3927 valid_loss=21.9471 stale=2 time=0.06m eta=6.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.31 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.97 loss_momentum=1.33 loss_charge=0.63\n", + "epoch=204 / 300 train_loss=22.3816 valid_loss=21.9334 stale=0 time=0.06m eta=6.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.45 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.97 loss_momentum=1.33 loss_charge=0.63\n", + "epoch=205 / 300 train_loss=22.3756 valid_loss=21.929 stale=0 time=0.06m eta=5.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.33 loss_charge=0.63\n", + "epoch=206 / 300 train_loss=22.3536 valid_loss=21.9201 stale=0 time=0.06m eta=5.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.98 loss_momentum=1.33 loss_charge=0.63\n", + "epoch=207 / 300 train_loss=22.372 valid_loss=21.9368 stale=1 time=0.06m eta=5.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.30 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.32 loss_charge=0.63\n", + "epoch=208 / 300 train_loss=22.3695 valid_loss=21.9184 stale=0 time=0.06m eta=5.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.32 loss_charge=0.63\n", + "epoch=209 / 300 train_loss=22.3434 valid_loss=21.9095 stale=0 time=0.06m eta=5.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.32 loss_charge=0.63\n", + "epoch=210 / 300 train_loss=22.3468 valid_loss=21.9067 stale=0 time=0.06m eta=5.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.29 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.31 loss_charge=0.63\n", + "epoch=211 / 300 train_loss=22.3581 valid_loss=21.9032 stale=0 time=0.06m eta=5.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.29 loss_momentum=1.44 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.31 loss_charge=0.63\n", + "epoch=212 / 300 train_loss=22.3514 valid_loss=21.8908 stale=0 time=0.06m eta=5.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.28 loss_momentum=1.43 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.31 loss_charge=0.63\n", + "epoch=213 / 300 train_loss=22.3453 valid_loss=21.8876 stale=0 time=0.06m eta=5.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.43 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.96 loss_momentum=1.30 loss_charge=0.63\n", + "epoch=214 / 300 train_loss=22.3326 valid_loss=21.8875 stale=0 time=0.06m eta=5.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.43 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.30 loss_charge=0.63\n", + "epoch=215 / 300 train_loss=22.3262 valid_loss=21.8822 stale=0 time=0.06m eta=5.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.29 loss_charge=0.63\n", + "epoch=216 / 300 train_loss=22.3286 valid_loss=21.873 stale=0 time=0.06m eta=5.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.95 loss_momentum=1.29 loss_charge=0.63\n", + "epoch=217 / 300 train_loss=22.3255 valid_loss=21.8734 stale=1 time=0.06m eta=5.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.27 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 38.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.94 loss_momentum=1.29 loss_charge=0.63\n", + "epoch=218 / 300 train_loss=22.3168 valid_loss=21.8605 stale=0 time=0.06m eta=5.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.42 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.94 loss_momentum=1.28 loss_charge=0.63\n", + "epoch=219 / 300 train_loss=22.3108 valid_loss=21.854 stale=0 time=0.06m eta=5.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.94 loss_momentum=1.28 loss_charge=0.63\n", + "epoch=220 / 300 train_loss=22.2902 valid_loss=21.8464 stale=0 time=0.06m eta=5.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.94 loss_momentum=1.28 loss_charge=0.63\n", + "epoch=221 / 300 train_loss=22.2925 valid_loss=21.8439 stale=0 time=0.06m eta=4.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.27 loss_charge=0.63\n", + "epoch=222 / 300 train_loss=22.2937 valid_loss=21.8327 stale=0 time=0.06m eta=4.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.25 loss_momentum=1.41 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.27 loss_charge=0.63\n", + "epoch=223 / 300 train_loss=22.2838 valid_loss=21.8329 stale=1 time=0.06m eta=4.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.27 loss_charge=0.63\n", + "epoch=224 / 300 train_loss=22.2961 valid_loss=21.8219 stale=0 time=0.06m eta=4.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.26 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.26 loss_charge=0.63\n", + "epoch=225 / 300 train_loss=22.289 valid_loss=21.8171 stale=0 time=0.06m eta=4.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.26 loss_charge=0.63\n", + "epoch=226 / 300 train_loss=22.2676 valid_loss=21.8152 stale=0 time=0.06m eta=4.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.40 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.93 loss_momentum=1.25 loss_charge=0.63\n", + "epoch=227 / 300 train_loss=22.2665 valid_loss=21.8115 stale=0 time=0.06m eta=4.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.39 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.92 loss_momentum=1.25 loss_charge=0.63\n", + "epoch=228 / 300 train_loss=22.2636 valid_loss=21.802 stale=0 time=0.06m eta=4.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.39 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.25 loss_charge=0.63\n", + "epoch=229 / 300 train_loss=22.2499 valid_loss=21.7918 stale=0 time=0.06m eta=4.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.24 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.25 loss_charge=0.63\n", + "epoch=230 / 300 train_loss=22.2491 valid_loss=21.783 stale=0 time=0.06m eta=4.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.24 loss_charge=0.63\n", + "epoch=231 / 300 train_loss=22.2361 valid_loss=21.783 stale=0 time=0.06m eta=4.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.51it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.24 loss_charge=0.63\n", + "epoch=232 / 300 train_loss=22.2406 valid_loss=21.7748 stale=0 time=0.06m eta=4.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.38 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=233 / 300 train_loss=22.2239 valid_loss=21.7759 stale=1 time=0.06m eta=4.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.92 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=234 / 300 train_loss=22.2274 valid_loss=21.7806 stale=2 time=0.06m eta=4.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.23 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.92 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=235 / 300 train_loss=22.2286 valid_loss=21.7764 stale=3 time=0.06m eta=4.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=236 / 300 train_loss=22.2225 valid_loss=21.7558 stale=0 time=0.06m eta=4.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.37 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.20it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.91 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=237 / 300 train_loss=22.2188 valid_loss=21.7625 stale=1 time=0.06m eta=3.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.69it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.31it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.23 loss_charge=0.63\n", + "epoch=238 / 300 train_loss=22.1989 valid_loss=21.7548 stale=0 time=0.06m eta=3.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.22 loss_charge=0.63\n", + "epoch=239 / 300 train_loss=22.214 valid_loss=21.7562 stale=1 time=0.06m eta=3.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.89 loss_momentum=1.22 loss_charge=0.63\n", + "epoch=240 / 300 train_loss=22.2036 valid_loss=21.7389 stale=0 time=0.06m eta=3.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.36 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.90 loss_momentum=1.22 loss_charge=0.63\n", + "epoch=241 / 300 train_loss=22.2009 valid_loss=21.7454 stale=1 time=0.06m eta=3.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.35 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.08it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.89 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=242 / 300 train_loss=22.1832 valid_loss=21.7332 stale=0 time=0.06m eta=3.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.22 loss_momentum=1.35 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.10it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=243 / 300 train_loss=22.1997 valid_loss=21.7265 stale=0 time=0.06m eta=3.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.35 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.89 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=244 / 300 train_loss=22.1869 valid_loss=21.7311 stale=1 time=0.06m eta=3.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.20 loss_momentum=1.35 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.54it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=245 / 300 train_loss=22.1739 valid_loss=21.7248 stale=0 time=0.06m eta=3.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.21 loss_momentum=1.35 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=246 / 300 train_loss=22.1857 valid_loss=21.7226 stale=0 time=0.06m eta=3.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.71it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.34 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.06it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=247 / 300 train_loss=22.1565 valid_loss=21.7194 stale=0 time=0.06m eta=3.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.76it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.34 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.88 loss_momentum=1.21 loss_charge=0.63\n", + "epoch=248 / 300 train_loss=22.1633 valid_loss=21.7201 stale=1 time=0.06m eta=3.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.34 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=249 / 300 train_loss=22.1599 valid_loss=21.7081 stale=0 time=0.06m eta=3.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.34 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=250 / 300 train_loss=22.1526 valid_loss=21.7021 stale=0 time=0.06m eta=3.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.34 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.64it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=251 / 300 train_loss=22.148 valid_loss=21.7046 stale=1 time=0.06m eta=3.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.33 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=252 / 300 train_loss=22.1428 valid_loss=21.6995 stale=0 time=0.06m eta=3.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.33 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.87 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=253 / 300 train_loss=22.1467 valid_loss=21.7012 stale=1 time=0.06m eta=2.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.33 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=254 / 300 train_loss=22.1346 valid_loss=21.6862 stale=0 time=0.06m eta=2.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.33 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=255 / 300 train_loss=22.1353 valid_loss=21.6839 stale=0 time=0.06m eta=2.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.18 loss_momentum=1.33 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=256 / 300 train_loss=22.1321 valid_loss=21.6844 stale=1 time=0.06m eta=2.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.81it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.20 loss_charge=0.63\n", + "epoch=257 / 300 train_loss=22.1204 valid_loss=21.6872 stale=2 time=0.06m eta=2.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.19 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=258 / 300 train_loss=22.1408 valid_loss=21.6775 stale=0 time=0.06m eta=2.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.86 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=259 / 300 train_loss=22.1201 valid_loss=21.6823 stale=1 time=0.06m eta=2.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 19.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.85 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=260 / 300 train_loss=22.1201 valid_loss=21.6677 stale=0 time=0.06m eta=2.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.17 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.95it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.85 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=261 / 300 train_loss=22.1117 valid_loss=21.672 stale=1 time=0.06m eta=2.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.32 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.85 loss_momentum=1.19 loss_charge=0.63\n", + "epoch=262 / 300 train_loss=22.0972 valid_loss=21.6656 stale=0 time=0.06m eta=2.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.31 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=263 / 300 train_loss=22.1021 valid_loss=21.6595 stale=0 time=0.06m eta=2.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.60it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.31 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=264 / 300 train_loss=22.0912 valid_loss=21.6559 stale=0 time=0.06m eta=2.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.16 loss_momentum=1.31 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=265 / 300 train_loss=22.1005 valid_loss=21.6491 stale=0 time=0.06m eta=2.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.31 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=266 / 300 train_loss=22.0869 valid_loss=21.6518 stale=1 time=0.06m eta=2.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.31 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=267 / 300 train_loss=22.0907 valid_loss=21.6507 stale=2 time=0.06m eta=2.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=268 / 300 train_loss=22.0782 valid_loss=21.6383 stale=0 time=0.06m eta=2.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.84 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=269 / 300 train_loss=22.0737 valid_loss=21.6446 stale=1 time=0.06m eta=1.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.85it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.18 loss_charge=0.63\n", + "epoch=270 / 300 train_loss=22.0694 valid_loss=21.6378 stale=0 time=0.06m eta=1.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.15 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=271 / 300 train_loss=22.0759 valid_loss=21.6359 stale=0 time=0.06m eta=1.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.57it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=272 / 300 train_loss=22.0556 valid_loss=21.6291 stale=0 time=0.06m eta=1.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.30 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.82 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=273 / 300 train_loss=22.0572 valid_loss=21.6211 stale=0 time=0.06m eta=1.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.83 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=274 / 300 train_loss=22.0598 valid_loss=21.625 stale=1 time=0.06m eta=1.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 42.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.82 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=275 / 300 train_loss=22.0485 valid_loss=21.6224 stale=2 time=0.06m eta=1.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.14 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.82 loss_momentum=1.17 loss_charge=0.63\n", + "epoch=276 / 300 train_loss=22.0573 valid_loss=21.6154 stale=0 time=0.06m eta=1.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.59it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=277 / 300 train_loss=22.0352 valid_loss=21.6035 stale=0 time=0.06m eta=1.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=278 / 300 train_loss=22.0422 valid_loss=21.6002 stale=0 time=0.06m eta=1.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 19.04it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.29 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.82 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=279 / 300 train_loss=22.0348 valid_loss=21.608 stale=1 time=0.06m eta=1.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=280 / 300 train_loss=22.0327 valid_loss=21.6021 stale=2 time=0.06m eta=1.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=281 / 300 train_loss=22.0183 valid_loss=21.5964 stale=0 time=0.06m eta=1.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.44it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=282 / 300 train_loss=22.0299 valid_loss=21.5962 stale=0 time=0.06m eta=1.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.13 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.16 loss_charge=0.63\n", + "epoch=283 / 300 train_loss=22.0361 valid_loss=21.5951 stale=0 time=0.06m eta=1.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.87it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.12 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.27it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.80 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=284 / 300 train_loss=22.023 valid_loss=21.5854 stale=0 time=0.06m eta=1.0m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.91it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.81 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=285 / 300 train_loss=22.0166 valid_loss=21.5913 stale=1 time=0.06m eta=0.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.28 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=286 / 300 train_loss=22.0162 valid_loss=21.5728 stale=0 time=0.06m eta=0.9m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 43.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=287 / 300 train_loss=22.0065 valid_loss=21.5714 stale=0 time=0.06m eta=0.8m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.80 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=288 / 300 train_loss=22.0072 valid_loss=21.5766 stale=1 time=0.06m eta=0.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.80 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=289 / 300 train_loss=22.0087 valid_loss=21.5754 stale=2 time=0.06m eta=0.7m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.70it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=290 / 300 train_loss=21.9884 valid_loss=21.5687 stale=0 time=0.06m eta=0.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.56it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.12it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.15 loss_charge=0.63\n", + "epoch=291 / 300 train_loss=21.9942 valid_loss=21.5689 stale=1 time=0.06m eta=0.6m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.11 loss_momentum=1.27 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=292 / 300 train_loss=22.002 valid_loss=21.5606 stale=0 time=0.06m eta=0.5m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.62it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.78 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=293 / 300 train_loss=21.9852 valid_loss=21.5538 stale=0 time=0.06m eta=0.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.78 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=294 / 300 train_loss=21.9805 valid_loss=21.5567 stale=1 time=0.06m eta=0.4m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.07 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.79 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=295 / 300 train_loss=21.963 valid_loss=21.5599 stale=2 time=0.06m eta=0.3m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 41.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.78 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=296 / 300 train_loss=21.9863 valid_loss=21.5554 stale=3 time=0.06m eta=0.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.10 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.78 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=297 / 300 train_loss=21.982 valid_loss=21.5538 stale=4 time=0.06m eta=0.2m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.09 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.50it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.78 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=298 / 300 train_loss=21.9757 valid_loss=21.5507 stale=0 time=0.06m eta=0.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.07 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 40.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.77 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=299 / 300 train_loss=21.9576 valid_loss=21.5397 stale=0 time=0.06m eta=0.1m\n", + "----------------------------------------------------------\n", + "---->Initiating a training run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 65/65 [00:03<00:00, 18.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=20.08 loss_momentum=1.26 loss_charge=0.63\n", + "---->Initiating a validation run\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 39.44it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loss_id=19.77 loss_momentum=1.14 loss_charge=0.63\n", + "epoch=300 / 300 train_loss=21.9639 valid_loss=21.5367 stale=0 time=0.06m eta=0.0m\n", + "----------------------------------------------------------\n", + "Done with training. Total training time is 18.678min\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "n_epochs = 300\n", + "lr = 5e-5\n", + "patience = 50\n", + "\n", + "def training_loop(n_epochs, lr, patience, )\n", + " # make mlpf specific directory\n", + " print(f\"- Training {mode} MLPF over {n_epochs} epochs\")\n", + "\n", + " t0_initial = time.time()\n", + "\n", + " losses_train_tot, losses_train_id, losses_train_momentum = [], [], []\n", + " losses_valid_tot, losses_valid_id, losses_valid_momentum = [], [], []\n", + "\n", + " best_val_loss_tot, best_val_loss_id, best_val_loss_momentum = 99999.9, 99999.9, 99999.9\n", + " stale_epochs = 0\n", + "\n", + " optimizer = torch.optim.AdamW(mlpf.parameters(), lr=lr)\n", + "\n", + " # set VICReg to evaluation mode\n", + " encoder.eval()\n", + "\n", + " for epoch in range(n_epochs):\n", + " t0 = time.time()\n", + "\n", + " if stale_epochs > patience:\n", + " print(\"breaking due to stale epochs\")\n", + " break\n", + "\n", + " # training step\n", + " losses_t_tot, losses_t_id, losses_t_momentum = train(\n", + " device, encoder, mlpf, train_loader, valid_loader, optimizer, optimizer_VICReg, mode\n", + " )\n", + " losses_train_tot.append(losses_t_tot)\n", + " losses_train_id.append(losses_t_id)\n", + " losses_train_momentum.append(losses_t_momentum)\n", + "\n", + " # validation step\n", + " losses_v_tot, losses_v_id, losses_v_momentum = validation_run(\n", + " device, encoder, mlpf, train_loader, valid_loader, mode\n", + " )\n", + " losses_valid_tot.append(losses_v_tot)\n", + " losses_valid_id.append(losses_v_id)\n", + " losses_valid_momentum.append(losses_v_momentum)\n", + "\n", + " if losses_v_id < best_val_loss_id:\n", + " best_val_loss_id = losses_v_id\n", + " best_train_loss_id = losses_t_id\n", + "\n", + " if losses_v_momentum < best_val_loss_momentum:\n", + " best_val_loss_momentum = losses_v_momentum\n", + " best_train_loss_momentum = losses_t_momentum\n", + "\n", + " # early-stopping\n", + " if losses_v_tot < best_val_loss_tot:\n", + " best_val_loss_tot = losses_v_tot\n", + " best_train_loss_tot = losses_t_tot\n", + "\n", + " stale_epochs = 0\n", + " else:\n", + " stale_epochs += 1\n", + "\n", + " t1 = time.time()\n", + "\n", + " epochs_remaining = n_epochs - (epoch + 1)\n", + " time_per_epoch = (t1 - t0_initial) / (epoch + 1)\n", + " eta = epochs_remaining * time_per_epoch / 60\n", + "\n", + " print(\n", + " f\"epoch={epoch + 1} / {n_epochs} \"\n", + " + f\"train_loss={round(losses_train_tot[epoch], 4)} \"\n", + " + f\"valid_loss={round(losses_valid_tot[epoch], 4)} \"\n", + " + f\"stale={stale_epochs} \"\n", + " + f\"time={round((t1-t0)/60, 2)}m \"\n", + " + f\"eta={round(eta, 1)}m\"\n", + " )\n", + "\n", + " print(\"----------------------------------------------------------\")\n", + " print(f\"Done with training. Total training time is {round((time.time() - t0_initial)/60,3)}min\")\n", + "\n", + " return losses_valid_tot, losses_valid_id, losses_valid_momentum, losses_train_tot, losses_train_id, losses_train_momentum" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "2a951cec", + "metadata": {}, + "outputs": [], + "source": [ + "losses_to_plot[\"native\"] = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "b49b320a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "# make total loss plot\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.plot(range(len(losses_train_tot)), losses_train_tot, label=\"training ({:.2f})\".format(best_train_loss_tot))\n", + "ax.plot(range(len(losses_valid_tot)), losses_valid_tot, label=\"validation ({:.2f})\".format(best_val_loss_tot))\n", + "ax.set_xlabel(\"Epochs\")\n", + "ax.set_ylabel(\"Total Loss\")\n", + "ax.set_ylim(0.8 * losses_train_tot[-1], 1.2 * losses_train_tot[-1])\n", + "if mode == \"ssl\":\n", + " ax.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss id plot\n", + "fig, (ax1,ax2) = plt.subplots(1,2, figsize=(10,4))\n", + "ax1.plot(range(len(losses_train_id)), losses_train_id, label=\"training ({:.2f})\".format(best_train_loss_id))\n", + "ax1.plot(range(len(losses_valid_id)), losses_valid_id, label=\"validation ({:.2f})\".format(best_val_loss_id))\n", + "ax1.set_xlabel(\"Epochs\")\n", + "ax1.set_ylabel(\"Classification Loss\")\n", + "ax1.set_ylim(0.8 * losses_train_id[-1], 1.2 * losses_train_id[-1])\n", + "if mode == \"ssl\":\n", + " ax1.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax1.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "# make loss momentum plot\n", + "ax2.plot(\n", + " range(len(losses_train_momentum)),\n", + " losses_train_momentum,\n", + " label=\"training ({:.2f})\".format(best_train_loss_momentum),\n", + ")\n", + "ax2.plot(\n", + " range(len(losses_valid_momentum)),\n", + " losses_valid_momentum,\n", + " label=\"validation ({:.2f})\".format(best_val_loss_momentum),\n", + ")\n", + "ax2.set_xlabel(\"Epochs\")\n", + "ax2.set_ylabel(\"Regression Loss\")\n", + "ax2.set_ylim(0.8 * losses_train_momentum[-1], 1.2 * losses_train_momentum[-1])\n", + "if mode == \"ssl\":\n", + " ax2.legend(title=\"SSL-based MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "else:\n", + " ax2.legend(title=\"Native MLPF\", loc=\"best\", title_fontsize=20, fontsize=15)\n", + "\n", + "\n", + "losses_to_plot[\"native\"][\"tot\"] = losses_valid_tot\n", + "losses_to_plot[\"native\"][\"id\"] = losses_valid_id\n", + "losses_to_plot[\"native\"][\"p4\"] = losses_valid_momentum " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "16bbca9c", + "metadata": {}, + "outputs": [], + "source": [ + "with open(f\"/pfclicvol/losses_to_plot.pkl\", \"wb\") as f: # dump model architecture\n", + " pkl.dump(losses_to_plot, f, protocol=pkl.HIGHEST_PROTOCOL)" + ] + }, + { + "cell_type": "markdown", + "id": "46dc9f6d", + "metadata": {}, + "source": [ + "# Compare native vs ssl" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "ad7c84c7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAF+CAYAAABj87q4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABeDElEQVR4nO3dd3hUVfrA8e+dyaT3AAlJSKP3qggIBEUBV1EUVxCluKgoqD+7LiLFggiKiyLquooKdlllFVBQOiioSEc6IYSEBEivM3N+f9zMQEyb9Bnyfp5nHsK955555xLee+bcc87VlFIKIYQQlzRDQwcghBCi7kmyF0KIRkCSvRBCNAKS7IUQohGQZC+EEI2AJHshhGgEJNkLIUQjIMleCCEaAbeGDqA6ioqKKCwsLLVd0zS8vb0bICIhhHBuTt+y//TTT9E0jSNHjti3vfDCC/j6+pZ6tW3btgEjFUII5+XULfvjx48zadKkUtsPHTpE165dWbhwYYnt7u7u9RWaEEK4FKdN9mazmdtvv73MfYcOHaJ79+7069evnqMSQgjX5LTdODNmzODEiRNMmzat1L5Dhw7RunVrACwWS32HJoQQLscpW/br169nzpw5rFq1isTExBL70tLSSE9P55dffqFVq1YcPXqUyMhIRo4cyaxZs/D19S2zTh8fH/Lz8zEajTRt2rTasWmaVu1jhRDir2qy8HBqaioWiwVPT09ycnIqfSOncvbsWRUZGameeOIJpZRSixcvVoA6fPiwUkqpLVu2KEC1aNFCvfXWW2rlypVq2rRpytPTU1199dXl1mswGBQgL3nJS16X3MtgMFSaW52uZT9x4kRCQ0N5/vnny9zfokULPv30U+Lj4wkNDQVg6NChREREMGnSJH766SeuuuqqUscZjUasVisGg4GwsDCH47FarSQnJxMWFobBYKhxyz4lJcUetzPU46x1KaVISkoiPDy8Vr5NOeNnrM265Ly7bl2quGX/11zjiOTkZKxWK0aj0aE3chrvv/++8vT0VL/99pvKzs5W2dnZ6q233lKA2rlzp8rOzi732DNnzihAzZs3r8z9ERERClARERFViikjI0MBKiMjo0rHlad9+/ZOVY+z1uWs591Z65Lz7vp1VefcVyWvVfsGbXp6Op988glJSUmAflV64okniIuLY+DAgaxYsaLKde7cuZP8/Hx69uxp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36whDR0GXqay+46rymg0ctttt3HbbbdhtVrZtWsX69at44cffmDNmjW88sorfPTRR6xdu7bEYzCre1xNLViwgEOHDpXY9tBDD9GqVatyj7FddJo2bVqj987NzSU+Pp59+/bx/PPP27tV9u7dy9SpU7nnnntITk62P8faERs3buS+++5j7969eHh4MHfuXB577DH7/uzsbMaOHUvLli15+eWXHa43JCQEgNOnTzv+AV1Fde4A/+9//1Oapql27dqpZcuW2Z+GnpGRoZYtW6batWunDAaD+t///led6utEtUbjpB3WR+O8GFl3gYlLzqlTp9TgwYMVoIYMGVLj42pjNE58fHypkTPr1q2r8JgXX3xRAWr16tWV1m8bQlnWaJyFCxcqQP3zn/8stS8vL0/FxcUpT09Pdf78+Urfp7CwUD3yyCP2uQo33nij+vPPP0uVmzx5sjIajaVG1syYMaPc0ThKKXXw4EEFqHvuuafSWJxBnY/Guf7665k6dSqHDx9m5MiRBAUF4e3tTVBQECNHjuTQoUM89dRTXH/99TW+GDUo6bMXZYiJiSEmJqbc/eHh4XzwwQeA3p9c0+Nqw9q1a1H6UGv7a+DAgRUeY2vlZmRk1Oi99+7dC+ijXf7K09OTAQMGkJ+fz+HDhyusRynF+PHjefXVV4mOjuann37i66+/LvNex969e7FYLFxxxRVommZ/2WbJ3nTTTWiaxsyZM0scl5mZCVz47JeSat+peu6557jttttYtGgRhw4dsj/0tnXr1kyaNKlE35kzsS2XUJbJkyczefLkCxsk2YsydOzYkRUrVrBz5066du1aZpmCggIAoqKianxcQ2nevDlAjR8vGhsbC1DuA7Ft2yu6EAK8++67fPzxx/Tt25cVK1ZUOIR1xIgRZQ7R3LZtG9u2beO6664jLi6uVFez7bPaPrszWLhwYemlXIrJcgllqFY3zvkEvRvnuWZ1F5hwOZ9//rkCVNu2bcucXp+RkaFuuOGGUhOoqntcQ02qSkxMVID6v//7v0rLVtSNs3PnTuXm5qZatWqlTp06VWLfp59+qjRNK3OG7l916dJFubm5qZMnTzr+If6ism6c1157TQGlZjg7q6rktTobSDp+/Hi+/fZb137ouLTsRRluvfVWnn76aV566SV69OhBr169aNWqFV5eXiQlJbFhwwZyc3O57rrrSiyu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2i9u1TFt2jQsFgsvvPBCpWUzMjKYPn06w4cPZ9CgQeWW69ChA4cOHSI7O7vacdWWarXsu3Xrxvr16zl69ChxcXGl9h86dIi1a9dW+cG9Dz74ICNHjiyxbcWKFbz44ot8+umnREVF0bFjR3x8fPjwww/t43StVitLly6lX79+REdHV+cjlcmgaVjtM2idZwiVSzJ5663qhmbyrpNqZ86cyX//+18WLVrEqFGj6N+/f5nlunTpQpcuXQDIzs7m2LFjHD16lA0bNvD7779X+/1HjRrFE088wVdffcVDDz0EwLp160hOTubJJ5/EaDQC2BtJW7duLXPoo9lsJj8/n8OHD9OxY8cy3+vcuXNMnz69xLbg4OBK5xMkJSXh5+dX4wEO8fHx/Otf/+LJJ59kyJAh9u0BAQHMnj2bp59+usqDQw4cOMB7773HQw89VGnvAMDLL79MWloazz//fIXlQkJCADh9+jStW7euUky1rVrJ/u6772bdunUMHjyYF198kaFDhxIYGEh6ejorVqxg6tSp5Obmcu+991ap3tjY2FITRWxDN3v16mUfAmq7465pGt27d+fzzz9n27ZtLF++vDofp1xGg4YVGWdfKzStVrtPnI2XlxfvvvsugwYNYuLEiezcubPcskuWLOGll16yJ16TyUTXrl1p3rw5p0+frtb7R0RE0L9/fzZu3EhycjJhYWH2Vu748ePt5U6cOAHA119/XWF9WVlZFe574403SmyLiYmpNNmfO3fO4S7Uyjz44IPccMMNrFmzhiNHjtCuXTsGDx5sn8hU1WT/xhtvYLFYuOeeeyotm5+fz9tvv02fPn3o3LlzhWUDAvRl0dPS0ho82VerG2f06NE8+uijJCQkMGbMGEJCQvD29iYkJIQ777yTxMREnnrqqVKt9Nry3HPPMXfuXFavXs2kSZM4d+4c3377LcOGDavV9zFqkuyF4wYOHMi9997LwYMHS7V8bV566SXuvPNOwsPDWbZsGceOHSMvL4/t27fTtm3bGr3/7bffjtVq5b///S+FhYUsW7aMvn37lug2sbVa16xZg9IHaJT5quhbeXR0dKnyx44dqzS+kJAQMjIyavQZLxYbG8vdd9/NSy+9xPjx44mMjGT//v1A1bqKsrKy+PDDDxkwYIBD/wafffYZZ8+e5e677660rG2Yt62F35CqPYN27ty5/Prrr9xz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epy5rtrkrJ/RGX8fapMznitnrqtOqUYiIiJCASoiIqJKx2VkZChAZWRk1Eoc7du3d6p6nLUuZz3vzlqXnHfXr6s6574qeU1a9kII0QhIshdCiEZAkr0QQjQCkuyFEKIRkGQvhBCNQKNZ4tjd3Z2ioiIMBgPNmzd3+DilFElJSYSHh6NpNX/ifEpKCqGhoU5Tj7PW5azn3VnrkvPu+nVV59yfPn0aq9WKyWSisLCwwrKNJtkbjUasVmvlBYUQwsUYDAYslvIfjAKNaLkET09P8vPzMRqNNGvWrKHDEUKIGjtz5gwWiwVPT89Kyzaalr0QQjRmcoNWCCEaAUn2QgjRCEiyF0KIRkCSvRBCNAKS7IUQohGQZC+EEI2AJPsK/PbbbwwdOpTg4GA6duzIU089VenEBVG5ffv2oWlamedy/vz59OzZk8DAQOLj41m5cmWpMmlpadxxxx20aNGCFi1acPvtt5Oamlofobukjz/+mF69euHv709UVBRjxozhxIkTJcrIea99ZrOZV199lU6dOuHj40NMTAx33XUXiYmJJcrV27mv+hL7jcOOHTuUr6+vGjhwoPrwww/VrFmzlIeHhxo9enRDh+bScnJy1A033KAAZTabS+x75plnlKZp6tFHH1VLly5VN910k3Jzc1PfffddiePbtm2roqOj1cKFC9Wbb76poqOjVevWrVVWVlZ9fxyn99577ylAjR49Wn322WfqjTfeULGxsapp06bq9OnTSik573Xl2WefVQaDQT300EPqyy+/VP/6179UWFiY6tChg8rLy1NK1e+5l2RfjjvuuEPFxMSonJwc+7Y333xTaZqmDh482ICRuabDhw+ra6+9VgUGBiqgVLLPyMhQPj4+6oknnrBvs1gsqk+fPurKK6+0b3v33XcVoPbs2WPftnfvXqVpmnr33Xfr58O4kLi4ODVo0KAS2xISEpSXl5d6/PHH5bzXocDAQDV27NgS25YvX64A9dNPP9X7uZdkX4aioiLl6empHnvssRLb09PTlbu7u5o1a1YDRea6kpKS1Lx589S8efPUtddeWyrZf/TRR6V+oZVSatGiRQpQJ06cUEopdfXVV6tevXqVqr93797qqquuqtsP4WLy8vKUpmlq9uzZpfZ16dJFDR06VM57HcnMzFSDBw9Wy5YtK7F9165dClDfffddvZ976bMvQ0pKCvn5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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "plt.rcParams.update({\"font.size\": 15})\n", + "\n", + "for loss in losses_to_plot[\"ssl\"]:\n", + " # make total loss plot\n", + " fig, ax = plt.subplots(figsize=(4,4))\n", + " ssl = np.array(losses_to_plot[\"ssl\"][loss])\n", + " native = np.array(losses_to_plot[\"native\"][loss])\n", + " ax.plot(range(len(ssl)), ssl, label=f\"SSL - ({ssl.min():.2f})\")\n", + " ax.plot(range(len(native)), native, label=f\"Native - ({native.min():.2f})\")\n", + " ax.set_xlabel(\"Epochs\")\n", + " ax.set_ylabel(f\"{loss} Loss\")\n", + " ax.legend(loc=\"best\", title_fontsize=20, fontsize=15)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "76e90ad7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "num of parameters for native model is: 1631501\n" + ] + } + ], + "source": [ + "print(f\"num of parameters for native model is: {sum(p.numel() for p in mlpf.parameters() if p.requires_grad)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "a9cdd0a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "num of parameters for ssl model is: 1631501\n" + ] + } + ], + "source": [ + "print(f\"num of parameters for ssl model is: {sum(p.numel() for p in mlpf.parameters() if p.requires_grad)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "6c5a2aa1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/pfclicvol/experiments/VICReg_2_1/'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outpath" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "6bed5aa6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "14bd315c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "825b3146", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MLPF(\n", + " (nn_id): Sequential(\n", + " (0): Linear(in_features=272, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=6, bias=True)\n", + " )\n", + " (nn_pt): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_eta): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_phi): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_energy): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=1, bias=True)\n", + " )\n", + " (nn_charge): Sequential(\n", + " (0): Linear(in_features=278, out_features=256, bias=True)\n", + " (1): ELU(alpha=1.0)\n", + " (2): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (3): Dropout(p=0.4, inplace=False)\n", + " (4): Linear(in_features=256, out_features=256, bias=True)\n", + " (5): ELU(alpha=1.0)\n", + " (6): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (7): Dropout(p=0.4, inplace=False)\n", + " (8): Linear(in_features=256, out_features=256, bias=True)\n", + " (9): ELU(alpha=1.0)\n", + " (10): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (11): Dropout(p=0.4, inplace=False)\n", + " (12): Linear(in_features=256, out_features=256, bias=True)\n", + " (13): ELU(alpha=1.0)\n", + " (14): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", + " (15): Linear(in_features=256, out_features=3, bias=True)\n", + " )\n", + ")\n", + "MLPF model name: MLPF_test_ssl\n", + "Num of 'ssl-mlpf' parameters: 1626893\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'objectview' object has no attribute 'data_split_mode'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [49], line 20\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;66;03m# make mlpf specific directory\u001b[39;00m\n\u001b[1;32m 19\u001b[0m outpath_ssl \u001b[38;5;241m=\u001b[39m osp\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/MLPF/\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;241m.\u001b[39mprefix_mlpf\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m_ssl\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 20\u001b[0m \u001b[43msave_MLPF\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutpath_ssl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmlpf_ssl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmlpf_model_kwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mssl\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 22\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m- Training ssl based MLPF over \u001b[39m\u001b[38;5;132;01m{\u001b[39;00margs\u001b[38;5;241m.\u001b[39mn_epochs_mlpf\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m epochs\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 24\u001b[0m training_loop_mlpf(\n\u001b[1;32m 25\u001b[0m device,\n\u001b[1;32m 26\u001b[0m vicreg_encoder,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 34\u001b[0m mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mssl\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 35\u001b[0m )\n", + "File \u001b[0;32m~/particleflow/mlpf/pyg_ssl/utils.py:213\u001b[0m, in \u001b[0;36msave_MLPF\u001b[0;34m(args, outpath, mlpf, mlpf_model_kwargs, mode)\u001b[0m\n\u001b[1;32m 208\u001b[0m pkl\u001b[38;5;241m.\u001b[39mdump(mlpf_model_kwargs, f, protocol\u001b[38;5;241m=\u001b[39mpkl\u001b[38;5;241m.\u001b[39mHIGHEST_PROTOCOL)\n\u001b[1;32m 210\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutpath\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/hyperparameters.json\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m fp: \u001b[38;5;66;03m# dump hyperparameters\u001b[39;00m\n\u001b[1;32m 211\u001b[0m json\u001b[38;5;241m.\u001b[39mdump(\n\u001b[1;32m 212\u001b[0m {\n\u001b[0;32m--> 213\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata_split_mode\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_split_mode\u001b[49m,\n\u001b[1;32m 214\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mn_epochs\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mn_epochs_mlpf,\n\u001b[1;32m 215\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlr\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mlr,\n\u001b[1;32m 216\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbatch_size_mlpf\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mbatch_size_mlpf,\n\u001b[1;32m 217\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwidth\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mwidth_mlpf,\n\u001b[1;32m 218\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124membedding_dim\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39membedding_dim_mlpf,\n\u001b[1;32m 219\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnum_convs\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mnum_convs,\n\u001b[1;32m 220\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mspace_dim\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mspace_dim,\n\u001b[1;32m 221\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpropagate_dim\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mpropagate_dim,\n\u001b[1;32m 222\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mk\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mnearest,\n\u001b[1;32m 223\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmode\u001b[39m\u001b[38;5;124m\"\u001b[39m: mode,\n\u001b[1;32m 224\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFineTune_VICReg\u001b[39m\u001b[38;5;124m\"\u001b[39m: args\u001b[38;5;241m.\u001b[39mFineTune_VICReg,\n\u001b[1;32m 225\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnum_mlpf_parameters\u001b[39m\u001b[38;5;124m\"\u001b[39m: num_mlpf_parameters,\n\u001b[1;32m 226\u001b[0m },\n\u001b[1;32m 227\u001b[0m fp,\n\u001b[1;32m 228\u001b[0m )\n", + "\u001b[0;31mAttributeError\u001b[0m: 'objectview' object has no attribute 'data_split_mode'" + ] + } + ], + "source": [ + "if args.ssl:\n", + "\n", + " mlpf_model_kwargs = {\n", + " \"input_dim\": input_,\n", + " \"embedding_dim\": args.embedding_dim_mlpf,\n", + " \"width\": args.width_mlpf,\n", + " \"k\": args.nearest,\n", + " \"num_convs\": args.num_convs_mlpf,\n", + " \"dropout\": args.dropout_mlpf,\n", + " \"ssl\": True,\n", + " \"VICReg_embedding_dim\": args.embedding_dim_VICReg,\n", + " }\n", + "\n", + " mlpf_ssl = MLPF(**mlpf_model_kwargs).to(device)\n", + " print(mlpf_ssl)\n", + " print(f\"MLPF model name: {args.prefix_mlpf}_ssl\")\n", + "\n", + " # make mlpf specific directory\n", + " outpath_ssl = osp.join(f\"{outpath}/MLPF/\", f\"{args.prefix_mlpf}_ssl\")\n", + " save_MLPF(args, outpath_ssl, mlpf_ssl, mlpf_model_kwargs, mode=\"ssl\")\n", + "\n", + " print(f\"- Training ssl based MLPF over {args.n_epochs_mlpf} epochs\")\n", + "\n", + " training_loop_mlpf(\n", + " device,\n", + " vicreg_encoder,\n", + " mlpf_ssl,\n", + " train_loader,\n", + " valid_loader,\n", + " args.n_epochs_mlpf,\n", + " args.patience,\n", + " args.lr,\n", + " outpath_ssl,\n", + " mode=\"ssl\",\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07d1c7f7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mlpf/ssl_pipeline.py b/mlpf/ssl_pipeline.py index df70b3fe9..30bc81a34 100644 --- a/mlpf/ssl_pipeline.py +++ b/mlpf/ssl_pipeline.py @@ -12,7 +12,7 @@ from pyg_ssl.training_mlpf import training_loop_mlpf from pyg_ssl.training_VICReg import training_loop_VICReg from pyg_ssl.utils import CLUSTERS_X, TRACKS_X, data_split, load_VICReg, save_MLPF, save_VICReg -from pyg_ssl.VICReg import DECODER, ENCODER +from pyg_ssl.VICReg import DECODER, ENCODER, VICReg matplotlib.use("Agg") mplhep.style.use(mplhep.styles.CMS) @@ -28,21 +28,19 @@ # Ignore divide by 0 errors np.seterr(divide="ignore", invalid="ignore") -# define the global base device +# define the global base device(s) if torch.cuda.device_count(): device = torch.device("cuda:0") print(f"Will use {torch.cuda.get_device_name(device)}") else: device = "cpu" print("Will use cpu") - +multi_gpu = torch.cuda.device_count() > 1 if __name__ == "__main__": args = parse_args() - world_size = torch.cuda.device_count() - # our data size varies from batch to batch, because each set of N_batch events has a different number of particles torch.backends.cudnn.benchmark = False @@ -60,16 +58,24 @@ # load a pre-trained VICReg model if args.load_VICReg: - encoder_state_dict, encoder_model_kwargs, decoder_state_dict, decoder_model_kwargs = load_VICReg(device, outpath) + vicreg_state_dict, encoder_model_kwargs, decoder_model_kwargs = load_VICReg(device, outpath) + + vicreg_encoder = ENCODER(**encoder_model_kwargs) + vicreg_decoder = DECODER(**decoder_model_kwargs) - encoder = ENCODER(**encoder_model_kwargs) - decoder = DECODER(**decoder_model_kwargs) + vicreg = VICReg(vicreg_encoder, vicreg_decoder) - encoder.load_state_dict(encoder_state_dict) - decoder.load_state_dict(decoder_state_dict) + # because model was saved using dataparallel + from collections import OrderedDict - decoder = decoder.to(device) - encoder = encoder.to(device) + new_state_dict = OrderedDict() + for k, v in vicreg_state_dict.items(): + name = k[7:] # remove module. + new_state_dict[name] = v + vicreg_state_dict = new_state_dict + + vicreg.load_state_dict(vicreg_state_dict) + vicreg.to(device) else: encoder_model_kwargs = { @@ -87,37 +93,37 @@ "width": args.width_decoder, } - encoder = ENCODER(**encoder_model_kwargs).to(device) - decoder = DECODER(**decoder_model_kwargs).to(device) - - print("Encoder", encoder) - print("Decoder", decoder) - print(f"VICReg model name: {args.prefix_VICReg}") + vicreg_encoder = ENCODER(**encoder_model_kwargs) + vicreg_decoder = DECODER(**decoder_model_kwargs) + vicreg = VICReg(vicreg_encoder, vicreg_decoder) + vicreg.to(device) # save model_kwargs and hyperparameters - save_VICReg(args, outpath, encoder, encoder_model_kwargs, decoder, decoder_model_kwargs) + save_VICReg(args, outpath, vicreg_encoder, encoder_model_kwargs, vicreg_decoder, decoder_model_kwargs) - print(f"Training VICReg over {args.n_epochs_VICReg} epochs") - - train_loader = torch_geometric.loader.DataLoader(data_VICReg_train, args.batch_size_VICReg) - valid_loader = torch_geometric.loader.DataLoader(data_VICReg_valid, args.batch_size_VICReg) + if multi_gpu: + vicreg = torch_geometric.nn.DataParallel(vicreg) + train_loader = torch_geometric.loader.DataListLoader(data_VICReg_train, args.bs_VICReg) + valid_loader = torch_geometric.loader.DataListLoader(data_VICReg_valid, args.bs_VICReg) + else: + train_loader = torch_geometric.loader.DataLoader(data_VICReg_train, args.bs_VICReg) + valid_loader = torch_geometric.loader.DataLoader(data_VICReg_valid, args.bs_VICReg) - # optimizer = torch.optim.Adam(list(encoder.parameters()) + list(decoder.parameters()), lr=args.lr) - optimizer = torch.optim.SGD(list(encoder.parameters()) + list(decoder.parameters()), lr=args.lr) + optimizer = torch.optim.SGD(vicreg.parameters(), lr=args.lr) + print(vicreg) + print(f"VICReg model name: {args.prefix_VICReg}") + print(f"Training VICReg over {args.n_epochs_VICReg} epochs") training_loop_VICReg( + multi_gpu, device, - encoder, - decoder, - train_loader, - valid_loader, + vicreg, + {"train": train_loader, "valid": valid_loader}, args.n_epochs_VICReg, args.patience, optimizer, + {"lmbd": args.lmbd, "mu": args.mu, "nu": args.nu}, outpath, - args.lmbd, - args.u, - args.v, ) if args.train_mlpf: @@ -125,26 +131,28 @@ print(f"Will use {len(data_mlpf_train)} events for train") print(f"Will use {len(data_mlpf_valid)} events for valid") - train_loader = torch_geometric.loader.DataLoader(data_mlpf_train, args.batch_size_mlpf) - valid_loader = torch_geometric.loader.DataLoader(data_mlpf_valid, args.batch_size_mlpf) + train_loader = torch_geometric.loader.DataLoader(data_mlpf_train, args.bs_mlpf) + valid_loader = torch_geometric.loader.DataLoader(data_mlpf_valid, args.bs_mlpf) input_ = max(CLUSTERS_X, TRACKS_X) + 1 # max cz we pad when we concatenate them & +1 cz there's the `type` feature if args.ssl: mlpf_model_kwargs = { - "input_dim": input_ + args.embedding_dim_VICReg, + "input_dim": input_, "embedding_dim": args.embedding_dim_mlpf, "width": args.width_mlpf, - "native_mlpf": False, "k": args.nearest, "num_convs": args.num_convs_mlpf, "dropout": args.dropout_mlpf, + "ssl": True, + "VICReg_embedding_dim": args.embedding_dim_VICReg, } mlpf_ssl = MLPF(**mlpf_model_kwargs).to(device) print(mlpf_ssl) print(f"MLPF model name: {args.prefix_mlpf}_ssl") + print(f"Will use VICReg model {args.prefix_VICReg}") # make mlpf specific directory outpath_ssl = osp.join(f"{outpath}/MLPF/", f"{args.prefix_mlpf}_ssl") @@ -154,7 +162,6 @@ training_loop_mlpf( device, - encoder, mlpf_ssl, train_loader, valid_loader, @@ -162,8 +169,7 @@ args.patience, args.lr, outpath_ssl, - mode="ssl", - FineTune_VICReg=args.FineTune_VICReg, + vicreg_encoder, ) # evaluate the ssl-based mlpf on both the QCD and TTbar samples @@ -172,10 +178,9 @@ ret_ssl = evaluate( device, - encoder, - decoder, + vicreg_encoder, mlpf_ssl, - args.batch_size_mlpf, + args.bs_mlpf, "ssl", outpath_ssl, {"QCD": data_test_qcd, "TTBar": data_test_ttbar}, @@ -187,10 +192,10 @@ "input_dim": input_, "embedding_dim": args.embedding_dim_mlpf, "width": args.width_mlpf, - "native_mlpf": True, "k": args.nearest, "num_convs": args.num_convs_mlpf, "dropout": args.dropout_mlpf, + "ssl": False, } mlpf_native = MLPF(**mlpf_model_kwargs).to(device) @@ -205,7 +210,6 @@ training_loop_mlpf( device, - encoder, mlpf_native, train_loader, valid_loader, @@ -213,8 +217,6 @@ args.patience, args.lr, outpath_native, - mode="native", - FineTune_VICReg=False, ) # evaluate the native mlpf on both the QCD and TTbar samples @@ -223,18 +225,17 @@ ret_native = evaluate( device, - encoder, - decoder, + vicreg_encoder, mlpf_native, - args.batch_size_mlpf, + args.bs_mlpf, "native", outpath_native, {"QCD": data_test_qcd, "TTBar": data_test_ttbar}, ) - if args.ssl & args.native: - # plot multiplicity plot of both at the same time - if args.evaluate_mlpf: - from pyg_ssl.evaluate import make_multiplicity_plots_both + # if args.ssl & args.native: + # # plot multiplicity plot of both at the same time + # if args.evaluate_mlpf: + # from pyg_ssl.evaluate import make_multiplicity_plots_both - make_multiplicity_plots_both(ret_ssl, ret_native, outpath_ssl) + # make_multiplicity_plots_both(ret_ssl, ret_native, outpath_ssl)