{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "df569247", "metadata": {}, "outputs": [], "source": [ "import json\n", "import math\n", "import random\n", "import os\n", "import pickle as pkl\n", "import time\n", "from typing import Dict, List\n", "\n", "import awkward as ak\n", "import fastjet\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import mplhep as hep\n", "import numpy as np\n", "import sklearn\n", "import sklearn.metrics\n", "import torch\n", "import tqdm\n", "import vector\n", "from torch_geometric.data import Batch, Data\n", "\n", "plt.style.use(hep.style.CMS)\n", "plt.rcParams.update({\"font.size\": 20})" ] }, { "cell_type": "code", "execution_count": 5, "id": "edf87dc8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 6, "id": "16ca6a3a", "metadata": {}, "outputs": [], "source": [ "# import relevant functions from mlpf.pyg\n", "import sys\n", "sys.path.append(\"/home/jovyan/particleflow/mlpf/\")\n", "import pyg\n", "sys.path.append(\"/home/jovyan/particleflow/mlpf/pyg/\")\n", "import utils\n", "\n", "from PFDataset import PFDataset, PFDataLoader, Collater\n", "\n", "from pyg.mlpf import MLPF\n", "from pyg.utils import X_FEATURES, Y_FEATURES, unpack_predictions\n", "from jet_utils import match_two_jet_collections\n", "\n", "#################################### must update this function to have the proper p4\n", "def unpack_target(y):\n", " ret = {}\n", " ret[\"cls_id\"] = y[..., 0].long()\n", " ret[\"charge\"] = torch.clamp((y[..., 1] + 1).to(dtype=torch.float32), 0, 2) # -1, 0, 1 -> 0, 1, 2\n", "\n", " for i, feat in enumerate(Y_FEATURES):\n", " if i >= 2: # skip the cls and charge as they are defined above\n", " ret[feat] = y[..., i].to(dtype=torch.float32)\n", " ret[\"phi\"] = torch.atan2(ret[\"sin_phi\"], ret[\"cos_phi\"])\n", "\n", " # do some sanity checks\n", " # assert torch.all(ret[\"pt\"] >= 0.0) # pt\n", " # assert torch.all(torch.abs(ret[\"sin_phi\"]) <= 1.0) # sin_phi\n", " # assert torch.all(torch.abs(ret[\"cos_phi\"]) <= 1.0) # cos_phi\n", " # assert torch.all(ret[\"energy\"] >= 0.0) # energy\n", "\n", " # note ~ momentum = [\"pt\", \"eta\", \"sin_phi\", \"cos_phi\", \"energy\"]\n", " ret[\"momentum\"] = y[..., 2:7].to(dtype=torch.float32)\n", " ret[\"p4\"] = torch.cat(\n", " [ret[\"pt\"].unsqueeze(-1), ret[\"eta\"].unsqueeze(-1), ret[\"phi\"].unsqueeze(-1), ret[\"energy\"].unsqueeze(-1)], axis=-1\n", " )\n", "\n", " ret[\"genjet_idx\"] = y[..., -1].long()\n", "\n", " return ret" ] }, { "cell_type": "code", "execution_count": 7, "id": "14875b0a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Will use NVIDIA A100-SXM4-80GB\n" ] } ], "source": [ "# define the global base device\n", "world_size = 1\n", "if torch.cuda.device_count():\n", " rank = 0\n", " device = torch.device(\"cuda:0\")\n", " print(f\"Will use {torch.cuda.get_device_name(device)}\")\n", "else:\n", " rank = \"cpu\"\n", " device = \"cpu\"\n", " print(\"Will use cpu\")" ] }, { "cell_type": "markdown", "id": "3c4aec55", "metadata": {}, "source": [ "# Load the pre-trained MLPF model" ] }, { "cell_type": "code", "execution_count": 8, "id": "1879def6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MLPF(\n", " (nn0): Sequential(\n", " (0): Linear(in_features=17, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=256, bias=True)\n", " )\n", " (conv_id): ModuleList(\n", " (0-2): 3 x SelfAttentionLayer(\n", " (mha): MultiheadAttention(\n", " (out_proj): NonDynamicallyQuantizableLinear(in_features=256, out_features=256, bias=True)\n", " )\n", " (norm0): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", " (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", " (seq): 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", " )\n", " (dropout): Dropout(p=0.0, inplace=False)\n", " )\n", " )\n", " (conv_reg): ModuleList(\n", " (0-2): 3 x SelfAttentionLayer(\n", " (mha): MultiheadAttention(\n", " (out_proj): NonDynamicallyQuantizableLinear(in_features=256, out_features=256, bias=True)\n", " )\n", " (norm0): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", " (norm1): LayerNorm((256,), eps=1e-05, elementwise_affine=True)\n", " (seq): 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", " )\n", " (dropout): Dropout(p=0.0, inplace=False)\n", " )\n", " )\n", " (nn_id): Sequential(\n", " (0): Linear(in_features=785, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=6, bias=True)\n", " )\n", " (nn_pt): RegressionOutput(\n", " (nn): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=2, bias=True)\n", " )\n", " )\n", " (nn_eta): RegressionOutput(\n", " (nn): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=2, bias=True)\n", " )\n", " )\n", " (nn_sin_phi): RegressionOutput(\n", " (nn): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=2, bias=True)\n", " )\n", " )\n", " (nn_cos_phi): RegressionOutput(\n", " (nn): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=2, bias=True)\n", " )\n", " )\n", " (nn_energy): RegressionOutput(\n", " (nn): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=2, bias=True)\n", " )\n", " )\n", " (nn_charge): Sequential(\n", " (0): Linear(in_features=791, 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.0, inplace=False)\n", " (4): Linear(in_features=256, out_features=3, bias=True)\n", " )\n", ")\n" ] } ], "source": [ "def load_checkpoint(checkpoint, model, optimizer=None):\n", " if isinstance(model, torch.nn.parallel.DistributedDataParallel):\n", " model.module.load_state_dict(checkpoint[\"model_state_dict\"])\n", " else:\n", " model.load_state_dict(checkpoint[\"model_state_dict\"])\n", " if optimizer:\n", " optimizer.load_state_dict(checkpoint[\"optimizer_state_dict\"])\n", " return model, optimizer\n", " else:\n", " return model\n", " \n", " \n", "loaddir = \"/pfvol/experiments/MLPF_clic_A100_1gpu_pyg-clic_20240322_233518_004447\"\n", "\n", "with open(f\"{loaddir}/model_kwargs.pkl\", \"rb\") as f:\n", " mlpf_kwargs = pkl.load(f)\n", "\n", "mlpf_kwargs[\"attention_type\"] = \"flash\"\n", "\n", "mlpf = MLPF(**mlpf_kwargs).to(torch.device(rank))\n", "checkpoint = torch.load(f\"{loaddir}/best_weights.pth\", map_location=torch.device(rank))\n", "\n", "mlpf = load_checkpoint(checkpoint, mlpf)\n", "mlpf.eval()\n", "\n", "print(mlpf) " ] }, { "cell_type": "markdown", "id": "dde5f191", "metadata": {}, "source": [ "# CLIC dataset" ] }, { "cell_type": "code", "execution_count": 9, "id": "d98c6857", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "clic_edm_qq_pf\t\t cms_pf_qcd_high_pt\t cms_pf_single_proton\r\n", "clic_edm_ttbar_pf\t cms_pf_single_electron cms_pf_single_tau\r\n", "clic_edm_ttbar_pu10_pf\t cms_pf_single_gamma\t cms_pf_sms_t1tttt\r\n", "clic_edm_ww_fullhad_pf\t cms_pf_single_mu\t cms_pf_ttbar\r\n", "clic_edm_zh_tautau_pf\t cms_pf_single_neutron cms_pf_ztt\r\n", "cms_pf_multi_particle_gun cms_pf_single_pi\t delphes_qcd_pf\r\n", "cms_pf_qcd\t\t cms_pf_single_pi0\t delphes_ttbar_pf\r\n" ] } ], "source": [ "! ls /pfvol/tensorflow_datasets/" ] }, { "cell_type": "code", "execution_count": 10, "id": "49d849e9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['type',\n", " 'pt | et',\n", " 'eta',\n", " 'sin_phi',\n", " 'cos_phi',\n", " 'p | energy',\n", " 'chi2 | position.x',\n", " 'ndf | position.y',\n", " 'dEdx | position.z',\n", " 'dEdxError | iTheta',\n", " 'radiusOfInnermostHit | energy_ecal',\n", " 'tanLambda | energy_hcal',\n", " 'D0 | energy_other',\n", " 'omega | num_hits',\n", " 'Z0 | sigma_x',\n", " 'time | sigma_y',\n", " 'Null | sigma_z']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# we can see the 17th features here (recall type is 1 for tracks and 2 for clusters)\n", "X_FEATURES[\"clic\"]" ] }, { "cell_type": "code", "execution_count": 11, "id": "b3781b28", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['cls_id', 'charge', 'pt', 'eta', 'sin_phi', 'cos_phi', 'energy']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# we can see the 8 gen features per pf element here (notice the jet_index which may be useful)\n", "Y_FEATURES" ] }, { "cell_type": "markdown", "id": "543e188a", "metadata": {}, "source": [ "# Load the dataset" ] }, { "cell_type": "code", "execution_count": 13, "id": "b92d8c4b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.2G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/0.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/10.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/11.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/12.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/13.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/14.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/15.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/16.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/17.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/18.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/19.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/1.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/20.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/21.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/22.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/23.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/24.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/25.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/26.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/27.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/28.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/29.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/2.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/30.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/31.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/32.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/33.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/3.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/4.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/5.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/6.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/7.pt\r\n", "1.8G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/8.pt\r\n", "1.7G\t/pfvol/jetdataset/clic_edm_ttbar_pf/train/9.pt\r\n" ] } ], "source": [ "! du -sh /pfvol/jetdataset/clic_edm_ttbar_pf/train/*" ] }, { "cell_type": "code", "execution_count": 14, "id": "1a97f4e5", "metadata": {}, "outputs": [], "source": [ "jet_dataset_train = torch.load(\"/pfvol/jetdataset/clic_edm_ttbar_pf/train/0.pt\")\n", "jet_dataset_test = torch.load(\"/pfvol/jetdataset/clic_edm_ttbar_pf/train/1.pt\")" ] }, { "cell_type": "markdown", "id": "09d976c1", "metadata": {}, "source": [ "# Build a DataLoader" ] }, { "cell_type": "code", "execution_count": 15, "id": "7b5708a8", "metadata": {}, "outputs": [], "source": [ "# Define your custom collate function to add a batch key\n", "def collate_fn(data_list):\n", " batch = Batch.from_data_list(data_list)\n", " \n", " batch_list = []\n", " for ijet, jet in enumerate(data_list):\n", " num_MLPFcands = len(jet[\"mlpfcands_momentum\"]) # number of MLPFcands\n", " batch_list += [ijet] * num_MLPFcands\n", "\n", " batch.batch = torch.tensor(batch_list)\n", " \n", " return batch" ] }, { "cell_type": "code", "execution_count": 16, "id": "f6ae14a4", "metadata": {}, "outputs": [], "source": [ "batch_size = 100\n", "\n", "train_list = torch.utils.data.DataLoader(jet_dataset_train[:1000], batch_size=batch_size, collate_fn=collate_fn)\n", "test_list = torch.utils.data.DataLoader(jet_dataset_test[:300], batch_size=batch_size, collate_fn=collate_fn)" ] }, { "cell_type": "code", "execution_count": 17, "id": "469b55e3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1000" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(train_list) * batch_size" ] }, { "cell_type": "code", "execution_count": 18, "id": "68b9bea6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "300" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(test_list) * batch_size" ] }, { "cell_type": "code", "execution_count": 19, "id": "b2c8511b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['reco_jet_energy',\n", " 'mlpfcands_charge',\n", " 'mlpfcands_momentum',\n", " 'gen_jet_phi',\n", " 'batch',\n", " 'reco_jet_eta',\n", " 'gen_jet_pt',\n", " 'gen_jet_eta',\n", " 'mlpfcands_pid',\n", " 'gen_jet_energy',\n", " 'reco_jet_phi',\n", " 'mlpfcands_latentX',\n", " 'gen_jet_label',\n", " 'reco_jet_pt']" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for batch in train_list:\n", " break\n", "batch.keys()" ] }, { "cell_type": "markdown", "id": "e9baced1", "metadata": {}, "source": [ "# Setup the downstream task" ] }, { "cell_type": "code", "execution_count": 20, "id": "89613a90", "metadata": {}, "outputs": [], "source": [ "import torch.nn as nn\n", "from torch_geometric.nn.pool import global_add_pool\n", "\n", "\n", "def ffn(input_dim, output_dim, width, act, dropout):\n", " return nn.Sequential(\n", " nn.Linear(input_dim, width),\n", " act(),\n", " torch.nn.LayerNorm(width),\n", " nn.Dropout(dropout),\n", " nn.Linear(width, output_dim),\n", " )\n", "\n", "class JetRegressor(nn.Module):\n", " def __init__(\n", " self,\n", " input_dim=14,\n", " embedding_dim=64,\n", " output_dim=1,\n", " width=256,\n", " dropout=0,\n", " ):\n", " super(JetRegressor, self).__init__()\n", "\n", " \"\"\"\n", " Takes as input either (1) the MLPF candidates OR (2) the latent representations of the MLPF candidates,\n", " and runs an MLP to predict an output per jet: \"ptcorr\"; which will enter the loss as follows:\n", " pred_jetpt = ptcorr * reco_pt\n", "\n", " LOSS = Huber(true_jetpt, pred_jetpt)\n", "\n", " \"\"\"\n", "\n", " self.act = nn.ELU\n", " self.nn1 = ffn(input_dim, embedding_dim, width, self.act, dropout)\n", " self.nn2 = ffn(embedding_dim, output_dim, width, self.act, dropout)\n", "\n", " # @torch.compile\n", " def forward(self, X, batch):\n", "\n", " embeddings = self.nn1(X)\n", " \n", "# pooled_embeddings = embeddings.sum(axis=1) # recall ~ [Batch, Particles, Features]\n", " \n", " pooled_embeddings = global_add_pool(embeddings, batch)\n", "\n", " return self.nn2(pooled_embeddings)" ] }, { "cell_type": "code", "execution_count": 21, "id": "2e2e9af7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JetRegressor(\n", " (nn1): Sequential(\n", " (0): Linear(in_features=791, 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, inplace=False)\n", " (4): Linear(in_features=256, out_features=64, bias=True)\n", " )\n", " (nn2): Sequential(\n", " (0): Linear(in_features=64, 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, inplace=False)\n", " (4): Linear(in_features=256, out_features=1, bias=True)\n", " )\n", ")" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_with_latentX = True\n", "\n", "if run_with_latentX:\n", " input_dim = 791\n", "else:\n", " input_dim = 14 \n", " \n", "model = JetRegressor(input_dim).to(rank)\n", "model.train()" ] }, { "cell_type": "code", "execution_count": 22, "id": "1143a728", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor(0.2826, device='cuda:0', grad_fn=)\n" ] } ], "source": [ "for batch in train_list:\n", "\n", " batch = batch.to(rank)\n", "\n", " if run_with_latentX:\n", " X = batch[\"mlpfcands_latentX\"]\n", " else:\n", " X = torch.cat([batch[\"mlpfcands_momentum\"], batch[\"mlpfcands_pid\"], batch[\"mlpfcands_charge\"]], axis=-1)\n", " \n", " ptcorr = model(X, batch.batch).squeeze(1)\n", " \n", " target = torch.log(batch[\"gen_jet_pt\"] / batch[\"reco_jet_pt\"])\n", "\n", " loss = torch.nn.functional.huber_loss(target, ptcorr)\n", " \n", " break\n", "print(loss)" ] }, { "cell_type": "markdown", "id": "b60e2d66", "metadata": {}, "source": [ "# Training" ] }, { "cell_type": "code", "execution_count": 23, "id": "66f65317", "metadata": {}, "outputs": [], "source": [ "optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)" ] }, { "cell_type": "code", "execution_count": 24, "id": "0f7325ed", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.29it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0: train_loss=0.0824 - valid_loss=0.0148\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.91it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1: train_loss=0.0206 - valid_loss=0.0070\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.25it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2: train_loss=0.0109 - valid_loss=0.0066\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.63it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3: train_loss=0.0080 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.53it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.36it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4: train_loss=0.0065 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.85it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5: train_loss=0.0058 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.43it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.24it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6: train_loss=0.0054 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.11it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7: train_loss=0.0052 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.44it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.29it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8: train_loss=0.0050 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.08it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.30it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9: train_loss=0.0048 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.18it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.90it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10: train_loss=0.0047 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.01it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.12it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 11: train_loss=0.0046 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.02it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 12: train_loss=0.0045 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.47it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.01it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 13: train_loss=0.0044 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.40it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.82it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 14: train_loss=0.0043 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.62it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.42it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 15: train_loss=0.0042 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.05it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 16: train_loss=0.0041 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.09it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.83it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 17: train_loss=0.0040 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.11it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.59it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 18: train_loss=0.0040 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.19it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 19: train_loss=0.0039 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.03it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.16it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 20: train_loss=0.0039 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.32it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 21: train_loss=0.0038 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 2.57it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.07it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 22: train_loss=0.0038 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.56it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 23: train_loss=0.0037 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.90it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.00it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 24: train_loss=0.0037 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.99it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 25: train_loss=0.0036 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.57it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 26: train_loss=0.0036 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.72it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.27it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 27: train_loss=0.0035 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.39it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.92it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 28: train_loss=0.0035 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.61it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 29: train_loss=0.0035 - valid_loss=0.0042\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.04it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.50it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 30: train_loss=0.0034 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.12it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.37it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 31: train_loss=0.0034 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.91it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.97it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 32: train_loss=0.0034 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.07it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 33: train_loss=0.0033 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.12it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.88it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 34: train_loss=0.0033 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.36it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.31it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 35: train_loss=0.0033 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 3.12it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 36: train_loss=0.0032 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.19it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 37: train_loss=0.0032 - valid_loss=0.0043\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.73it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.70it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 38: train_loss=0.0032 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 2.94it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.16it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 39: train_loss=0.0031 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.56it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.64it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 40: train_loss=0.0031 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.17it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.83it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 41: train_loss=0.0031 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.02it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 42: train_loss=0.0031 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.39it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 43: train_loss=0.0030 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.61it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.76it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 44: train_loss=0.0030 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.64it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.46it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 45: train_loss=0.0030 - valid_loss=0.0044\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.03it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.95it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 46: train_loss=0.0029 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.41it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.28it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 47: train_loss=0.0029 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.59it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.55it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 48: train_loss=0.0029 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.35it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.45it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 49: train_loss=0.0028 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.46it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.50it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 50: train_loss=0.0028 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.02it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.90it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 51: train_loss=0.0028 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.24it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 52: train_loss=0.0028 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.11it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.43it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 53: train_loss=0.0027 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.36it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.41it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 54: train_loss=0.0027 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.18it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 55: train_loss=0.0027 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.62it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.43it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 56: train_loss=0.0026 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.32it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.72it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 57: train_loss=0.0026 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.21it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.01it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 58: train_loss=0.0026 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.25it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 59: train_loss=0.0026 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.10it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 60: train_loss=0.0025 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.17it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.98it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 61: train_loss=0.0025 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.02it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.51it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 62: train_loss=0.0025 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.09it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.00it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 63: train_loss=0.0025 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.99it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 1.59it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 64: train_loss=0.0024 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 2.95it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.31it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 65: train_loss=0.0024 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:03<00:00, 2.95it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.04it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 66: train_loss=0.0024 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.57it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.85it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 67: train_loss=0.0024 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.98it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.46it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 68: train_loss=0.0023 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 16.68it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 69: train_loss=0.0023 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.22it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 70: train_loss=0.0023 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.26it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 71: train_loss=0.0023 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.43it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.64it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 72: train_loss=0.0023 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.52it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.90it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 73: train_loss=0.0022 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.25it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 74: train_loss=0.0022 - valid_loss=0.0045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.72it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.54it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 75: train_loss=0.0022 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.13it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.89it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 76: train_loss=0.0022 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.26it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.66it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 77: train_loss=0.0021 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.56it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:01<00:00, 2.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 78: train_loss=0.0021 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.66it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.43it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 79: train_loss=0.0021 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.87it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.61it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 80: train_loss=0.0021 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.23it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.72it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 81: train_loss=0.0021 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.36it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.45it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 82: train_loss=0.0020 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.69it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 83: train_loss=0.0020 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.68it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.53it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 84: train_loss=0.0020 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.73it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 85: train_loss=0.0020 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.30it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 86: train_loss=0.0020 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.10it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 27.57it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 87: train_loss=0.0019 - valid_loss=0.0046\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.07it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.29it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 88: train_loss=0.0019 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.70it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 89: train_loss=0.0019 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.85it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 90: train_loss=0.0019 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.28it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.54it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 91: train_loss=0.0019 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.39it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.53it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 92: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.24it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.62it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 93: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.35it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.27it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 94: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.31it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.97it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 95: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.67it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.39it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 96: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.15it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 97: train_loss=0.0018 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.18it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.80it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 98: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.62it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 99: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.55it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.39it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 100: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.59it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.24it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 101: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.11it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 102: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.29it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.62it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 103: train_loss=0.0017 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.70it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 104: train_loss=0.0016 - valid_loss=0.0047\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.07it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 105: train_loss=0.0016 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.53it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.46it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 106: train_loss=0.0016 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.20it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 107: train_loss=0.0016 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.16it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.16it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 108: train_loss=0.0016 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.43it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.66it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 109: train_loss=0.0016 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 16.31it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.85it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 110: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.98it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.29it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 111: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.92it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.42it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 112: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.48it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.35it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 113: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.06it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.90it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 114: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.29it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 115: train_loss=0.0015 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.94it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 116: train_loss=0.0014 - valid_loss=0.0048\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.01it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.36it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 117: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.68it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.74it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 118: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.04it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.45it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 119: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.02it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.13it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 120: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.27it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.75it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 121: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.28it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 16.49it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 122: train_loss=0.0014 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.30it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.54it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 123: train_loss=0.0013 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.09it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.81it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 124: train_loss=0.0013 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 3.86it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.04it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 125: train_loss=0.0013 - valid_loss=0.0049\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.53it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.99it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 126: train_loss=0.0013 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 5.00it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.69it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 127: train_loss=0.0013 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.96it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.71it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 128: train_loss=0.0013 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.23it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 27.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 129: train_loss=0.0013 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.12it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.67it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 130: train_loss=0.0013 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.11it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.54it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 131: train_loss=0.0012 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.44it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.40it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 132: train_loss=0.0012 - valid_loss=0.0050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.26it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.98it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 133: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.55it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 25.17it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 134: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.01it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.72it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 135: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.05it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 136: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.62it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.73it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 137: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.61it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 138: train_loss=0.0012 - valid_loss=0.0051\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.41it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.43it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 139: train_loss=0.0012 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.40it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 140: train_loss=0.0011 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 16.77it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 141: train_loss=0.0011 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.25it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.74it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 142: train_loss=0.0011 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 16.88it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.32it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 143: train_loss=0.0011 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.61it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 144: train_loss=0.0011 - valid_loss=0.0052\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.04it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.04it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 145: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 6.67it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 146: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.56it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.49it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 147: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.69it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.68it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 148: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 11.15it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.82it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 149: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.70it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.28it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 150: train_loss=0.0011 - valid_loss=0.0053\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.87it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.24it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 151: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 14.12it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.87it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 152: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 10.03it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 9.94it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 153: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.44it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.70it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 154: train_loss=0.0010 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.37it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.08it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 155: train_loss=0.0010 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.34it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.25it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 156: train_loss=0.0010 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:02<00:00, 4.98it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.08it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 157: train_loss=0.0010 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.73it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.14it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 158: train_loss=0.0010 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.29it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 6.05it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 159: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.92it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.98it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 160: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 8.33it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 5.09it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 161: train_loss=0.0011 - valid_loss=0.0054\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.26it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 3.02it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 162: train_loss=0.0011 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.91it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 26.33it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 163: train_loss=0.0011 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.59it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 10.14it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 164: train_loss=0.0011 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.05it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 165: train_loss=0.0011 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 7.63it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 13.81it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 166: train_loss=0.0012 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.51it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 4.25it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 167: train_loss=0.0012 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.54it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 15.08it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 168: train_loss=0.0013 - valid_loss=0.0055\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 5.88it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 14.20it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 169: train_loss=0.0014 - valid_loss=0.0056\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:01<00:00, 9.97it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 7.47it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 170: train_loss=0.0015 - valid_loss=0.0057\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:00<00:00, 12.52it/s]\n", "100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 28.72it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 171: train_loss=0.0016 - valid_loss=0.0060\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ " 50%|█████████████████████████████████████████████████▌ | 5/10 [00:00<00:00, 17.52it/s]\n", "\n", "KeyboardInterrupt\n", "\n" ] } ], "source": [ "# run training\n", "num_epochs = 500\n", "\n", "losses = {}\n", "losses[\"train\"], losses[\"valid\"] = [], []\n", "for epoch in range(num_epochs):\n", " \n", " ############################# train \n", " model.train() \n", "\n", " losses_t = 0\n", " for i, batch in enumerate(tqdm.tqdm(train_list)):\n", " \n", " batch = batch.to(rank)\n", " \n", " if run_with_latentX:\n", " X = batch[\"mlpfcands_latentX\"]\n", " else:\n", " X = torch.cat([batch[\"mlpfcands_momentum\"], batch[\"mlpfcands_pid\"], batch[\"mlpfcands_charge\"]], axis=-1)\n", "\n", " ptcorr = model(X, batch.batch).squeeze(1)\n", "\n", " target = torch.log(batch[\"gen_jet_pt\"] / batch[\"reco_jet_pt\"])\n", "# target = batch[\"gen_jet_pt\"]\n", "\n", " loss = torch.nn.functional.huber_loss(target, ptcorr)\n", "\n", " for param in model.parameters():\n", " param.grad = None \n", " loss.backward()\n", " optimizer.step()\n", " \n", " losses_t += loss\n", "\n", " train_loss = losses_t.detach().cpu().item() / len(train_list)\n", " \n", " losses[\"train\"] += [train_loss]\n", "\n", " ############################# eval\n", " model.eval() \n", "\n", " losses_v = 0\n", " for i, batch in enumerate(tqdm.tqdm(test_list)):\n", " batch = batch.to(rank)\n", " \n", " if run_with_latentX:\n", " X = batch[\"mlpfcands_latentX\"]\n", " else:\n", " X = torch.cat([batch[\"mlpfcands_momentum\"], batch[\"mlpfcands_pid\"], batch[\"mlpfcands_charge\"]], axis=-1)\n", "\n", " with torch.no_grad(): \n", " ptcorr = model(X, batch.batch).squeeze(1)\n", "\n", " target = torch.log(batch[\"gen_jet_pt\"] / batch[\"reco_jet_pt\"])\n", "# target = batch[\"gen_jet_pt\"]\n", "\n", " with torch.no_grad(): \n", " loss = torch.nn.functional.huber_loss(target, ptcorr)\n", "\n", " losses_v += loss\n", "\n", " valid_loss = losses_v.detach().cpu().item() / len(test_list)\n", " \n", " losses[\"valid\"] += [valid_loss]\n", " \n", " print(f\"Epoch {epoch}: train_loss={train_loss:.4f} - valid_loss={valid_loss:.4f}\")" ] }, { "cell_type": "code", "execution_count": 25, "id": "22287681", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 1, 'Loss')" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAukAAAK6CAYAAACE3sJSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACdgUlEQVR4nOzdd3zV5d3/8dd1TiYJGRDIDnskyFYZVsEBjmq1ddBaW3FgR/rrQL1buxTtXau9a2vbtL1be1dbW61WWxwVqYqgEJAtkrAhIQkJIyGMQNa5fn98cw7EhOyck5O8n49HHgnnu64co75z8bk+l7HWWkREREREpMdwBXoAIiIiIiLSmEK6iIiIiEgPo5AuIiIiItLDKKSLiIiIiPQwCukiIiIiIj2MQrqIiIiISA+jkC4iIiIi0sOEBHoAcm5RUVGcPn0at9vN4MGDAz0cEREREfmYgwcPUl9fT0REBCdPnuyy+xptZtRzud1uPB5PoIchIiIiIq1wuVzU19d32f00k96DeUO6y+UiOTm5TdeUlZWRmJjYoedZaykpKSElJQVjTIfu0dkx9KR7dPb6nvJ+9oT3srP36CnvZVfcoyeMoSvez57wfXTFPXrCe9kV4+gJ72Vn79FT3suuuEdPGIP+Pe+661t7Lw8cOIDH48Htdnf4Ged6sPRQqampFrCpqaltviYzM7PDz6usrLSArays7PA9OjuGnnSPzl7fU97PnvBedvYePeW97Ip79IQxdMX72RO+j664R094L7tiHD3hvezsPXrKe9kV9+gJY9C/5113fWvvZUfyWlto4aiIiIiISA+jkC4iIiIi0sP4pSZ93bp1bNu2jTFjxjBlypSur9kREREREelFumwm/dlnn+XOO+/kjTfeaPT6bbfdxrRp07j99tuZPn06Y8eOZdeuXV31WBERERGRXqdLZtJvuukm/vnPfwJw8cUX+17/wx/+wN/+9rdG5+7evZtZs2axe/duIiIiuuLxIiIiIiK9Sqdn0l988UVefvllrLWMHTuWYcOG+Y79+te/xhjDzTffTEVFBW+//Tbx8fGUlpbypz/9qbOPlmZkZ2cHeghdMoaecI+e8F5Cz/g+eso9esIYess/j54whp5wj57wXkLP+D56yj16whh6yz+PnjCGnnCPnvBedkSnNzOaM2cOb7/9NjfccAP/+Mc/cLmc3L9nzx5GjhyJMYZ9+/aRnp4OwKOPPsr3vvc9LrvsMt56663Ofwe9WFpaGsXFxaSmplJUVNTtzzt27BixsbFUVlYSExPT7c/r7fR+dh29l11L72fX0XvZdfRedi29n12ntfeyu/Jap2fSd+/ejTGGr371q76ADvDuu+8CMG7cOF9AB7j00ksB2LdvX2cfLSIiIiLSK3U6pJeWlgKQmpra6PX33nsPY0yjGnWAuLg4AEpKSjr7aBERERGRXqnTId07S37gwIFGr3tLWWbPnt3o9SNHjgAwYMCAzj5aRERERKRX6nRIHzlyJOC0YPT6z3/+Q3FxMaGhoVx11VWNzv/Xv/4FOPU7IiIiIiLSVKdbMN5zzz288cYbPPPMM5w+fZpx48bxq1/9CmMMc+fOpX///oBTu/7MM8/w85//HGMMl19+eacHLyIiIiLSG3U6pF9//fXMnTuXpUuX8ve//x0Aay2hoaH85Cc/8Z13xx13sHLlSqy1REdHs3Dhws4+WkRERESkV+qSHUdff/11vve973HeeecRFRXF+eefz5tvvklWVpbvHGst1lrGjRvHqlWrGDhwYFc8WkRERESk1+mSHUfdbjePPPIIjzzyyDnP+fWvf83gwYNJTk7uikdKNwgPD+fBBx8kPDw80EPpFfR+dh29l11L72fX0XvZdfRedi29n10nUO9lpzczku7j782MRERERKR9uiuvdclMekuqqqr4zW9+w7Zt2xgzZgzXXnstmZmZ3f1YEREREZGg1SU16ZWVldx9990MHz6cP/3pT77XT548yZQpU/j2t7/Nn/70J77zne8wdepUXn755a54rIiIiIhIr9TpmfSqqiqmTp3K3r17mxz70Y9+xI4dOwCYOHEi+/bto7Kyks9//vPs3buXpKSkzj5eRERERKTX6fRM+q9//Wv27NkDwIIFC5g5c6bv2F/+8heMMfzoRz9i48aN7N27l8zMTGpqavjVr37V2UeLiIiIiPRKnQ7pixcvxhjDf/3Xf/G73/2OMWPGALBu3TpKSkoIDQ3l//2//wdAXFwc9957L9Za3n333c4+WkRERESkV+p0SPeWuXzqU59q9Pp7770HwAUXXODbdRRg0qRJABQUFHT20SIiIiIivVKna9KPHz8OQExMTKPXV6xYgTGGiy++uNHrERERAJSXl3f20X1GWVlZo42hzpadnU12drafRyQiIiJ92aJFi4iLi+Mb3/hGtz3jjjvu4Omnn2b27NksW7as257TFjk5OeTk5DR7rKysrFue2emQPnz4cD766CN27NjBuHHjAKirq/O9mVdccUWj8/fv3w+gTY3aITExkby8vEAPQ0RERASAhx56iKFDh3ZrSO9JWpoU9fZJ72qdLneZMGEC1lp+8YtfUFtbC8Bvf/tbjh07RkxMDLNmzWp0/m9/+1sA0tPTO/to6WJ/fd/DXb+r558feAI9FBEREenjkpOTGTt2LBkZGYEeSkB0OqQvXLgQgPfff5/Ro0czZ84cFi5ciDGGW2+9FbfbDcA//vEPZs+ezauvvooxhs997nOdfbR0sdp6OFkNp2sDPRIRERHp63784x+Tn5/PM888E+ihBESnQ/rkyZNZtGgR4CwGffvtt6mvrycpKYlHHnnEd94vf/lLVqxYgbWWzMxM7rzzzs4+WrqYu+GnoV4T6SIiItKMO+64A2MMAPv27cMYw7BhwwAwxnD11Vfj8Xh46KGHSEpKYvLkyY2uf+WVV7jiiitIT08nIiKCIUOGcM0117BkyZImz3rmmWcwxvhyJsDy5csxxvDf//3f1NbWsmjRIkaOHElkZCRjx47lO9/5jm+9ZLDrdE06wA9+8ANmzpzJK6+8wt69exk7diz3338/AwYM8J3jcrkYNWoUc+fO5bHHHiM0NLQrHi1dKEQhXURERFowePBgRo4cya5duwgJCWHo0KGkpqY2OudLX/oSTz31FACZmZm+13/2s59x3333ARAZGcmgQYMoKyujsLCQN954g2eeeYYvfvGLbRqHx+Ph05/+NK+//jrR0dGEhoayfft2HnvsMTZu3MiSJUt8v0wEqy4J6QCXX345l19++TmPv/POO7hcnZ64l27knUmvqw/sOERERIKVtZbqukCPoqnwELoktD722GM89thjGGNIS0tj586djY6vXLmS+vp6fvnLX3L77bf7uv+dOnWKBx54AGMM//u//8udd96J2+2murqan/3sZ3zve9/jpz/9aZtD+lNPPcWJEyd49dVXufrqq3G73Tz33HN84QtfYOnSpWzevNnX9jtYdVlIb40Ces+nchcREZHOqa6D+b/pef8jffqrLiL8UMRw/PhxfvrTn/o2svTaunUrtbW1XHHFFSxYsMD3enh4ON/97nd54oknyM/Pb/NzCgsLWbx4Mddee63vtc997nP885//5MUXXyQvL08h/eM++OAD8vPz2bVrF/v37yc5OZlRo0aRmZnJjBkzuvpx0oVCnDW+1PW8/7aIiIhIkLjrrruavDZ16lTq6uqanc2vrq6mvr6e+vq2/1X+sGHDmmykCTB27FgAX8fBYNZlIX316tX813/9FytXrjznOTNnzuSJJ57gggsu6KrHShdSTbqIiEjnhIc4s9Y9Tbifaif69+9PfHx8k9eNMb6Of0ePHiUvL4/du3ezbds2Xn31VY4ePdqu55xrk0fvM3qDLvlH9sILL/haKlprcbvdpKSkkJKSQllZGfv376e+vp6VK1cyffp0XnjhBW688caueLR0IZW7iIiIdI4xxi9lJT3V2U1DPu6dd97hhz/8Ibm5uXg8Tthwu92cf/75REdHc+LEiTY/JyEhodNj7ek6/atecXExX/7yl7HWkp6ezu9+9ztOnjxJQUEBubm57Nmzh6qqKv73f/+X9PR0rLV8+ctf5sCBA10xfulCZ0K6DexAREREJCida3Hq22+/zdy5c/nggw/44he/yN/+9jc++ugjTpw4werVq9sduoO9c0tbdHom/YknnuDo0aMMGjSI9957r9mdRENDQ1mwYAFz587l/PPPp7y8nCeeeIKf/vSnnX28dCF1dxEREZHu8Pjjj1NfX89vf/vbRgtHwanC6C29zbtSp2fSN2/ejDGG7373u80G9LMNGTKEBx54AGstGzdu7OyjpYt5F46q3EVERES60v79+wE4//zzmxx79913OXLkiL+H1ON1OqR/+OGHAEybNq1N53s7vHivk55DNekiIiLSVocOHaKurm1N4UePHg1ATk4Op06dApwOLH/5y1+46aabfOdt37696wcapDod0qurqwF8b3hrTp8+DTh9MaVncbuc+i61YBQREZGWJCUlcfLkSYYPH84111zT6vn33XcfbrebP/7xjwwcOJD09HT69evHF7/4RS677DJuvvlmAM477zwefvjh7h5+UOh0SB8yZAgA7733XpvOX7FiBQATJkzo7KOli6kFo4iIiLTFb37zG4YNG8ahQ4c4duxYq+d/4hOf4O233+byyy8nOjqampoarrrqKp5++mlefPFFfv7znzNlyhQiIyNJSkryw3fQ8xlrbadaeTzwwAM89thjREZG8t577zFlypRznrt+/Xouvvhiqqur+cEP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aNGiQA+jiaAK6V7n+o3F2w+zvg078Xjv0RX3aovOPCclJYX8/PwOP7uts+igzYxERESkb3nggQdYuHBhh6/PzMxs8yaY7RFUIb1fv35UVlZSUVFBdHR0k+Pe2eioqKhW7+U9p6Kiotnj7blXS7pizMYYYmJiOjWOtlJNuoiIiPQl7SkLbo4xpgtHc0ZQdXdJSEgA4OjRo80e927/6j3PX/fqCc/pKiHq7iIiIiIScEEV0keNGgXAjh07mj2+devWRuf561494TldRQtHRURERAIvqEL6jBkzAFi6dGmzx998800Apk+f7td79YTndJUz5S7ds1JZRERERFoXVCH9uuuuA2Dx4sWUl5c3OrZq1Sp27txJQkICM2fObPVeM2bMICEhgR07drBq1apGx8rLy3n11VcBuP7663vMmP1BM+kiIiIigRdUIX3y5MnMmTOHsrIybr31VoqKirDWsn79em655RYAFi5cSGhoqO+akpISMjMzyczMZO3atb7XQ0ND+da3vgXAvHnz2LBhAwAFBQXMmzeP0tJS5s6dy6RJk/w+5kDytmCsU3cXERERkYAJqu4uAE899RTTpk3jzTffJD09nbi4ON+izEsvvZT777+/0fm1tbVs27YNaNqL/P7772fp0qUsX76cqVOnEh8f7+v2kpyczFNPPRWQMQeSWwtHRURERAIuqGbSATIyMtiwYQN33303ycnJnDp1itGjR/Pwww+zZMkSQkLa/ntHaGgoS5cuZdGiRYwaNYqqqiqSk5NZsGABGzZsID09vceNubup3EVEREQk8Iztrr1MpdPS0tIoLi4mNTWVoqIivzzzg12WJ173MCoZHrnF7ZdnioiIiASr7sprQTeTLt1LO46KiIiIBJ5CujSizYxEREREAk8hXRpRTbqIiIhI4CmkSyNnNjMK7DhERERE+jKFdGkkRDPpIiIiIgGnkC6NqNxFREREJPAU0qURdXcRERERCTyFdGnE291FNekiIiIigaOQLo2o3EVEREQk8BTSpRGFdBEREZHAU0iXRtSCUURERCTwFNKlEW8LRmvB47GBHYyIiIhIH6WQLo243We+1my6iIiISGAopEsjIWf9RKguXURERCQwFNKlEbdCuoiIiEjAKaRLI2eH9DptaCQiIiISEArp0ogxRm0YRURERAJMIV2aUEgXERERCayQQA9AWldWVkZWVlazx7Kzs8nOzu7S56lXuoiIiMgZOTk55OTkNHusrKysW56pkB4EEhMTycvL89vzQjSTLiIiIuLT0qRoWloaxcXFXf5MlbtIEyp3EREREQkshXRpwhfS1d1FREREJCAU0qUJ766jqkkXERERCQyFdGlCNekiIiIigaWQLk2oJl1EREQksBTSpQlfC0bVpIuIiIgEhEK6NKGZdBEREZHAUkiXJkK0mZGIiIhIQCmkSxMhDd1d6j02sAMRERER6aMU0qUJlbuIiIiIBJZCujShhaMiIiIigaWQLk2cKXcJ7DhERERE+iqFdGnC7TKAQrqIiIhIoCikSxOqSRcREREJLIV0acKtFowiIiIiAaWQLk2EaCZdREREJKAU0qUJX7mLuruIiIiIBIRCujThbujuonIXERERkcBQSJcmtHBUREREJLAU0qWJEC0cFREREQkohXRpQjXpIiIiIoGlkC5NqNxFREREJLAU0qWJEC0cFREREQkohXRpQn3SRURERAJLIV2aULmLiIiISGAppEsTZ0K6DexARERERPqokEAPQFpXVlZGVlZWs8eys7PJzs7u0ud5Q3qduruIiIiIkJOTQ05OTrPHysrKuuWZCulBIDExkby8PL89z7twVOUuIiIiIi1PiqalpVFcXNzlz1S5izShmnQRERGRwFJIlybcLgOoBaOIiIhIoCikSxNqwSgiIiISWArp0oTKXUREREQCSyFdmvCFdHV3EREREQkIhXRpwt3Q3UU16SIiIiKBoZAuTXhr0hXSRURERAJDIV2aULmLiIiISGAppEsTWjgqIiIiElgK6dKEdhwVERERCSyFdGnCrZp0ERERkYBSSJcmtJmRiIiISGAppEsTqkkXERERCSyFdGni7JBurQ3sYERERET6IIV0acK7cBQ0my4iIiISCArp0oT7rJ8KhXQRERER/1NIlyYU0kVEREQCSyFdmgg566dCbRhFRERE/E8hXZpwuQym4WvNpIuIiIj4n0K6NMvt3XW0PrDjEBEREemLFNKlWdp1VERERCRwFNKlWdp1VERERCRwFNKlWb6ZdJW7iIiIiPidQro0y7uhkWbSRURERPxPIV2a5Va5i4iIiEjAKKRLs7RwVERERCRwQgI9AGldWVkZWVlZzR7Lzs4mOzu7y5+phaMiIiIijpycHHJycpo9VlZW1i3PVEgPAomJieTl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wGAwAIBlFZnY2FiX56yEb05lkU5EREREHnPlypVq2wsLCwFUFeRNmjSxLG1obnPEfF14kyZNLNePmy9TKS4udn3SCsAinYiIiIg85uzZs9W25+TkADBdnw4AarUaLVu2rFVf82Uud1+eYv75/Pnz1fY9cOAAMjMz8eOPP1a7n7ewSCciIiIij1m/fj0qKyvttp07dw6ff/45AOtrxNu1awcASE9Px+3bt+32LSkpQWZmptX+d49TWFiI//3vf3b7GgwGDB8+HCNHjsTu3budPKK6wSKdiIiIiDzm7NmzWLhwoc12nU6Hl156CXfu3IGfnx9efvllS9trr70GwFRoz54926avwWDAa6+9huvXr0Oj0Vh9KdHQoUMtN6vOnDkT5eXlNv1XrlxpuRwmJSXlvo7PU7i6CxERERE5lJub6/BMuD2tWrWy+rtarcb//d//4fjx4xgzZgyaN2+OI0eO4C9/+QuOHj0KAJg2bZplpRYAePjhhzFq1Chs27YNixYtQk5ODsaPH4/ExEScOHECH3/8seVLh6ZMmYIOHTpY+vr4+GDRokUYMWIEDh48iJ49e+L1119H165dcevWLWRmZmLZsmUAgPHjxyM5OdnV0HgUi3QiIiIicmjAgAFO7X/vl9l/8MEHmD9/PjIyMux+Q+fUqVOxYMECm+1r1qyBj48PPv30U2RmZloubbm37/vvv2+zffjw4Vi1ahWmT5+OU6dOYcqUKTb79O3bFx999JEzh1aneLkLEREREXlM165dkZ2djT/+8Y9ISEiAv78/IiMjkZKSgn/9619YuXIlAgICbPpFRERg8+bNSE9Px7hx49ChQwdotVp06dIFqamp2LFjB1auXAmtVmv3906ZMgWHDx/Gs88+i2bNmsHf3x/x8fEYMmQIPvnkE+zbtw8hISGePnyXqeTejztERERERPfJ/EVCu3btwqOPPurl2dQ/PJNORERERKQwLNKJiIiIiBSGRToRERERkcKwSCciIiIiUhgW6URERERECsN10omIiIjI7biA4P3hmXQiIiIiIoVhkU5EREREpDAs0omIiIiIFIZFOhERERGRwrBIJyIiIiJSGBbpREREREQKwyKdiIiIiEhhWKQTERERESnM/wOwiVkaSAzedQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(8,8))\n", "\n", "ax.plot(losses[\"train\"][2:], label=\"train\")\n", "ax.plot(losses[\"valid\"][2:], label=\"valid\")\n", "\n", "ax.legend()\n", "ax.set_xlabel(\"Epoch\")\n", "ax.set_ylabel(\"Loss\")" ] }, { "cell_type": "code", "execution_count": null, "id": "e8c088a6", "metadata": {}, "outputs": [], "source": [ "# run training\n", "num_epochs = 500\n", "\n", "losses = {}\n", "losses[\"train\"], losses[\"valid\"] = [], []\n", "for epoch in range(num_epochs):\n", "\n", " ############################# eval\n", " model.eval() \n", "\n", " losses_v = 0\n", " for i, batch in enumerate(tqdm.tqdm(test_list)):\n", " batch = batch.to(rank)\n", " \n", " if run_with_latentX:\n", " X = batch[\"mlpfcands_latentX\"]\n", " else:\n", " X = torch.cat([batch[\"mlpfcands_momentum\"], batch[\"mlpfcands_pid\"], batch[\"mlpfcands_charge\"]], axis=-1)\n", "\n", " with torch.no_grad(): \n", " ptcorr = model(X, batch.batch).squeeze(1)\n", "\n", " target = torch.log(batch[\"gen_jet_pt\"] / batch[\"reco_jet_pt\"])\n", "# target = batch[\"gen_jet_pt\"]\n", "\n", " with torch.no_grad(): \n", " loss = torch.nn.functional.huber_loss(target, ptcorr)\n", "\n", " losses_v += loss\n", "\n", " valid_loss = losses_v.detach().cpu().item() / len(test_list)\n", " \n", " losses[\"valid\"] += [valid_loss]\n", " \n", " print(f\"Epoch {epoch}: train_loss={train_loss:.4f} - valid_loss={valid_loss:.4f}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "e01a3f2c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 32, "id": "79131aa4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 17.1507, 79.3878, 47.8966, 57.6023, 86.3188, 96.6546, 39.9496,\n", " 100.8567, 41.5525, 43.4253, 103.1332, 28.1064, 50.3751, 44.6957,\n", " 35.5974, 17.7281, 29.4926, 64.4847, 70.6352, 29.8314, 41.1940,\n", " 43.1043, 47.1654, 69.8445, 42.2451, 95.4993, 83.6656, 122.0839,\n", " 44.3346, 52.9785, 55.0933, 31.2192, 68.6183, 66.5174, 50.1306,\n", " 43.3509, 63.7247, 59.1011, 56.5230, 58.3527, 38.8795, 73.9918,\n", " 24.3210, 104.5304, 67.1446, 35.0238, 49.4356, 31.9582, 29.9008,\n", " 23.6651, 66.7257, 63.7292, 37.6293, 23.7886, 64.4540, 31.9778,\n", " 88.7153, 46.6671, 31.2063, 51.5697, 104.2345, 20.8037, 85.9316,\n", " 94.5863, 26.0373, 61.2378, 42.2324, 81.6671, 45.6461, 89.1322,\n", " 47.6147, 61.5233, 42.9962, 84.6362, 41.0061, 63.6443, 66.4212,\n", " 64.0645, 23.0270, 43.5801, 92.3185, 28.9112, 40.9956, 63.0638,\n", " 62.0721, 59.2450, 18.7583, 30.0468, 57.4143, 97.4097, 111.6310,\n", " 39.6286, 44.0037, 65.9218, 19.3189, 111.3116, 88.8005, 30.6598,\n", " 48.0808, 83.5792], device='cuda:0')" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "batch[\"gen_jet_pt\"]" ] }, { "cell_type": "code", "execution_count": 30, "id": "a822db32", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 17.6542, 78.7571, 47.5255, 60.7885, 88.8755, 91.8941, 41.0049,\n", " 100.3029, 39.5748, 43.5890, 93.7299, 29.4473, 54.1175, 48.0685,\n", " 35.7808, 18.1348, 31.0612, 61.6736, 70.4590, 31.0339, 36.1216,\n", " 41.3599, 48.9947, 70.1730, 50.8246, 92.6759, 88.3744, 114.2119,\n", " 44.6645, 42.9279, 60.9528, 32.1265, 70.9108, 60.4688, 48.7606,\n", " 42.5559, 67.9962, 54.9468, 55.3293, 51.8393, 39.2976, 69.0080,\n", " 23.3694, 103.1381, 63.4785, 35.8491, 54.0132, 30.5384, 29.0656,\n", " 22.0230, 63.4085, 69.3850, 38.1683, 22.0723, 69.4621, 29.0088,\n", " 82.5197, 42.4752, 31.6314, 53.7130, 89.8577, 16.5189, 86.7159,\n", " 93.9434, 28.7931, 62.2996, 39.6813, 83.9001, 41.5254, 91.7704,\n", " 45.3964, 64.5815, 40.8031, 77.2130, 42.7653, 61.8615, 60.4731,\n", " 56.2560, 24.4905, 46.3739, 90.2834, 28.8223, 38.7702, 65.9372,\n", " 64.1132, 60.4280, 20.9169, 29.8746, 57.8121, 88.1831, 117.2296,\n", " 36.9539, 40.0688, 70.5687, 18.6025, 95.0747, 79.4266, 31.8560,\n", " 48.2131, 75.1270], device='cuda:0', grad_fn=)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "batch[\"reco_jet_pt\"] * torch.exp(ptcorr)" ] }, { "cell_type": "code", "execution_count": 33, "id": "a4f3f743", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 17.5191, 79.5381, 46.7730, 55.5600, 83.8354, 95.5777, 34.5092,\n", " 97.6328, 40.5641, 43.9620, 99.2788, 28.6839, 57.8821, 46.8246,\n", " 34.7672, 16.9297, 29.9037, 61.8271, 63.8867, 30.2674, 40.7068,\n", " 41.5637, 47.7119, 68.9880, 58.4492, 96.1004, 82.8112, 119.4390,\n", " 43.6507, 48.2455, 53.9468, 30.8366, 69.7537, 67.5395, 50.1836,\n", " 43.5388, 63.5720, 59.6706, 56.4835, 58.7481, 39.3866, 75.2741,\n", " 24.3816, 100.5572, 64.3762, 44.3390, 54.6697, 29.9725, 30.0926,\n", " 19.7844, 66.1060, 63.1669, 39.2697, 24.4862, 79.7877, 31.7616,\n", " 88.6601, 42.3452, 32.2539, 51.4568, 106.1202, 15.9081, 86.2508,\n", " 93.2083, 26.1892, 60.5672, 43.2614, 80.6893, 45.1226, 82.9981,\n", " 48.8561, 64.7404, 41.0726, 85.1933, 41.7949, 59.6659, 66.0420,\n", " 60.5581, 23.4843, 46.7583, 83.7418, 28.4153, 43.1818, 60.2017,\n", " 63.7578, 97.3640, 29.4789, 30.1068, 56.6385, 82.9769, 104.1645,\n", " 38.3591, 41.7708, 86.1999, 18.2870, 95.0887, 82.5555, 29.3025,\n", " 48.8987, 80.5406], device='cuda:0')" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "batch[\"reco_jet_pt\"]" ] }, { "cell_type": "code", "execution_count": null, "id": "0f2cfc45", "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.12" } }, "nbformat": 4, "nbformat_minor": 5 }