diff --git a/DeepLense_Classification_Transformers_Archil_Srivastava/models/transformers/hybrid_swin.py b/DeepLense_Classification_Transformers_Archil_Srivastava/models/transformers/hybrid_swin.py index be94556..af8526f 100644 --- a/DeepLense_Classification_Transformers_Archil_Srivastava/models/transformers/hybrid_swin.py +++ b/DeepLense_Classification_Transformers_Archil_Srivastava/models/transformers/hybrid_swin.py @@ -10,7 +10,7 @@ import torch import torch.nn as nn import torch.utils.checkpoint as checkpoint -from timm.models.layers import DropPath, to_2tuple, trunc_normal_ +from timm.layers import DropPath, to_2tuple, trunc_normal_ class Mlp(nn.Module): diff --git a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin+pinn.ipynb b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin+pinn.ipynb index dc24bf8..5ba560f 100644 --- a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin+pinn.ipynb +++ b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin+pinn.ipynb @@ -1 +1,1470 @@ -{"cells":[{"cell_type":"markdown","source":[],"metadata":{"id":"X7Ekxmo1XV5I"}},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":304},"id":"_mFRKD8F__hl","executionInfo":{"status":"error","timestamp":1758136378041,"user_tz":300,"elapsed":121997,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}},"outputId":"5173fceb-5ee1-482e-e9b0-2ea2054f575b"},"execution_count":1,"outputs":[{"output_type":"error","ename":"ValueError","evalue":"mount failed","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)","\u001b[0;32m/tmp/ipython-input-1408506528.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mgoogle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdrive\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdrive\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmount\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/content/drive'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m/usr/local/lib/python3.12/dist-packages/google/colab/drive.py\u001b[0m in \u001b[0;36mmount\u001b[0;34m(mountpoint, force_remount, timeout_ms, readonly)\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmount\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmountpoint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mforce_remount\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout_ms\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m120000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreadonly\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[0;34m\"\"\"Mount your Google Drive at the specified mountpoint path.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 97\u001b[0;31m return _mount(\n\u001b[0m\u001b[1;32m 98\u001b[0m \u001b[0mmountpoint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0mforce_remount\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mforce_remount\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.12/dist-packages/google/colab/drive.py\u001b[0m in \u001b[0;36m_mount\u001b[0;34m(mountpoint, force_remount, timeout_ms, ephemeral, readonly)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[0;34m'https://research.google.com/colaboratory/faq.html#drive-timeout'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 271\u001b[0m )\n\u001b[0;32m--> 272\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'mount failed'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mextra_reason\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 273\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mcase\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;31m# Terminate the DriveFS binary before killing bash.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mValueError\u001b[0m: mount failed"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vRM2kxST8KJZ","executionInfo":{"status":"aborted","timestamp":1758136378439,"user_tz":300,"elapsed":409,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["\n","\n","\"\"\"Import dependencies\"\"\"\n","import os\n","import numpy as np\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import Dataset, DataLoader\n","from torchvision.models import resnet18\n","from sklearn.metrics import roc_curve, auc\n","import matplotlib.pyplot as plt"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9Dm6SC1o_txB","executionInfo":{"status":"aborted","timestamp":1758136378443,"user_tz":300,"elapsed":122615,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["\n","class MyDatasetViT(Dataset):\n"," def __init__(self, data_dir, transform=None):\n"," self.data = []\n"," self.labels = []\n"," self.class_names = ['axion', 'cdm', 'no_sub']\n"," self.transform = transform\n","\n"," print(f\"Loading dataset from: {data_dir}\")\n"," print(f\"Looking for classes: {self.class_names}\")\n","\n"," for idx, class_name in enumerate(self.class_names):\n"," class_dir = os.path.join(data_dir, class_name)\n"," print(f\"--- Processing class: {class_name} ---\")\n","\n"," if not os.path.exists(class_dir):\n"," print(f\"[ERROR] Directory not found: {class_dir}\")\n"," continue\n","\n"," files = os.listdir(class_dir)\n","\n"," for file_name in files:\n"," if file_name.endswith('.npy'):\n"," file_path = os.path.join(class_dir, file_name)\n"," loaded_data = np.load(file_path, allow_pickle=True)\n","\n"," if class_name == 'axion':\n"," image = loaded_data[0]\n"," else:\n"," image = loaded_data\n","\n"," # [DEBUG] Print the shape of the raw numpy array\n"," print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n","\n"," # Ensure the image is a 2D array (H, W) before adding channel dimension.\n"," if image.ndim != 2:\n"," image = np.squeeze(image)\n","\n"," # Convert to a float tensor and add a channel dimension -> [1, H, W]\n"," image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n","\n"," # [DEBUG] Print the shape of the final tensor being stored in the dataset\n"," print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n","\n"," self.data.append(image_tensor)\n"," self.labels.append(idx)\n","\n"," print(\"\\n--- Dataset Loading Complete ---\")\n"," print(f\"Total images loaded: {len(self.data)}\")\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," \"\"\"\n"," This method is called by the DataLoader to get one item from the dataset.\n"," The debug prints here are CRITICAL for finding the error.\n"," \"\"\"\n"," #print(f\"--- Getting item index: {idx} ---\")\n","\n"," # Retrieve the pre-loaded tensor and its label\n"," image = self.data[idx]\n"," label = self.labels[idx]\n","\n"," # [DEBUG] Print shape BEFORE the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n","\n"," # Apply transformations (e.g., resizing) if they are provided\n"," if self.transform:\n"," image = self.transform(image)\n"," # [DEBUG] Print shape AFTER the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n"," else:\n"," #print(\" [DEBUG] No transform was applied.\")\n"," pass\n","\n"," return image, label"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"VJEgowwT_txC","executionInfo":{"status":"aborted","timestamp":1758136378446,"user_tz":300,"elapsed":122608,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["\n","# Import the transforms module\n","from torchvision import transforms\n","# Hyperparameters\n","batch_size = 32\n","learning_rate = 0.001\n","num_epochs = 100\n","\n","# Data Directories\n","train_dir = '/content/drive/MyDrive/Model_V/Model_V'\n","#val_dir = '../dataset/dataset/val'\n","\n","print(f\"Training Directory: {train_dir}\")\n","#print(f\"Validation Directory: {val_dir}\")\n","\n","vit_transforms = transforms.Compose([\n"," # transforms.ToTensor(), # Removed ToTensor()\n"," transforms.RandomHorizontalFlip(p=0.5),\n"," transforms.RandomVerticalFlip(p=0.5),\n"," transforms.RandomRotation(degrees=90), # Can be any angle range\n","])\n","\n","# Create Datasets and Dataloaders\n","#train_dataset = MyDataset(train_dir)\n","#val_dataset = MyDataset(val_dir)\n","#dataset = MyDatasetViT(train_dir, vit_transforms)\n","#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n","\n","#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n","#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n","\n","#print(f\"Batch Size: {batch_size}\")\n","#print(f\"Number of Training Batches: {len(train_loader)}\")\n","#print(f\"Number of Validation Batches: {len(val_loader)}\")\n","\n","#Save the dataloader so that we don't have to bear with this pain again\n","#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n","#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')"]},{"cell_type":"code","source":["#import data loaders from file\n","train_loader = torch.load('/content/drive/MyDrive/train_loader.pth', weights_only=False)\n","val_loader = torch.load('/content/drive/MyDrive/val_loader.pth', weights_only=False)"],"metadata":{"id":"gvqsjdgzKmOL","executionInfo":{"status":"aborted","timestamp":1758136378449,"user_tz":300,"elapsed":122610,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"y6Q9I1Hw_txD","executionInfo":{"status":"aborted","timestamp":1758136378452,"user_tz":300,"elapsed":122600,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["\"\"\"\n","This implementation of the SWIN Transformer was adapted from the SWIN-UNet at\n","https://github.com/HuCaoFighting/Swin-Unet/blob/main/networks/swin_transformer_unet_skip_expand_decoder_sys.py\n","and modified for image classification tasks on specific input dimensions.\n","\n","The RelativisticPhysicalInformedEncoder has been added to the HEAL-Swin model.\n","\"\"\"\n","\n","from dataclasses import dataclass, field\n","from typing import Optional, List, Literal, Union, Tuple\n","\n","import torch\n","import torch.nn as nn\n","import torch.utils.checkpoint as checkpoint\n","from timm.models.layers import DropPath, trunc_normal_\n","from torch import Tensor\n","\n","\n","class Mlp(nn.Module):\n"," \"\"\" Multi-Layer Perceptron \"\"\"\n"," def __init__(\n"," self,\n"," in_features,\n"," hidden_features=None,\n"," out_features=None,\n"," act_layer=nn.GELU,\n"," drop=0.0,\n"," ):\n"," super().__init__()\n"," out_features = out_features or in_features\n"," hidden_features = hidden_features or in_features\n"," self.fc1 = nn.Linear(in_features, hidden_features)\n"," self.act = act_layer()\n"," self.fc2 = nn.Linear(hidden_features, out_features)\n"," self.drop = nn.Dropout(drop)\n","\n"," def forward(self, x):\n"," x = self.fc1(x)\n"," x = self.act(x)\n"," x = self.drop(x)\n"," x = self.fc2(x)\n"," x = self.drop(x)\n"," return x\n","\n","\n","def window_partition(x, window_size):\n"," \"\"\"\n"," Partitions the input tensor into non-overlapping windows.\n"," Args:\n"," x: (B, H, W, C)\n"," window_size (tuple[int]): Window size (height, width).\n","\n"," Returns:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," \"\"\"\n"," B, H, W, C = x.shape\n"," x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n"," windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n"," return windows\n","\n","\n","def window_reverse(windows, window_size, H, W):\n"," \"\"\"\n"," Reverses the window partitioning.\n"," Args:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," window_size (tuple[int]): Window size (height, width).\n"," H (int): Height of image.\n"," W (int): Width of image.\n","\n"," Returns:\n"," x: (B, H, W, C)\n"," \"\"\"\n"," B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n"," x = windows.view(\n"," B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n"," )\n"," x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n"," return x\n","\n","\n","class WindowAttention(nn.Module):\n"," r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n"," It supports both shifted and non-shifted windows.\n"," \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," window_size,\n"," num_heads,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," attn_drop=0.0,\n"," proj_drop=0.0,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.window_size = window_size\n"," self.num_heads = num_heads\n"," head_dim = dim // num_heads\n"," self.scale = qk_scale or head_dim**-0.5\n","\n"," # Define a parameter table of relative position bias\n"," self.relative_position_bias_table = nn.Parameter(\n"," torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n"," )\n","\n"," # Get pair-wise relative position index for each token inside the window\n"," coords_h = torch.arange(self.window_size[0])\n"," coords_w = torch.arange(self.window_size[1])\n"," coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n"," coords_flatten = torch.flatten(coords, 1)\n"," relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n"," relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n"," relative_coords[:, :, 0] += self.window_size[0] - 1\n"," relative_coords[:, :, 1] += self.window_size[1] - 1\n"," relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n"," relative_position_index = relative_coords.sum(-1)\n"," self.register_buffer(\"relative_position_index\", relative_position_index)\n","\n"," self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n"," self.attn_drop = nn.Dropout(attn_drop)\n"," self.proj = nn.Linear(dim, dim)\n"," self.proj_drop = nn.Dropout(proj_drop)\n","\n"," trunc_normal_(self.relative_position_bias_table, std=0.02)\n"," self.softmax = nn.Softmax(dim=-1)\n","\n"," def forward(self, x, mask=None):\n"," B_, N, C = x.shape\n"," qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n"," q, k, v = qkv[0], qkv[1], qkv[2]\n","\n"," q = q * self.scale\n"," attn = q @ k.transpose(-2, -1)\n","\n"," relative_position_bias = self.relative_position_bias_table[\n"," self.relative_position_index.view(-1)\n"," ].view(\n"," self.window_size[0] * self.window_size[1],\n"," self.window_size[0] * self.window_size[1],\n"," -1,\n"," )\n"," relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n"," attn = attn + relative_position_bias.unsqueeze(0)\n","\n"," if mask is not None:\n"," nW = mask.shape[0]\n"," attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n"," attn = attn.view(-1, self.num_heads, N, N)\n"," attn = self.softmax(attn)\n"," else:\n"," attn = self.softmax(attn)\n","\n"," attn = self.attn_drop(attn)\n","\n"," x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n"," x = self.proj(x)\n"," x = self.proj_drop(x)\n"," return x\n","\n","class TransformerLSABlock(nn.Module):\n"," \"\"\"\n"," A Transformer block with LayerNorm, Multi-Head Self-Attention, and a Feed-Forward Network.\n"," This is a standard component for transformer architectures.\n"," \"\"\"\n"," def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n"," super(TransformerLSABlock, self).__init__()\n"," self.norm1 = nn.LayerNorm(embed_dim)\n"," self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n"," self.norm2 = nn.LayerNorm(embed_dim)\n"," self.mlp = nn.Sequential(\n"," nn.Linear(embed_dim, num_hidden_neurons),\n"," activation_function(),\n"," nn.Dropout(dropout),\n"," nn.Linear(num_hidden_neurons, embed_dim),\n"," nn.Dropout(dropout)\n"," )\n"," self.dropout = nn.Dropout(dropout)\n","\n"," def forward(self, x):\n"," # Multi-Head Self-Attention\n"," x_norm = self.norm1(x)\n"," attn_output, _ = self.attn(x_norm, x_norm, x_norm)\n"," x = x + self.dropout(attn_output)\n","\n"," # Feed-Forward Network\n"," x_norm = self.norm2(x)\n"," mlp_output = self.mlp(x_norm)\n"," x = x + self.dropout(mlp_output)\n"," return x\n","\n","class SwinTransformerBlock(nn.Module):\n"," r\"\"\" Swin Transformer Block.\"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," num_heads,\n"," window_size=(5, 5),\n"," shift_size=(0, 0),\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," act_layer=nn.GELU,\n"," norm_layer=nn.LayerNorm,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.num_heads = num_heads\n"," self.window_size = window_size\n"," self.shift_size = shift_size\n"," self.mlp_ratio = mlp_ratio\n","\n"," if min(self.input_resolution) <= min(self.window_size):\n"," self.shift_size = (0, 0)\n"," self.window_size = self.input_resolution\n","\n"," assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n"," assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n","\n"," self.norm1 = norm_layer(dim)\n"," self.attn = WindowAttention(\n"," dim,\n"," window_size=self.window_size,\n"," num_heads=num_heads,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," attn_drop=attn_drop,\n"," proj_drop=drop,\n"," )\n","\n"," self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n"," self.norm2 = norm_layer(dim)\n"," mlp_hidden_dim = int(dim * mlp_ratio)\n"," self.mlp = Mlp(\n"," in_features=dim,\n"," hidden_features=mlp_hidden_dim,\n"," act_layer=act_layer,\n"," drop=drop,\n"," )\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," H, W = self.input_resolution\n"," img_mask = torch.zeros((1, H, W, 1))\n"," h_slices = (\n"," slice(0, -self.window_size[0]),\n"," slice(-self.window_size[0], -self.shift_size[0]),\n"," slice(-self.shift_size[0], None),\n"," )\n"," w_slices = (\n"," slice(0, -self.window_size[1]),\n"," slice(-self.window_size[1], -self.shift_size[1]),\n"," slice(-self.shift_size[1], None),\n"," )\n"," cnt = 0\n"," for h in h_slices:\n"," for w in w_slices:\n"," img_mask[:, h, w, :] = cnt\n"," cnt += 1\n","\n"," mask_windows = window_partition(img_mask, self.window_size)\n"," mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n"," attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n"," attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n"," attn_mask == 0, float(0.0)\n"," )\n"," else:\n"," attn_mask = None\n","\n"," self.register_buffer(\"attn_mask\", attn_mask)\n","\n"," def forward(self, x):\n"," H, W = self.input_resolution\n"," B, L, C = x.shape\n"," assert L == H * W, \"input feature has wrong size\"\n","\n"," shortcut = x\n"," x = self.norm1(x)\n"," x = x.view(B, H, W, C)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n"," else:\n"," shifted_x = x\n","\n"," x_windows = window_partition(shifted_x, self.window_size)\n"," x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n","\n"," attn_windows = self.attn(x_windows, mask=self.attn_mask)\n","\n"," attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n"," shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n"," else:\n"," x = shifted_x\n"," x = x.view(B, H * W, C)\n","\n"," x = shortcut + self.drop_path(x)\n"," x = x + self.drop_path(self.mlp(self.norm2(x)))\n","\n"," return x\n","\n","\n","class BasicLayer(nn.Module):\n"," \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," depth,\n"," num_heads,\n"," window_size,\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," norm_layer=nn.LayerNorm,\n"," downsample=None,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.depth = depth\n","\n"," self.blocks = nn.ModuleList(\n"," [\n"," SwinTransformerBlock(\n"," dim=dim,\n"," input_resolution=input_resolution,\n"," num_heads=num_heads,\n"," window_size=window_size,\n"," shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n"," mlp_ratio=mlp_ratio,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," drop=drop,\n"," attn_drop=attn_drop,\n"," drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n"," norm_layer=norm_layer,\n"," )\n"," for i in range(depth)\n"," ]\n"," )\n","\n"," if downsample is not None:\n"," self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n"," else:\n"," self.downsample = None\n","\n"," def forward(self, x):\n"," for blk in self.blocks:\n"," x = blk(x)\n"," if self.downsample is not None:\n"," x = self.downsample(x)\n"," return x\n","\n","\n","class PatchEmbed(nn.Module):\n"," r\"\"\" Image to Patch Embedding \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n"," super().__init__()\n"," self.img_size = img_size\n"," self.patch_size = patch_size\n"," self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n"," self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n"," self.in_chans = in_chans\n"," self.embed_dim = embed_dim\n","\n"," self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n"," if norm_layer is not None:\n"," self.norm = norm_layer(embed_dim)\n"," else:\n"," self.norm = None\n","\n"," def forward(self, x):\n"," B, C, H, W = x.shape\n"," assert H == self.img_size[0] and W == self.img_size[1], \\\n"," f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n"," x = self.proj(x).flatten(2).transpose(1, 2)\n"," if self.norm is not None:\n"," x = self.norm(x)\n"," return x\n","\n","class RelativisticPhysicalInformedEncoder(nn.Module):\n"," \"\"\"\n"," A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n","\n"," Attributes:\n"," pixel_scale (float): The scale of each pixel in the image, often in arcseconds per pixel.\n"," profile_size (int): The size of the image profile.\n"," half_profile_size (int): Half of the profile size.\n"," num_patches (int): Number of patches.\n"," embed_dim (int): Dimension of the embedding.\n"," num_heads (int): Number of heads in the transformer.\n"," num_hidden_neurons (int): Number of hidden neurons.\n"," eps (float): Float number used to avoid division by zero.\n"," transformer_activation_function (nn.Module): Activation function used in the transformer.\n"," num_transformer_blocks (int): Number of transformer blocks.\n"," device (torch.device): Device to which tensors will be moved.\n"," transformer (nn.ModuleList): List of transformer blocks.\n"," num_neurons_flatten (int): Number of neurons in the Flatten layer.\n"," grid_x (Tensor): Grid of x coordinates.\n"," grid_y (Tensor): Grid of y coordinates.\n"," flat_grid_x (Tensor): Flattened grid of x coordinates.\n"," flat_grid_y (Tensor): Flattened grid of y coordinates.\n"," \"\"\"\n"," def __init__( self,\n"," image_size: int,\n"," patch_size: int ,\n"," embed_dim: int,\n"," num_patches: int,\n"," num_heads: int,\n"," num_hidden_neurons: int,\n"," transformer_activation_function: nn.Module,\n"," num_transformer_blocks: int,\n"," device: torch.device,\n"," dropout: float = 0.1,\n"," pixel_scale:float =0.101,\n"," k_min: float = 0.8,\n"," k_max: float = 1.2,\n"," eps: float = 1e-8\n"," ):\n","\n","\n"," \"\"\"\n"," Initialize the module.\n","\n"," Args:\n"," image_size (int): The size of the image.\n"," patch_size (int): The size of each patch.\n"," embed_dim (int): The embedding dimension.\n"," num_patches (int): The number of patches.\n"," num_heads (int): The number of heads in the transformer.\n"," num_hidden_neurons (int): The number of hidden neurons.\n"," transformer_activation_function (nn.Module): The activation function used in the transformer.\n"," num_transformer_blocks (int): The number of transformer blocks.\n"," device (torch.device): The device to which tensors will be moved.\n"," dropout (float, optional): The dropout rate. Defaults to 0.1.\n"," pixel_scale (float, optional): The scale of each pixel in the image, often in arcseconds per pixel. Defaults to 0.101.\n"," k_min (float, optional): Minimum value of the potential correction parameter. Defaults to 0.8.\n"," k_max (float, optional): Maximum value of the potencial correction parameter. Defaults to 1.2.\n"," eps (float): Float number used to avoid division by zero. Defaluts to 1e-8.\n"," \"\"\"\n","\n"," super(RelativisticPhysicalInformedEncoder, self).__init__()\n","\n"," # Initialize variables\n"," self.pixel_scale = pixel_scale\n"," self.profile_size = image_size\n"," self.half_profile_size = self.profile_size // 2\n"," self.num_patches = num_patches\n"," self.embed_dim = embed_dim\n"," self.num_heads = num_heads\n"," self.num_hidden_neurons = num_hidden_neurons\n"," self.transformer_activation_function = transformer_activation_function\n"," self.num_transformer_blocks = num_transformer_blocks\n"," self.device = device\n"," self.k_min = k_min\n"," self.k_max = k_max\n"," self.eps = eps\n","\n"," # Create an empty list for the transformer blocks\n"," self.transformer = nn.ModuleList()\n","\n"," # Calculate the number of neurons for the Flatten layer\n"," self.num_neurons_flatten = (self.num_patches)*embed_dim\n","\n"," # Create a for loop that iterates over the number of transformer blocks\n"," for _ in range(num_transformer_blocks):\n"," # Add a TransformerLSABlock to the transformer list\n"," self.transformer.append(\n","\n"," TransformerLSABlock(embed_dim,\n"," num_heads,\n"," self.num_patches,\n"," num_hidden_neurons,\n"," transformer_activation_function,\n"," device,\n"," dropout)\n"," )\n","\n"," # Create a compressor (FeedFoward) compress the size of num_neurons_flatten\n"," self.transformer.append(nn.Flatten())\n"," self.transformer.append(nn.Linear(self.num_neurons_flatten,self.profile_size*self.profile_size))\n"," self.transformer.append(nn.Sigmoid())\n","\n"," # Create a grid for image coordinates\n"," x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size-1, self.profile_size) * self.pixel_scale\n"," y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size-1, self.profile_size) * self.pixel_scale\n"," self.grid_x, self.grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n"," self.flat_grid_x = self.grid_x.flatten().to(self.device)\n"," self.flat_grid_y = self.grid_y.flatten().to(self.device)\n","\n","\n"," def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n","\n"," \"\"\"\n"," Forward pass through the module.\n","\n"," Args:\n"," input_images (torch.Tensor): The input images.\n"," patches (torch.Tensor): The patches extracted from the images.\n","\n"," Returns:\n"," output_images (torch.Tensor): The output images after inverse gravitational lensing.\n"," \"\"\"\n","\n"," # Get the batch size from the input images\n"," batch_size = input_images.shape[0]\n","\n"," # Generate k using the sequential model\n"," k_sigmoid = patches\n"," for layer in self.transformer:\n"," k_sigmoid = layer(k_sigmoid)\n","\n"," # Reshape k_sigmoid to have shape [batch_size, profile_size, profile_size]\n"," k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n","\n"," # Flatten k_sigmoid to match the shape of non_zero_x and non_zero_radius\n"," k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size*self.profile_size)\n","\n"," # Bias and Scalling\n"," k_sigmoid_flat = self.k_min + (self.k_max-self.k_min)*k_sigmoid_flat\n","\n"," # Flatten the input images for easier indexing\n"," flat_input_images = input_images.view(batch_size, -1)\n","\n"," # Create a mask for non-zero coordinates in the grid\n"," non_zero_mask = (self.flat_grid_x != 0) | (self.flat_grid_y != 0)\n","\n"," # Select only the non-zero indices to match with non_zero_x and non_zero_radius\n"," k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n","\n"," # Get the shape of k_sigmoid_non_zero\n"," shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n","\n"," # Reshape k to have a batch dimension compatible for broadcasting\n"," k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n","\n"," # Apply the mask to get non-zero coordinates\n"," non_zero_x = self.flat_grid_x[non_zero_mask]\n"," non_zero_y = self.flat_grid_y[non_zero_mask]\n","\n"," # Calculate the radius for non-zero coordinates\n"," non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n","\n"," # Expand dimensions for broadcasting\n"," non_zero_radius = non_zero_radius[None, None, None, :]\n","\n"," # Compute shifted coordinates based on the Gravitational Lens Equation to SIS model\n"," shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps) )\n"," shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps) )\n","\n"," # Convert shifted coordinates to indices in the image grid\n"," shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n"," shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n","\n"," # Clamp indices to be within the valid range\n"," shifted_x_idx = torch.clamp(shifted_x_idx, 0, self.profile_size - 1)\n"," shifted_y_idx = torch.clamp(shifted_y_idx, 0, self.profile_size - 1)\n","\n","\n"," # Initialize the output image tensor and flatten it\n"," output_images = torch.zeros(batch_size, self.profile_size, self.profile_size).to(self.device)\n"," flat_output_images = output_images.view(batch_size, -1)\n","\n"," # Calculate 1D indices from shifted_x_idx and shifted_y_idx\n"," one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n","\n"," # Flatten the input images for easier indexing\n"," flat_input_images = input_images.view(batch_size, -1)\n","\n"," # Get the current values at the shifted positions in the flat output images\n"," output_values_at_shifted_positions = flat_output_images.gather(1, one_d_indices.view(batch_size, -1))\n","\n"," # Get the corresponding values from the original positions in the flat input images\n"," input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n","\n"," # Update the output image based on the algorithm\n"," updated_values = torch.where(output_values_at_shifted_positions == 0,\n"," input_values_at_original_positions,\n"," (output_values_at_shifted_positions + input_values_at_original_positions) / 2)\n","\n"," # Assign the updated values back to the flat output images\n"," flat_output_images.scatter_(1, one_d_indices.view(batch_size, -1), updated_values)\n","\n"," # Reshape the flat output images back to their original shape\n"," output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n","\n","\n"," # Normalize the output images\n"," max_values, _ = output_images.max(dim=1, keepdim=True)\n"," max_values, _ = max_values.max(dim=2, keepdim=True)\n"," output_images = output_images / (max_values + self.eps)\n","\n"," return output_images.unsqueeze(1) # Add channel dimension back\n","\n","\n","class HEAL_Swin(nn.Module):\n"," \"\"\"\n"," Swin Transformer with a Relativistic Physical Informed Encoder.\n"," This model first applies a physics-informed transformation to the input image\n"," before processing it with the Swin Transformer for classification.\n"," \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n"," embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n"," window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n"," drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n"," norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n"," # Relativistic Encoder Params\n"," relativistic_encoder_params=None,\n"," device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n"," **kwargs):\n"," super().__init__()\n","\n"," self.num_classes = num_classes\n"," self.num_layers = len(depths)\n"," self.embed_dim = embed_dim\n"," self.ape = ape\n"," self.patch_norm = patch_norm\n"," self.num_features = int(embed_dim)\n"," self.mlp_ratio = mlp_ratio\n"," self.device = device\n","\n"," # Split image into non-overlapping patches\n"," self.patch_embed = PatchEmbed(\n"," img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n"," norm_layer=norm_layer if self.patch_norm else None)\n"," num_patches = self.patch_embed.num_patches\n"," patches_resolution = self.patch_embed.patches_resolution\n"," self.patches_resolution = patches_resolution\n","\n"," # Relativistic Physical Informed Encoder\n"," if relativistic_encoder_params is None:\n"," relativistic_encoder_params = {\n"," 'image_size': img_size[0],\n"," 'patch_size': patch_size[0],\n"," 'embed_dim': embed_dim,\n"," 'num_patches': num_patches,\n"," 'num_heads': num_heads[0],\n"," 'num_hidden_neurons': int(embed_dim * mlp_ratio),\n"," 'transformer_activation_function': nn.GELU,\n"," 'num_transformer_blocks': 2,\n"," 'device': self.device\n"," }\n"," self.relativistic_encoder = RelativisticPhysicalInformedEncoder(**relativistic_encoder_params)\n","\n","\n"," # Absolute position embedding\n"," if self.ape:\n"," self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n"," trunc_normal_(self.absolute_pos_embed, std=.02)\n","\n"," self.pos_drop = nn.Dropout(p=drop_rate)\n","\n"," # Stochastic depth\n"," dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n","\n"," # Build layers\n"," self.layers = nn.ModuleList()\n"," layer = BasicLayer(dim=int(embed_dim),\n"," input_resolution=patches_resolution,\n"," depth=sum(depths),\n"," num_heads=num_heads[0],\n"," window_size=window_size,\n"," mlp_ratio=self.mlp_ratio,\n"," qkv_bias=qkv_bias, qk_scale=qk_scale,\n"," drop=drop_rate, attn_drop=attn_drop_rate,\n"," drop_path=dpr,\n"," norm_layer=norm_layer,\n"," downsample=None)\n"," self.layers.append(layer)\n","\n"," self.norm = norm_layer(self.num_features)\n"," self.avgpool = nn.AdaptiveAvgPool1d(1)\n"," self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n","\n"," self.apply(self._init_weights)\n","\n"," def _init_weights(self, m):\n"," if isinstance(m, nn.Linear):\n"," trunc_normal_(m.weight, std=.02)\n"," if isinstance(m, nn.Linear) and m.bias is not None:\n"," nn.init.constant_(m.bias, 0)\n"," elif isinstance(m, nn.LayerNorm):\n"," nn.init.constant_(m.bias, 0)\n"," nn.init.constant_(m.weight, 1.0)\n","\n"," @torch.jit.ignore\n"," def no_weight_decay(self):\n"," return {'absolute_pos_embed'}\n","\n"," @torch.jit.ignore\n"," def no_weight_decay_keywords(self):\n"," return {'relative_position_bias_table'}\n","\n"," def forward_features(self, x):\n"," # First, get the patches\n"," patches = self.patch_embed(x)\n","\n"," # Pass original image and patches to the relativistic encoder\n"," x_encoded = self.relativistic_encoder(x, patches)\n","\n"," # Now, embed the encoded image\n"," x = self.patch_embed(x_encoded)\n","\n"," if self.ape:\n"," x = x + self.absolute_pos_embed\n"," x = self.pos_drop(x)\n","\n"," for layer in self.layers:\n"," x = layer(x)\n","\n"," x = self.norm(x)\n"," x = self.avgpool(x.transpose(1, 2))\n"," x = torch.flatten(x, 1)\n"," return x\n","\n"," def forward(self, x):\n"," x = self.forward_features(x)\n"," x = self.head(x)\n"," return x\n","\n","\n"]},{"cell_type":"code","source":["\n","\n","#!pip install torch_xla[tpu]"],"metadata":{"id":"hivvAHcI41JJ","executionInfo":{"status":"aborted","timestamp":1758136378454,"user_tz":300,"elapsed":122600,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["#import torch_xla"],"metadata":{"id":"GtiRNfT34-6a","executionInfo":{"status":"aborted","timestamp":1758136378459,"user_tz":300,"elapsed":122604,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Q3rnNlt1_txE","executionInfo":{"status":"aborted","timestamp":1758136378463,"user_tz":300,"elapsed":122607,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["import torch\n","import numpy as np\n","from sklearn.metrics import roc_auc_score, roc_curve, auc\n","from sklearn.preprocessing import label_binarize\n","import copy\n","import matplotlib.pyplot as plt\n","from itertools import cycle\n","\n","def plot_roc_curve(all_labels, all_probs, class_names):\n"," \"\"\"\n"," Plots the ROC curve for each class and the micro/macro averages.\n"," \"\"\"\n"," # Binarize the labels for multi-class ROC analysis\n"," all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n"," all_probs = np.array(all_probs)\n","\n"," # Compute ROC curve and ROC area for each class\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," for i in range(len(class_names)):\n"," fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," # Compute micro-average ROC curve and ROC area\n"," fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n"," roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n","\n"," # Compute macro-average ROC curve and ROC area\n"," # First aggregate all false positive rates\n"," all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n"," # Then interpolate all ROC curves at these points\n"," mean_tpr = np.zeros_like(all_fpr)\n"," for i in range(len(class_names)):\n"," mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n"," # Finally average it and compute AUC\n"," mean_tpr /= len(class_names)\n"," fpr[\"macro\"] = all_fpr\n"," tpr[\"macro\"] = mean_tpr\n"," roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n","\n"," # Plot all ROC curves\n"," plt.figure(figsize=(10, 8))\n","\n"," plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n"," label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n"," color='deeppink', linestyle=':', linewidth=4)\n","\n"," plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n"," label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n"," color='navy', linestyle=':', linewidth=4)\n","\n"," colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n"," for i, color in zip(range(len(class_names)), colors):\n"," plt.plot(fpr[i], tpr[i], color=color, lw=2,\n"," label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--', lw=2)\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin_pinn.png\")\n"," print(\"\\nROC curve plot saved as roc_curve.png\")\n","\n","\"\"\"Training and Evaluation with Early Stopping\"\"\"\n","def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n"," \"\"\"\n"," Trains the model with early stopping based on validation ROC AUC score.\n","\n"," Args:\n"," model (torch.nn.Module): The neural network model to train.\n"," train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n"," val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n"," criterion: The loss function.\n"," optimizer: The optimization algorithm.\n"," scheduler: The learning rate scheduler.\n"," num_epochs (int): The maximum number of epochs to train for.\n"," patience (int): Number of epochs to wait for improvement before stopping.\n"," \"\"\"\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Training on device: {device}\")\n","\n"," model.to(device)\n","\n"," best_roc_auc = 0.0\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = []\n"," best_labels = []\n","\n"," class_names = ['axion', 'cdm', 'no_sub']\n","\n"," for epoch in range(num_epochs):\n"," print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n","\n"," # --- Training Phase ---\n"," model.train()\n"," train_loss = 0.0\n"," train_correct = 0\n","\n"," for images, labels in train_loader:\n"," images, labels = images.to(device), labels.to(device)\n","\n"," optimizer.zero_grad()\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," scheduler.step()\n","\n"," train_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," train_correct += (predicted == labels).sum().item()\n","\n"," # --- Validation Phase ---\n"," model.eval()\n"," val_loss = 0.0\n"," val_correct = 0\n"," all_probs = []\n"," all_labels = []\n","\n"," with torch.no_grad():\n"," for images, labels in val_loader:\n"," images, labels = images.to(device), labels.to(device)\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n","\n"," val_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," val_correct += (predicted == labels).sum().item()\n","\n"," probs = torch.softmax(outputs, dim=1)\n"," all_probs.extend(probs.cpu().numpy())\n"," all_labels.extend(labels.cpu().numpy())\n","\n"," # --- Calculate Metrics ---\n"," train_loss = train_loss / len(train_loader.dataset)\n"," val_loss = val_loss / len(val_loader.dataset)\n"," train_accuracy = train_correct / len(train_loader.dataset)\n"," val_accuracy = val_correct / len(val_loader.dataset)\n","\n"," # Calculate multi-class ROC AUC score\n"," all_labels_np = np.array(all_labels)\n"," all_probs_np = np.array(all_probs)\n"," try:\n"," val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n"," except ValueError as e:\n"," print(f\"Could not calculate ROC AUC: {e}\")\n"," val_roc_auc = 0.0\n","\n"," # Epoch-level summary\n"," #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n"," #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n"," #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n","\n"," if val_roc_auc > best_roc_auc:\n"," best_roc_auc = val_roc_auc\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = all_probs\n"," best_labels = all_labels\n"," #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n"," print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n"," else:\n"," epochs_no_improve += 1\n"," print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n","\n"," if epochs_no_improve >= patience:\n"," print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n"," model.load_state_dict(best_model_wts)\n"," break\n","\n"," print(\"\\nTraining Complete!\")\n"," model.load_state_dict(best_model_wts)\n","\n"," # After the training loop, plot the ROC curve for the best model\n"," if best_probs and best_labels:\n"," plot_roc_curve(best_labels, best_probs, class_names)\n","\n"," return model, best_probs, best_labels"]},{"cell_type":"code","source":["#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')"],"metadata":{"id":"9QBIRCLEkikD","executionInfo":{"status":"aborted","timestamp":1758136378466,"user_tz":300,"elapsed":122606,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-ZJepKUw_txF","executionInfo":{"status":"aborted","timestamp":1758136378470,"user_tz":300,"elapsed":122601,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":["\"\"\"\n","Args:\n"," image_size (int): Size of the input image (e.g., 224).\n"," patch_size (int): Size of each patch (e.g., 16).\n"," in_channels (int): Number of input channels (e.g., 1 for your task).\n"," num_classes (int): Number of output classes (e.g., 3 for your task).\n"," embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n"," depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n"," num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n"," mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n"," dropout (float): Dropout probability.\n","\"\"\"\n","from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n","batch_size = 32\n","learning_rate = 1e-4\n","weight_decay = 0.05\n","num_epochs = 2000\n","warmup_epochs = 10\n","\"\"\"\n","model = SwinTransformerForClassification(\n"," img_size=(150, 150),\n"," patch_size=(10, 10),\n"," in_chans=1,\n"," num_classes=3, # Same number of classes as the ViT example\n"," embed_dim=48,\n"," depths=[2, 2, 2, 2],\n"," num_heads=[3, 6, 12, 24],\n"," window_size=(5, 5),\n"," drop_path_rate=0.2,\n"," )\"\"\"\n","model = HEAL_Swin(img_size=(64, 64), patch_size=(8, 8), num_classes=3, window_size=(8, 8))\n","\n","\n","criterion = nn.CrossEntropyLoss(label_smoothing=0.1)\n","optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=0.05)\n","\n","\n","#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n","def warmup_lambda(current_epoch):\n"," if current_epoch < warmup_epochs:\n"," return float(current_epoch) / float(max(1, warmup_epochs))\n"," return 1.0\n","warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n","main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n","scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n","\n","\n","print(\"Optimizer: Adam\")\n","print(f\"Learning Rate: {learning_rate}\")\n","\n","# Train Model\n","model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)"]},{"cell_type":"markdown","source":["\"\"\" ROC Curve Plotting Function\"\"\"\n","def plot_roc_curve(all_preds, all_labels):\n"," print(\"Generating ROC Curve\")\n","\n"," # Convert predictions and labels to numpy arrays\n"," all_preds = np.array(all_preds)\n"," all_labels = np.array(all_labels)\n","\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," n_classes = 3\n","\n"," for i in range(n_classes):\n"," fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n","\n"," # Plot ROC curves\n"," plt.figure(figsize=(10, 8))\n"," colors = ['blue', 'red', 'green']\n"," class_names = ['Axion', 'CDM', 'No Substructure']\n","\n"," for i, color in zip(range(n_classes), colors):\n"," plt.plot(fpr[i], tpr[i], color=color,\n"," label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin_pinn.png')\n"," plt.close()\n","\n"," print(\"ROC Curve saved as roc_curve.png\")\n","\n","\n","plot_roc_curve(all_probs, all_labels)\n","\n","print(\"Training and Evaluation Complete!\")"],"metadata":{"id":"G_-lEQtu_txF"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"MZ59pFZa_txG","executionInfo":{"status":"aborted","timestamp":1758136378474,"user_tz":300,"elapsed":122603,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[],"source":[]}],"metadata":{"colab":{"provenance":[{"file_id":"1r40O3vAh8rRdhVOou48Z6yaV7mWYApFU","timestamp":1756334887300},{"file_id":"1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf","timestamp":1756245539652},{"file_id":"1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28","timestamp":1756243482189}],"gpuType":"A100","machine_shape":"hm"},"kernelspec":{"display_name":"Python 3","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.11.2"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":0} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "X7Ekxmo1XV5I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 304 + }, + "executionInfo": { + "elapsed": 121997, + "status": "error", + "timestamp": 1758136378041, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "_mFRKD8F__hl", + "outputId": "5173fceb-5ee1-482e-e9b0-2ea2054f575b" + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "mount failed", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipython-input-1408506528.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mgoogle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdrive\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdrive\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmount\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/content/drive'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/google/colab/drive.py\u001b[0m in \u001b[0;36mmount\u001b[0;34m(mountpoint, force_remount, timeout_ms, readonly)\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmount\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmountpoint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mforce_remount\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout_ms\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m120000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreadonly\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[0;34m\"\"\"Mount your Google Drive at the specified mountpoint path.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 97\u001b[0;31m return _mount(\n\u001b[0m\u001b[1;32m 98\u001b[0m \u001b[0mmountpoint\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0mforce_remount\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mforce_remount\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/google/colab/drive.py\u001b[0m in \u001b[0;36m_mount\u001b[0;34m(mountpoint, force_remount, timeout_ms, ephemeral, readonly)\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[0;34m'https://research.google.com/colaboratory/faq.html#drive-timeout'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 271\u001b[0m )\n\u001b[0;32m--> 272\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'mount failed'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mextra_reason\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 273\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mcase\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;31m# Terminate the DriveFS binary before killing bash.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: mount failed" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 409, + "status": "aborted", + "timestamp": 1758136378439, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "vRM2kxST8KJZ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "\"\"\"Import dependencies\"\"\"\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import Dataset, DataLoader\n", + "from torchvision.models import resnet18\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122615, + "status": "aborted", + "timestamp": 1758136378443, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "9Dm6SC1o_txB" + }, + "outputs": [], + "source": [ + "\n", + "class MyDatasetViT(Dataset):\n", + " def __init__(self, data_dir, transform=None):\n", + " self.data = []\n", + " self.labels = []\n", + " self.class_names = ['axion', 'cdm', 'no_sub']\n", + " self.transform = transform\n", + "\n", + " print(f\"Loading dataset from: {data_dir}\")\n", + " print(f\"Looking for classes: {self.class_names}\")\n", + "\n", + " for idx, class_name in enumerate(self.class_names):\n", + " class_dir = os.path.join(data_dir, class_name)\n", + " print(f\"--- Processing class: {class_name} ---\")\n", + "\n", + " if not os.path.exists(class_dir):\n", + " print(f\"[ERROR] Directory not found: {class_dir}\")\n", + " continue\n", + "\n", + " files = os.listdir(class_dir)\n", + "\n", + " for file_name in files:\n", + " if file_name.endswith('.npy'):\n", + " file_path = os.path.join(class_dir, file_name)\n", + " loaded_data = np.load(file_path, allow_pickle=True)\n", + "\n", + " if class_name == 'axion':\n", + " image = loaded_data[0]\n", + " else:\n", + " image = loaded_data\n", + "\n", + " # [DEBUG] Print the shape of the raw numpy array\n", + " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", + "\n", + " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", + " if image.ndim != 2:\n", + " image = np.squeeze(image)\n", + "\n", + " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", + " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", + "\n", + " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", + " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", + "\n", + " self.data.append(image_tensor)\n", + " self.labels.append(idx)\n", + "\n", + " print(\"\\n--- Dataset Loading Complete ---\")\n", + " print(f\"Total images loaded: {len(self.data)}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " \"\"\"\n", + " This method is called by the DataLoader to get one item from the dataset.\n", + " The debug prints here are CRITICAL for finding the error.\n", + " \"\"\"\n", + " #print(f\"--- Getting item index: {idx} ---\")\n", + "\n", + " # Retrieve the pre-loaded tensor and its label\n", + " image = self.data[idx]\n", + " label = self.labels[idx]\n", + "\n", + " # [DEBUG] Print shape BEFORE the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", + "\n", + " # Apply transformations (e.g., resizing) if they are provided\n", + " if self.transform:\n", + " image = self.transform(image)\n", + " # [DEBUG] Print shape AFTER the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", + " else:\n", + " #print(\" [DEBUG] No transform was applied.\")\n", + " pass\n", + "\n", + " return image, label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122608, + "status": "aborted", + "timestamp": 1758136378446, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "VJEgowwT_txC" + }, + "outputs": [], + "source": [ + "\n", + "# Import the transforms module\n", + "from torchvision import transforms\n", + "# Hyperparameters\n", + "batch_size = 32\n", + "learning_rate = 0.001\n", + "num_epochs = 100\n", + "\n", + "# Data Directories\n", + "train_dir = '/content/drive/MyDrive/Model_V/Model_V'\n", + "#val_dir = '../dataset/dataset/val'\n", + "\n", + "print(f\"Training Directory: {train_dir}\")\n", + "#print(f\"Validation Directory: {val_dir}\")\n", + "\n", + "vit_transforms = transforms.Compose([\n", + " # transforms.ToTensor(), # Removed ToTensor()\n", + " transforms.RandomHorizontalFlip(p=0.5),\n", + " transforms.RandomVerticalFlip(p=0.5),\n", + " transforms.RandomRotation(degrees=90), # Can be any angle range\n", + "])\n", + "\n", + "# Create Datasets and Dataloaders\n", + "#train_dataset = MyDataset(train_dir)\n", + "#val_dataset = MyDataset(val_dir)\n", + "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", + "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", + "\n", + "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", + "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", + "\n", + "#print(f\"Batch Size: {batch_size}\")\n", + "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", + "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", + "\n", + "#Save the dataloader so that we don't have to bear with this pain again\n", + "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", + "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122610, + "status": "aborted", + "timestamp": 1758136378449, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "gvqsjdgzKmOL" + }, + "outputs": [], + "source": [ + "#import data loaders from file\n", + "train_loader = torch.load('/content/drive/MyDrive/train_loader.pth', weights_only=False)\n", + "val_loader = torch.load('/content/drive/MyDrive/val_loader.pth', weights_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122600, + "status": "aborted", + "timestamp": 1758136378452, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "y6Q9I1Hw_txD" + }, + "outputs": [], + "source": [ + "\"\"\"\n", + "This implementation of the SWIN Transformer was adapted from the SWIN-UNet at\n", + "https://github.com/HuCaoFighting/Swin-Unet/blob/main/networks/swin_transformer_unet_skip_expand_decoder_sys.py\n", + "and modified for image classification tasks on specific input dimensions.\n", + "\n", + "The RelativisticPhysicalInformedEncoder has been added to the HEAL-Swin model.\n", + "\"\"\"\n", + "\n", + "from dataclasses import dataclass, field\n", + "from typing import Optional, List, Literal, Union, Tuple\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.utils.checkpoint as checkpoint\n", + "from timm.layers import DropPath, trunc_normal_\n", + "from torch import Tensor\n", + "\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\" Multi-Layer Perceptron \"\"\"\n", + " def __init__(\n", + " self,\n", + " in_features,\n", + " hidden_features=None,\n", + " out_features=None,\n", + " act_layer=nn.GELU,\n", + " drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " out_features = out_features or in_features\n", + " hidden_features = hidden_features or in_features\n", + " self.fc1 = nn.Linear(in_features, hidden_features)\n", + " self.act = act_layer()\n", + " self.fc2 = nn.Linear(hidden_features, out_features)\n", + " self.drop = nn.Dropout(drop)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.act(x)\n", + " x = self.drop(x)\n", + " x = self.fc2(x)\n", + " x = self.drop(x)\n", + " return x\n", + "\n", + "\n", + "def window_partition(x, window_size):\n", + " \"\"\"\n", + " Partitions the input tensor into non-overlapping windows.\n", + " Args:\n", + " x: (B, H, W, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + "\n", + " Returns:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " \"\"\"\n", + " B, H, W, C = x.shape\n", + " x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n", + " windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n", + " return windows\n", + "\n", + "\n", + "def window_reverse(windows, window_size, H, W):\n", + " \"\"\"\n", + " Reverses the window partitioning.\n", + " Args:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + " H (int): Height of image.\n", + " W (int): Width of image.\n", + "\n", + " Returns:\n", + " x: (B, H, W, C)\n", + " \"\"\"\n", + " B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n", + " x = windows.view(\n", + " B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n", + " )\n", + " x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n", + " return x\n", + "\n", + "\n", + "class WindowAttention(nn.Module):\n", + " r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n", + " It supports both shifted and non-shifted windows.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " window_size,\n", + " num_heads,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " attn_drop=0.0,\n", + " proj_drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.window_size = window_size\n", + " self.num_heads = num_heads\n", + " head_dim = dim // num_heads\n", + " self.scale = qk_scale or head_dim**-0.5\n", + "\n", + " # Define a parameter table of relative position bias\n", + " self.relative_position_bias_table = nn.Parameter(\n", + " torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n", + " )\n", + "\n", + " # Get pair-wise relative position index for each token inside the window\n", + " coords_h = torch.arange(self.window_size[0])\n", + " coords_w = torch.arange(self.window_size[1])\n", + " coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n", + " coords_flatten = torch.flatten(coords, 1)\n", + " relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n", + " relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n", + " relative_coords[:, :, 0] += self.window_size[0] - 1\n", + " relative_coords[:, :, 1] += self.window_size[1] - 1\n", + " relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n", + " relative_position_index = relative_coords.sum(-1)\n", + " self.register_buffer(\"relative_position_index\", relative_position_index)\n", + "\n", + " self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n", + " self.attn_drop = nn.Dropout(attn_drop)\n", + " self.proj = nn.Linear(dim, dim)\n", + " self.proj_drop = nn.Dropout(proj_drop)\n", + "\n", + " trunc_normal_(self.relative_position_bias_table, std=0.02)\n", + " self.softmax = nn.Softmax(dim=-1)\n", + "\n", + " def forward(self, x, mask=None):\n", + " B_, N, C = x.shape\n", + " qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n", + " q, k, v = qkv[0], qkv[1], qkv[2]\n", + "\n", + " q = q * self.scale\n", + " attn = q @ k.transpose(-2, -1)\n", + "\n", + " relative_position_bias = self.relative_position_bias_table[\n", + " self.relative_position_index.view(-1)\n", + " ].view(\n", + " self.window_size[0] * self.window_size[1],\n", + " self.window_size[0] * self.window_size[1],\n", + " -1,\n", + " )\n", + " relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n", + " attn = attn + relative_position_bias.unsqueeze(0)\n", + "\n", + " if mask is not None:\n", + " nW = mask.shape[0]\n", + " attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n", + " attn = attn.view(-1, self.num_heads, N, N)\n", + " attn = self.softmax(attn)\n", + " else:\n", + " attn = self.softmax(attn)\n", + "\n", + " attn = self.attn_drop(attn)\n", + "\n", + " x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n", + " x = self.proj(x)\n", + " x = self.proj_drop(x)\n", + " return x\n", + "\n", + "class TransformerLSABlock(nn.Module):\n", + " \"\"\"\n", + " A Transformer block with LayerNorm, Multi-Head Self-Attention, and a Feed-Forward Network.\n", + " This is a standard component for transformer architectures.\n", + " \"\"\"\n", + " def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n", + " super(TransformerLSABlock, self).__init__()\n", + " self.norm1 = nn.LayerNorm(embed_dim)\n", + " self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n", + " self.norm2 = nn.LayerNorm(embed_dim)\n", + " self.mlp = nn.Sequential(\n", + " nn.Linear(embed_dim, num_hidden_neurons),\n", + " activation_function(),\n", + " nn.Dropout(dropout),\n", + " nn.Linear(num_hidden_neurons, embed_dim),\n", + " nn.Dropout(dropout)\n", + " )\n", + " self.dropout = nn.Dropout(dropout)\n", + "\n", + " def forward(self, x):\n", + " # Multi-Head Self-Attention\n", + " x_norm = self.norm1(x)\n", + " attn_output, _ = self.attn(x_norm, x_norm, x_norm)\n", + " x = x + self.dropout(attn_output)\n", + "\n", + " # Feed-Forward Network\n", + " x_norm = self.norm2(x)\n", + " mlp_output = self.mlp(x_norm)\n", + " x = x + self.dropout(mlp_output)\n", + " return x\n", + "\n", + "class SwinTransformerBlock(nn.Module):\n", + " r\"\"\" Swin Transformer Block.\"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " num_heads,\n", + " window_size=(5, 5),\n", + " shift_size=(0, 0),\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " act_layer=nn.GELU,\n", + " norm_layer=nn.LayerNorm,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.num_heads = num_heads\n", + " self.window_size = window_size\n", + " self.shift_size = shift_size\n", + " self.mlp_ratio = mlp_ratio\n", + "\n", + " if min(self.input_resolution) <= min(self.window_size):\n", + " self.shift_size = (0, 0)\n", + " self.window_size = self.input_resolution\n", + "\n", + " assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n", + " assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n", + "\n", + " self.norm1 = norm_layer(dim)\n", + " self.attn = WindowAttention(\n", + " dim,\n", + " window_size=self.window_size,\n", + " num_heads=num_heads,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " attn_drop=attn_drop,\n", + " proj_drop=drop,\n", + " )\n", + "\n", + " self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n", + " self.norm2 = norm_layer(dim)\n", + " mlp_hidden_dim = int(dim * mlp_ratio)\n", + " self.mlp = Mlp(\n", + " in_features=dim,\n", + " hidden_features=mlp_hidden_dim,\n", + " act_layer=act_layer,\n", + " drop=drop,\n", + " )\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " H, W = self.input_resolution\n", + " img_mask = torch.zeros((1, H, W, 1))\n", + " h_slices = (\n", + " slice(0, -self.window_size[0]),\n", + " slice(-self.window_size[0], -self.shift_size[0]),\n", + " slice(-self.shift_size[0], None),\n", + " )\n", + " w_slices = (\n", + " slice(0, -self.window_size[1]),\n", + " slice(-self.window_size[1], -self.shift_size[1]),\n", + " slice(-self.shift_size[1], None),\n", + " )\n", + " cnt = 0\n", + " for h in h_slices:\n", + " for w in w_slices:\n", + " img_mask[:, h, w, :] = cnt\n", + " cnt += 1\n", + "\n", + " mask_windows = window_partition(img_mask, self.window_size)\n", + " mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n", + " attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n", + " attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n", + " attn_mask == 0, float(0.0)\n", + " )\n", + " else:\n", + " attn_mask = None\n", + "\n", + " self.register_buffer(\"attn_mask\", attn_mask)\n", + "\n", + " def forward(self, x):\n", + " H, W = self.input_resolution\n", + " B, L, C = x.shape\n", + " assert L == H * W, \"input feature has wrong size\"\n", + "\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x = x.view(B, H, W, C)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " shifted_x = x\n", + "\n", + " x_windows = window_partition(shifted_x, self.window_size)\n", + " x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n", + "\n", + " attn_windows = self.attn(x_windows, mask=self.attn_mask)\n", + "\n", + " attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n", + " shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " x = shifted_x\n", + " x = x.view(B, H * W, C)\n", + "\n", + " x = shortcut + self.drop_path(x)\n", + " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", + "\n", + " return x\n", + "\n", + "\n", + "class BasicLayer(nn.Module):\n", + " \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " depth,\n", + " num_heads,\n", + " window_size,\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " norm_layer=nn.LayerNorm,\n", + " downsample=None,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.depth = depth\n", + "\n", + " self.blocks = nn.ModuleList(\n", + " [\n", + " SwinTransformerBlock(\n", + " dim=dim,\n", + " input_resolution=input_resolution,\n", + " num_heads=num_heads,\n", + " window_size=window_size,\n", + " shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n", + " mlp_ratio=mlp_ratio,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " drop=drop,\n", + " attn_drop=attn_drop,\n", + " drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n", + " norm_layer=norm_layer,\n", + " )\n", + " for i in range(depth)\n", + " ]\n", + " )\n", + "\n", + " if downsample is not None:\n", + " self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n", + " else:\n", + " self.downsample = None\n", + "\n", + " def forward(self, x):\n", + " for blk in self.blocks:\n", + " x = blk(x)\n", + " if self.downsample is not None:\n", + " x = self.downsample(x)\n", + " return x\n", + "\n", + "\n", + "class PatchEmbed(nn.Module):\n", + " r\"\"\" Image to Patch Embedding \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n", + " super().__init__()\n", + " self.img_size = img_size\n", + " self.patch_size = patch_size\n", + " self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n", + " self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n", + " self.in_chans = in_chans\n", + " self.embed_dim = embed_dim\n", + "\n", + " self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n", + " if norm_layer is not None:\n", + " self.norm = norm_layer(embed_dim)\n", + " else:\n", + " self.norm = None\n", + "\n", + " def forward(self, x):\n", + " B, C, H, W = x.shape\n", + " assert H == self.img_size[0] and W == self.img_size[1], \\\n", + " f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n", + " x = self.proj(x).flatten(2).transpose(1, 2)\n", + " if self.norm is not None:\n", + " x = self.norm(x)\n", + " return x\n", + "\n", + "class RelativisticPhysicalInformedEncoder(nn.Module):\n", + " \"\"\"\n", + " A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n", + "\n", + " Attributes:\n", + " pixel_scale (float): The scale of each pixel in the image, often in arcseconds per pixel.\n", + " profile_size (int): The size of the image profile.\n", + " half_profile_size (int): Half of the profile size.\n", + " num_patches (int): Number of patches.\n", + " embed_dim (int): Dimension of the embedding.\n", + " num_heads (int): Number of heads in the transformer.\n", + " num_hidden_neurons (int): Number of hidden neurons.\n", + " eps (float): Float number used to avoid division by zero.\n", + " transformer_activation_function (nn.Module): Activation function used in the transformer.\n", + " num_transformer_blocks (int): Number of transformer blocks.\n", + " device (torch.device): Device to which tensors will be moved.\n", + " transformer (nn.ModuleList): List of transformer blocks.\n", + " num_neurons_flatten (int): Number of neurons in the Flatten layer.\n", + " grid_x (Tensor): Grid of x coordinates.\n", + " grid_y (Tensor): Grid of y coordinates.\n", + " flat_grid_x (Tensor): Flattened grid of x coordinates.\n", + " flat_grid_y (Tensor): Flattened grid of y coordinates.\n", + " \"\"\"\n", + " def __init__( self,\n", + " image_size: int,\n", + " patch_size: int ,\n", + " embed_dim: int,\n", + " num_patches: int,\n", + " num_heads: int,\n", + " num_hidden_neurons: int,\n", + " transformer_activation_function: nn.Module,\n", + " num_transformer_blocks: int,\n", + " device: torch.device,\n", + " dropout: float = 0.1,\n", + " pixel_scale:float =0.101,\n", + " k_min: float = 0.8,\n", + " k_max: float = 1.2,\n", + " eps: float = 1e-8\n", + " ):\n", + "\n", + "\n", + " \"\"\"\n", + " Initialize the module.\n", + "\n", + " Args:\n", + " image_size (int): The size of the image.\n", + " patch_size (int): The size of each patch.\n", + " embed_dim (int): The embedding dimension.\n", + " num_patches (int): The number of patches.\n", + " num_heads (int): The number of heads in the transformer.\n", + " num_hidden_neurons (int): The number of hidden neurons.\n", + " transformer_activation_function (nn.Module): The activation function used in the transformer.\n", + " num_transformer_blocks (int): The number of transformer blocks.\n", + " device (torch.device): The device to which tensors will be moved.\n", + " dropout (float, optional): The dropout rate. Defaults to 0.1.\n", + " pixel_scale (float, optional): The scale of each pixel in the image, often in arcseconds per pixel. Defaults to 0.101.\n", + " k_min (float, optional): Minimum value of the potential correction parameter. Defaults to 0.8.\n", + " k_max (float, optional): Maximum value of the potencial correction parameter. Defaults to 1.2.\n", + " eps (float): Float number used to avoid division by zero. Defaluts to 1e-8.\n", + " \"\"\"\n", + "\n", + " super(RelativisticPhysicalInformedEncoder, self).__init__()\n", + "\n", + " # Initialize variables\n", + " self.pixel_scale = pixel_scale\n", + " self.profile_size = image_size\n", + " self.half_profile_size = self.profile_size // 2\n", + " self.num_patches = num_patches\n", + " self.embed_dim = embed_dim\n", + " self.num_heads = num_heads\n", + " self.num_hidden_neurons = num_hidden_neurons\n", + " self.transformer_activation_function = transformer_activation_function\n", + " self.num_transformer_blocks = num_transformer_blocks\n", + " self.device = device\n", + " self.k_min = k_min\n", + " self.k_max = k_max\n", + " self.eps = eps\n", + "\n", + " # Create an empty list for the transformer blocks\n", + " self.transformer = nn.ModuleList()\n", + "\n", + " # Calculate the number of neurons for the Flatten layer\n", + " self.num_neurons_flatten = (self.num_patches)*embed_dim\n", + "\n", + " # Create a for loop that iterates over the number of transformer blocks\n", + " for _ in range(num_transformer_blocks):\n", + " # Add a TransformerLSABlock to the transformer list\n", + " self.transformer.append(\n", + "\n", + " TransformerLSABlock(embed_dim,\n", + " num_heads,\n", + " self.num_patches,\n", + " num_hidden_neurons,\n", + " transformer_activation_function,\n", + " device,\n", + " dropout)\n", + " )\n", + "\n", + " # Create a compressor (FeedFoward) compress the size of num_neurons_flatten\n", + " self.transformer.append(nn.Flatten())\n", + " self.transformer.append(nn.Linear(self.num_neurons_flatten,self.profile_size*self.profile_size))\n", + " self.transformer.append(nn.Sigmoid())\n", + "\n", + " # Create a grid for image coordinates\n", + " x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size-1, self.profile_size) * self.pixel_scale\n", + " y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size-1, self.profile_size) * self.pixel_scale\n", + " self.grid_x, self.grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n", + " self.flat_grid_x = self.grid_x.flatten().to(self.device)\n", + " self.flat_grid_y = self.grid_y.flatten().to(self.device)\n", + "\n", + "\n", + " def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n", + "\n", + " \"\"\"\n", + " Forward pass through the module.\n", + "\n", + " Args:\n", + " input_images (torch.Tensor): The input images.\n", + " patches (torch.Tensor): The patches extracted from the images.\n", + "\n", + " Returns:\n", + " output_images (torch.Tensor): The output images after inverse gravitational lensing.\n", + " \"\"\"\n", + "\n", + " # Get the batch size from the input images\n", + " batch_size = input_images.shape[0]\n", + "\n", + " # Generate k using the sequential model\n", + " k_sigmoid = patches\n", + " for layer in self.transformer:\n", + " k_sigmoid = layer(k_sigmoid)\n", + "\n", + " # Reshape k_sigmoid to have shape [batch_size, profile_size, profile_size]\n", + " k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n", + "\n", + " # Flatten k_sigmoid to match the shape of non_zero_x and non_zero_radius\n", + " k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size*self.profile_size)\n", + "\n", + " # Bias and Scalling\n", + " k_sigmoid_flat = self.k_min + (self.k_max-self.k_min)*k_sigmoid_flat\n", + "\n", + " # Flatten the input images for easier indexing\n", + " flat_input_images = input_images.view(batch_size, -1)\n", + "\n", + " # Create a mask for non-zero coordinates in the grid\n", + " non_zero_mask = (self.flat_grid_x != 0) | (self.flat_grid_y != 0)\n", + "\n", + " # Select only the non-zero indices to match with non_zero_x and non_zero_radius\n", + " k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n", + "\n", + " # Get the shape of k_sigmoid_non_zero\n", + " shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n", + "\n", + " # Reshape k to have a batch dimension compatible for broadcasting\n", + " k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n", + "\n", + " # Apply the mask to get non-zero coordinates\n", + " non_zero_x = self.flat_grid_x[non_zero_mask]\n", + " non_zero_y = self.flat_grid_y[non_zero_mask]\n", + "\n", + " # Calculate the radius for non-zero coordinates\n", + " non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n", + "\n", + " # Expand dimensions for broadcasting\n", + " non_zero_radius = non_zero_radius[None, None, None, :]\n", + "\n", + " # Compute shifted coordinates based on the Gravitational Lens Equation to SIS model\n", + " shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps) )\n", + " shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps) )\n", + "\n", + " # Convert shifted coordinates to indices in the image grid\n", + " shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n", + " shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n", + "\n", + " # Clamp indices to be within the valid range\n", + " shifted_x_idx = torch.clamp(shifted_x_idx, 0, self.profile_size - 1)\n", + " shifted_y_idx = torch.clamp(shifted_y_idx, 0, self.profile_size - 1)\n", + "\n", + "\n", + " # Initialize the output image tensor and flatten it\n", + " output_images = torch.zeros(batch_size, self.profile_size, self.profile_size).to(self.device)\n", + " flat_output_images = output_images.view(batch_size, -1)\n", + "\n", + " # Calculate 1D indices from shifted_x_idx and shifted_y_idx\n", + " one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n", + "\n", + " # Flatten the input images for easier indexing\n", + " flat_input_images = input_images.view(batch_size, -1)\n", + "\n", + " # Get the current values at the shifted positions in the flat output images\n", + " output_values_at_shifted_positions = flat_output_images.gather(1, one_d_indices.view(batch_size, -1))\n", + "\n", + " # Get the corresponding values from the original positions in the flat input images\n", + " input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n", + "\n", + " # Update the output image based on the algorithm\n", + " updated_values = torch.where(output_values_at_shifted_positions == 0,\n", + " input_values_at_original_positions,\n", + " (output_values_at_shifted_positions + input_values_at_original_positions) / 2)\n", + "\n", + " # Assign the updated values back to the flat output images\n", + " flat_output_images.scatter_(1, one_d_indices.view(batch_size, -1), updated_values)\n", + "\n", + " # Reshape the flat output images back to their original shape\n", + " output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n", + "\n", + "\n", + " # Normalize the output images\n", + " max_values, _ = output_images.max(dim=1, keepdim=True)\n", + " max_values, _ = max_values.max(dim=2, keepdim=True)\n", + " output_images = output_images / (max_values + self.eps)\n", + "\n", + " return output_images.unsqueeze(1) # Add channel dimension back\n", + "\n", + "\n", + "class HEAL_Swin(nn.Module):\n", + " \"\"\"\n", + " Swin Transformer with a Relativistic Physical Informed Encoder.\n", + " This model first applies a physics-informed transformation to the input image\n", + " before processing it with the Swin Transformer for classification.\n", + " \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n", + " embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n", + " window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n", + " drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n", + " norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n", + " # Relativistic Encoder Params\n", + " relativistic_encoder_params=None,\n", + " device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", + " **kwargs):\n", + " super().__init__()\n", + "\n", + " self.num_classes = num_classes\n", + " self.num_layers = len(depths)\n", + " self.embed_dim = embed_dim\n", + " self.ape = ape\n", + " self.patch_norm = patch_norm\n", + " self.num_features = int(embed_dim)\n", + " self.mlp_ratio = mlp_ratio\n", + " self.device = device\n", + "\n", + " # Split image into non-overlapping patches\n", + " self.patch_embed = PatchEmbed(\n", + " img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n", + " norm_layer=norm_layer if self.patch_norm else None)\n", + " num_patches = self.patch_embed.num_patches\n", + " patches_resolution = self.patch_embed.patches_resolution\n", + " self.patches_resolution = patches_resolution\n", + "\n", + " # Relativistic Physical Informed Encoder\n", + " if relativistic_encoder_params is None:\n", + " relativistic_encoder_params = {\n", + " 'image_size': img_size[0],\n", + " 'patch_size': patch_size[0],\n", + " 'embed_dim': embed_dim,\n", + " 'num_patches': num_patches,\n", + " 'num_heads': num_heads[0],\n", + " 'num_hidden_neurons': int(embed_dim * mlp_ratio),\n", + " 'transformer_activation_function': nn.GELU,\n", + " 'num_transformer_blocks': 2,\n", + " 'device': self.device\n", + " }\n", + " self.relativistic_encoder = RelativisticPhysicalInformedEncoder(**relativistic_encoder_params)\n", + "\n", + "\n", + " # Absolute position embedding\n", + " if self.ape:\n", + " self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n", + " trunc_normal_(self.absolute_pos_embed, std=.02)\n", + "\n", + " self.pos_drop = nn.Dropout(p=drop_rate)\n", + "\n", + " # Stochastic depth\n", + " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n", + "\n", + " # Build layers\n", + " self.layers = nn.ModuleList()\n", + " layer = BasicLayer(dim=int(embed_dim),\n", + " input_resolution=patches_resolution,\n", + " depth=sum(depths),\n", + " num_heads=num_heads[0],\n", + " window_size=window_size,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=qkv_bias, qk_scale=qk_scale,\n", + " drop=drop_rate, attn_drop=attn_drop_rate,\n", + " drop_path=dpr,\n", + " norm_layer=norm_layer,\n", + " downsample=None)\n", + " self.layers.append(layer)\n", + "\n", + " self.norm = norm_layer(self.num_features)\n", + " self.avgpool = nn.AdaptiveAvgPool1d(1)\n", + " self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n", + "\n", + " self.apply(self._init_weights)\n", + "\n", + " def _init_weights(self, m):\n", + " if isinstance(m, nn.Linear):\n", + " trunc_normal_(m.weight, std=.02)\n", + " if isinstance(m, nn.Linear) and m.bias is not None:\n", + " nn.init.constant_(m.bias, 0)\n", + " elif isinstance(m, nn.LayerNorm):\n", + " nn.init.constant_(m.bias, 0)\n", + " nn.init.constant_(m.weight, 1.0)\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay(self):\n", + " return {'absolute_pos_embed'}\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay_keywords(self):\n", + " return {'relative_position_bias_table'}\n", + "\n", + " def forward_features(self, x):\n", + " # First, get the patches\n", + " patches = self.patch_embed(x)\n", + "\n", + " # Pass original image and patches to the relativistic encoder\n", + " x_encoded = self.relativistic_encoder(x, patches)\n", + "\n", + " # Now, embed the encoded image\n", + " x = self.patch_embed(x_encoded)\n", + "\n", + " if self.ape:\n", + " x = x + self.absolute_pos_embed\n", + " x = self.pos_drop(x)\n", + "\n", + " for layer in self.layers:\n", + " x = layer(x)\n", + "\n", + " x = self.norm(x)\n", + " x = self.avgpool(x.transpose(1, 2))\n", + " x = torch.flatten(x, 1)\n", + " return x\n", + "\n", + " def forward(self, x):\n", + " x = self.forward_features(x)\n", + " x = self.head(x)\n", + " return x\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122600, + "status": "aborted", + "timestamp": 1758136378454, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "hivvAHcI41JJ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "#!pip install torch_xla[tpu]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122604, + "status": "aborted", + "timestamp": 1758136378459, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "GtiRNfT34-6a" + }, + "outputs": [], + "source": [ + "#import torch_xla" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122607, + "status": "aborted", + "timestamp": 1758136378463, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "Q3rnNlt1_txE" + }, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from sklearn.metrics import roc_auc_score, roc_curve, auc\n", + "from sklearn.preprocessing import label_binarize\n", + "import copy\n", + "import matplotlib.pyplot as plt\n", + "from itertools import cycle\n", + "\n", + "def plot_roc_curve(all_labels, all_probs, class_names):\n", + " \"\"\"\n", + " Plots the ROC curve for each class and the micro/macro averages.\n", + " \"\"\"\n", + " # Binarize the labels for multi-class ROC analysis\n", + " all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n", + " all_probs = np.array(all_probs)\n", + "\n", + " # Compute ROC curve and ROC area for each class\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " for i in range(len(class_names)):\n", + " fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " # Compute micro-average ROC curve and ROC area\n", + " fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n", + " roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", + "\n", + " # Compute macro-average ROC curve and ROC area\n", + " # First aggregate all false positive rates\n", + " all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n", + " # Then interpolate all ROC curves at these points\n", + " mean_tpr = np.zeros_like(all_fpr)\n", + " for i in range(len(class_names)):\n", + " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", + " # Finally average it and compute AUC\n", + " mean_tpr /= len(class_names)\n", + " fpr[\"macro\"] = all_fpr\n", + " tpr[\"macro\"] = mean_tpr\n", + " roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", + "\n", + " # Plot all ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + "\n", + " plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n", + " label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n", + " color='deeppink', linestyle=':', linewidth=4)\n", + "\n", + " plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n", + " label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n", + " color='navy', linestyle=':', linewidth=4)\n", + "\n", + " colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n", + " for i, color in zip(range(len(class_names)), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color, lw=2,\n", + " label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--', lw=2)\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin_pinn.png\")\n", + " print(\"\\nROC curve plot saved as roc_curve.png\")\n", + "\n", + "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", + "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n", + " \"\"\"\n", + " Trains the model with early stopping based on validation ROC AUC score.\n", + "\n", + " Args:\n", + " model (torch.nn.Module): The neural network model to train.\n", + " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", + " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", + " criterion: The loss function.\n", + " optimizer: The optimization algorithm.\n", + " scheduler: The learning rate scheduler.\n", + " num_epochs (int): The maximum number of epochs to train for.\n", + " patience (int): Number of epochs to wait for improvement before stopping.\n", + " \"\"\"\n", + " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + " print(f\"Training on device: {device}\")\n", + "\n", + " model.to(device)\n", + "\n", + " best_roc_auc = 0.0\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = []\n", + " best_labels = []\n", + "\n", + " class_names = ['axion', 'cdm', 'no_sub']\n", + "\n", + " for epoch in range(num_epochs):\n", + " print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n", + "\n", + " # --- Training Phase ---\n", + " model.train()\n", + " train_loss = 0.0\n", + " train_correct = 0\n", + "\n", + " for images, labels in train_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " scheduler.step()\n", + "\n", + " train_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " train_correct += (predicted == labels).sum().item()\n", + "\n", + " # --- Validation Phase ---\n", + " model.eval()\n", + " val_loss = 0.0\n", + " val_correct = 0\n", + " all_probs = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for images, labels in val_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " val_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " val_correct += (predicted == labels).sum().item()\n", + "\n", + " probs = torch.softmax(outputs, dim=1)\n", + " all_probs.extend(probs.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " # --- Calculate Metrics ---\n", + " train_loss = train_loss / len(train_loader.dataset)\n", + " val_loss = val_loss / len(val_loader.dataset)\n", + " train_accuracy = train_correct / len(train_loader.dataset)\n", + " val_accuracy = val_correct / len(val_loader.dataset)\n", + "\n", + " # Calculate multi-class ROC AUC score\n", + " all_labels_np = np.array(all_labels)\n", + " all_probs_np = np.array(all_probs)\n", + " try:\n", + " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", + " except ValueError as e:\n", + " print(f\"Could not calculate ROC AUC: {e}\")\n", + " val_roc_auc = 0.0\n", + "\n", + " # Epoch-level summary\n", + " #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", + " #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", + " #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", + "\n", + " if val_roc_auc > best_roc_auc:\n", + " best_roc_auc = val_roc_auc\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = all_probs\n", + " best_labels = all_labels\n", + " #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", + " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + " else:\n", + " epochs_no_improve += 1\n", + " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + "\n", + " if epochs_no_improve >= patience:\n", + " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", + " model.load_state_dict(best_model_wts)\n", + " break\n", + "\n", + " print(\"\\nTraining Complete!\")\n", + " model.load_state_dict(best_model_wts)\n", + "\n", + " # After the training loop, plot the ROC curve for the best model\n", + " if best_probs and best_labels:\n", + " plot_roc_curve(best_labels, best_probs, class_names)\n", + "\n", + " return model, best_probs, best_labels" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122606, + "status": "aborted", + "timestamp": 1758136378466, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "9QBIRCLEkikD" + }, + "outputs": [], + "source": [ + "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122601, + "status": "aborted", + "timestamp": 1758136378470, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "-ZJepKUw_txF" + }, + "outputs": [], + "source": [ + "\"\"\"\n", + "Args:\n", + " image_size (int): Size of the input image (e.g., 224).\n", + " patch_size (int): Size of each patch (e.g., 16).\n", + " in_channels (int): Number of input channels (e.g., 1 for your task).\n", + " num_classes (int): Number of output classes (e.g., 3 for your task).\n", + " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", + " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", + " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", + " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", + " dropout (float): Dropout probability.\n", + "\"\"\"\n", + "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", + "batch_size = 32\n", + "learning_rate = 1e-4\n", + "weight_decay = 0.05\n", + "num_epochs = 2000\n", + "warmup_epochs = 10\n", + "\"\"\"\n", + "model = SwinTransformerForClassification(\n", + " img_size=(150, 150),\n", + " patch_size=(10, 10),\n", + " in_chans=1,\n", + " num_classes=3, # Same number of classes as the ViT example\n", + " embed_dim=48,\n", + " depths=[2, 2, 2, 2],\n", + " num_heads=[3, 6, 12, 24],\n", + " window_size=(5, 5),\n", + " drop_path_rate=0.2,\n", + " )\"\"\"\n", + "model = HEAL_Swin(img_size=(64, 64), patch_size=(8, 8), num_classes=3, window_size=(8, 8))\n", + "\n", + "\n", + "criterion = nn.CrossEntropyLoss(label_smoothing=0.1)\n", + "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=0.05)\n", + "\n", + "\n", + "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", + "def warmup_lambda(current_epoch):\n", + " if current_epoch < warmup_epochs:\n", + " return float(current_epoch) / float(max(1, warmup_epochs))\n", + " return 1.0\n", + "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", + "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", + "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", + "\n", + "\n", + "print(\"Optimizer: Adam\")\n", + "print(f\"Learning Rate: {learning_rate}\")\n", + "\n", + "# Train Model\n", + "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_-lEQtu_txF" + }, + "source": [ + "\"\"\" ROC Curve Plotting Function\"\"\"\n", + "def plot_roc_curve(all_preds, all_labels):\n", + " print(\"Generating ROC Curve\")\n", + "\n", + " # Convert predictions and labels to numpy arrays\n", + " all_preds = np.array(all_preds)\n", + " all_labels = np.array(all_labels)\n", + "\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " n_classes = 3\n", + "\n", + " for i in range(n_classes):\n", + " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", + "\n", + " # Plot ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + " colors = ['blue', 'red', 'green']\n", + " class_names = ['Axion', 'CDM', 'No Substructure']\n", + "\n", + " for i, color in zip(range(n_classes), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color,\n", + " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin_pinn.png')\n", + " plt.close()\n", + "\n", + " print(\"ROC Curve saved as roc_curve.png\")\n", + "\n", + "\n", + "plot_roc_curve(all_probs, all_labels)\n", + "\n", + "print(\"Training and Evaluation Complete!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 122603, + "status": "aborted", + "timestamp": 1758136378474, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "MZ59pFZa_txG" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "machine_shape": "hm", + "provenance": [ + { + "file_id": "1r40O3vAh8rRdhVOou48Z6yaV7mWYApFU", + "timestamp": 1756334887300 + }, + { + "file_id": "1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf", + "timestamp": 1756245539652 + }, + { + "file_id": "1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28", + "timestamp": 1756243482189 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin.ipynb b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin.ipynb index 822b969..b8833f5 100644 --- a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin.ipynb +++ b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer heal swin.ipynb @@ -1 +1,5174 @@ -{"cells":[{"cell_type":"markdown","source":[],"metadata":{"id":"X7Ekxmo1XV5I"}},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_mFRKD8F__hl","executionInfo":{"status":"ok","timestamp":1756365937140,"user_tz":300,"elapsed":20693,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}},"outputId":"2a20cbd3-8d3c-45c9-cebf-e631c97bb519"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vRM2kxST8KJZ"},"outputs":[],"source":["\n","\n","\"\"\"Import dependencies\"\"\"\n","import os\n","import numpy as np\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import Dataset, DataLoader\n","from torchvision.models import resnet18\n","from sklearn.metrics import roc_curve, auc\n","import matplotlib.pyplot as plt"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9Dm6SC1o_txB"},"outputs":[],"source":["\n","class MyDatasetViT(Dataset):\n"," def __init__(self, data_dir, transform=None):\n"," self.data = []\n"," self.labels = []\n"," self.class_names = ['axion', 'cdm', 'no_sub']\n"," self.transform = transform\n","\n"," print(f\"Loading dataset from: {data_dir}\")\n"," print(f\"Looking for classes: {self.class_names}\")\n","\n"," for idx, class_name in enumerate(self.class_names):\n"," class_dir = os.path.join(data_dir, class_name)\n"," print(f\"--- Processing class: {class_name} ---\")\n","\n"," if not os.path.exists(class_dir):\n"," print(f\"[ERROR] Directory not found: {class_dir}\")\n"," continue\n","\n"," files = os.listdir(class_dir)\n","\n"," for file_name in files:\n"," if file_name.endswith('.npy'):\n"," file_path = os.path.join(class_dir, file_name)\n"," loaded_data = np.load(file_path, allow_pickle=True)\n","\n"," if class_name == 'axion':\n"," image = loaded_data[0]\n"," else:\n"," image = loaded_data\n","\n"," # [DEBUG] Print the shape of the raw numpy array\n"," print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n","\n"," # Ensure the image is a 2D array (H, W) before adding channel dimension.\n"," if image.ndim != 2:\n"," image = np.squeeze(image)\n","\n"," # Convert to a float tensor and add a channel dimension -> [1, H, W]\n"," image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n","\n"," # [DEBUG] Print the shape of the final tensor being stored in the dataset\n"," print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n","\n"," self.data.append(image_tensor)\n"," self.labels.append(idx)\n","\n"," print(\"\\n--- Dataset Loading Complete ---\")\n"," print(f\"Total images loaded: {len(self.data)}\")\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," \"\"\"\n"," This method is called by the DataLoader to get one item from the dataset.\n"," The debug prints here are CRITICAL for finding the error.\n"," \"\"\"\n"," #print(f\"--- Getting item index: {idx} ---\")\n","\n"," # Retrieve the pre-loaded tensor and its label\n"," image = self.data[idx]\n"," label = self.labels[idx]\n","\n"," # [DEBUG] Print shape BEFORE the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n","\n"," # Apply transformations (e.g., resizing) if they are provided\n"," if self.transform:\n"," image = self.transform(image)\n"," # [DEBUG] Print shape AFTER the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n"," else:\n"," #print(\" [DEBUG] No transform was applied.\")\n"," pass\n","\n"," return image, label"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"VJEgowwT_txC","outputId":"91ab4198-a7df-4316-fbbd-bf27059cd455","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1756365948295,"user_tz":300,"elapsed":11,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n"]}],"source":["\n","# Import the transforms module\n","from torchvision import transforms\n","# Hyperparameters\n","batch_size = 32\n","learning_rate = 0.001\n","num_epochs = 100\n","\n","# Data Directories\n","train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n","#val_dir = '../dataset/dataset/val'\n","\n","print(f\"Training Directory: {train_dir}\")\n","#print(f\"Validation Directory: {val_dir}\")\n","\n","vit_transforms = transforms.Compose([\n"," # transforms.ToTensor(), # Removed ToTensor()\n"," transforms.RandomHorizontalFlip(p=0.5),\n"," transforms.RandomVerticalFlip(p=0.5),\n"," transforms.RandomRotation(degrees=90), # Can be any angle range\n","])\n","\n","# Create Datasets and Dataloaders\n","#train_dataset = MyDataset(train_dir)\n","#val_dataset = MyDataset(val_dir)\n","#dataset = MyDatasetViT(train_dir, vit_transforms)\n","#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n","\n","#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n","#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n","\n","#print(f\"Batch Size: {batch_size}\")\n","#print(f\"Number of Training Batches: {len(train_loader)}\")\n","#print(f\"Number of Validation Batches: {len(val_loader)}\")\n","\n","#Save the dataloader so that we don't have to bear with this pain again\n","#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n","#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')"]},{"cell_type":"code","source":["#import data loaders from file\n","train_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_train_loader.pth', weights_only=False)\n","val_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_val_loader.pth', weights_only=False)"],"metadata":{"id":"gvqsjdgzKmOL"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"y6Q9I1Hw_txD","executionInfo":{"status":"ok","timestamp":1756365957514,"user_tz":300,"elapsed":3610,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"5fcd5ffa-f86d-4bf0-ff57-cb2720b113d4"},"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n"," warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n"]}],"source":["\"\"\"\n","This implementation of the SWIN Transformer was adapted from the SWIN-UNet at\n","https://github.com/HuCaoFighting/Swin-Unet/blob/main/networks/swin_transformer_unet_skip_expand_decoder_sys.py\n","and modified for image classification tasks on specific input dimensions.\n","\"\"\"\n","\n","from dataclasses import dataclass, field\n","from typing import Optional, List, Literal, Union, Tuple\n","\n","import torch\n","import torch.nn as nn\n","import torch.utils.checkpoint as checkpoint\n","from timm.models.layers import DropPath, trunc_normal_\n","\n","\n","class Mlp(nn.Module):\n"," \"\"\" Multi-Layer Perceptron \"\"\"\n"," def __init__(\n"," self,\n"," in_features,\n"," hidden_features=None,\n"," out_features=None,\n"," act_layer=nn.GELU,\n"," drop=0.0,\n"," ):\n"," super().__init__()\n"," out_features = out_features or in_features\n"," hidden_features = hidden_features or in_features\n"," self.fc1 = nn.Linear(in_features, hidden_features)\n"," self.act = act_layer()\n"," self.fc2 = nn.Linear(hidden_features, out_features)\n"," self.drop = nn.Dropout(drop)\n","\n"," def forward(self, x):\n"," x = self.fc1(x)\n"," x = self.act(x)\n"," x = self.drop(x)\n"," x = self.fc2(x)\n"," x = self.drop(x)\n"," return x\n","\n","\n","def window_partition(x, window_size):\n"," \"\"\"\n"," Partitions the input tensor into non-overlapping windows.\n"," Args:\n"," x: (B, H, W, C)\n"," window_size (tuple[int]): Window size (height, width).\n","\n"," Returns:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," \"\"\"\n"," B, H, W, C = x.shape\n"," x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n"," windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n"," return windows\n","\n","\n","def window_reverse(windows, window_size, H, W):\n"," \"\"\"\n"," Reverses the window partitioning.\n"," Args:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," window_size (tuple[int]): Window size (height, width).\n"," H (int): Height of image.\n"," W (int): Width of image.\n","\n"," Returns:\n"," x: (B, H, W, C)\n"," \"\"\"\n"," B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n"," x = windows.view(\n"," B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n"," )\n"," x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n"," return x\n","\n","\n","class WindowAttention(nn.Module):\n"," r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n"," It supports both shifted and non-shifted windows.\n"," \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," window_size,\n"," num_heads,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," attn_drop=0.0,\n"," proj_drop=0.0,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.window_size = window_size\n"," self.num_heads = num_heads\n"," head_dim = dim // num_heads\n"," self.scale = qk_scale or head_dim**-0.5\n","\n"," # Define a parameter table of relative position bias\n"," self.relative_position_bias_table = nn.Parameter(\n"," torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n"," )\n","\n"," # Get pair-wise relative position index for each token inside the window\n"," coords_h = torch.arange(self.window_size[0])\n"," coords_w = torch.arange(self.window_size[1])\n"," coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n"," coords_flatten = torch.flatten(coords, 1)\n"," relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n"," relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n"," relative_coords[:, :, 0] += self.window_size[0] - 1\n"," relative_coords[:, :, 1] += self.window_size[1] - 1\n"," relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n"," relative_position_index = relative_coords.sum(-1)\n"," self.register_buffer(\"relative_position_index\", relative_position_index)\n","\n"," self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n"," self.attn_drop = nn.Dropout(attn_drop)\n"," self.proj = nn.Linear(dim, dim)\n"," self.proj_drop = nn.Dropout(proj_drop)\n","\n"," trunc_normal_(self.relative_position_bias_table, std=0.02)\n"," self.softmax = nn.Softmax(dim=-1)\n","\n"," def forward(self, x, mask=None):\n"," B_, N, C = x.shape\n"," qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n"," q, k, v = qkv[0], qkv[1], qkv[2]\n","\n"," q = q * self.scale\n"," attn = q @ k.transpose(-2, -1)\n","\n"," relative_position_bias = self.relative_position_bias_table[\n"," self.relative_position_index.view(-1)\n"," ].view(\n"," self.window_size[0] * self.window_size[1],\n"," self.window_size[0] * self.window_size[1],\n"," -1,\n"," )\n"," relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n"," attn = attn + relative_position_bias.unsqueeze(0)\n","\n"," if mask is not None:\n"," nW = mask.shape[0]\n"," attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n"," attn = attn.view(-1, self.num_heads, N, N)\n"," attn = self.softmax(attn)\n"," else:\n"," attn = self.softmax(attn)\n","\n"," attn = self.attn_drop(attn)\n","\n"," x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n"," x = self.proj(x)\n"," x = self.proj_drop(x)\n"," return x\n","\n","\n","class SwinTransformerBlock(nn.Module):\n"," r\"\"\" Swin Transformer Block.\"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," num_heads,\n"," window_size=(5, 5),\n"," shift_size=(0, 0),\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," act_layer=nn.GELU,\n"," norm_layer=nn.LayerNorm,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.num_heads = num_heads\n"," self.window_size = window_size\n"," self.shift_size = shift_size\n"," self.mlp_ratio = mlp_ratio\n","\n"," if min(self.input_resolution) <= min(self.window_size):\n"," self.shift_size = (0, 0)\n"," self.window_size = self.input_resolution\n","\n"," assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n"," assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n","\n"," self.norm1 = norm_layer(dim)\n"," self.attn = WindowAttention(\n"," dim,\n"," window_size=self.window_size,\n"," num_heads=num_heads,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," attn_drop=attn_drop,\n"," proj_drop=drop,\n"," )\n","\n"," self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n"," self.norm2 = norm_layer(dim)\n"," mlp_hidden_dim = int(dim * mlp_ratio)\n"," self.mlp = Mlp(\n"," in_features=dim,\n"," hidden_features=mlp_hidden_dim,\n"," act_layer=act_layer,\n"," drop=drop,\n"," )\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," H, W = self.input_resolution\n"," img_mask = torch.zeros((1, H, W, 1))\n"," h_slices = (\n"," slice(0, -self.window_size[0]),\n"," slice(-self.window_size[0], -self.shift_size[0]),\n"," slice(-self.shift_size[0], None),\n"," )\n"," w_slices = (\n"," slice(0, -self.window_size[1]),\n"," slice(-self.window_size[1], -self.shift_size[1]),\n"," slice(-self.shift_size[1], None),\n"," )\n"," cnt = 0\n"," for h in h_slices:\n"," for w in w_slices:\n"," img_mask[:, h, w, :] = cnt\n"," cnt += 1\n","\n"," mask_windows = window_partition(img_mask, self.window_size)\n"," mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n"," attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n"," attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n"," attn_mask == 0, float(0.0)\n"," )\n"," else:\n"," attn_mask = None\n","\n"," self.register_buffer(\"attn_mask\", attn_mask)\n","\n"," def forward(self, x):\n"," H, W = self.input_resolution\n"," B, L, C = x.shape\n"," assert L == H * W, \"input feature has wrong size\"\n","\n"," shortcut = x\n"," x = self.norm1(x)\n"," x = x.view(B, H, W, C)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n"," else:\n"," shifted_x = x\n","\n"," x_windows = window_partition(shifted_x, self.window_size)\n"," x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n","\n"," attn_windows = self.attn(x_windows, mask=self.attn_mask)\n","\n"," attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n"," shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n"," else:\n"," x = shifted_x\n"," x = x.view(B, H * W, C)\n","\n"," x = shortcut + self.drop_path(x)\n"," x = x + self.drop_path(self.mlp(self.norm2(x)))\n","\n"," return x\n","\n","\n","class BasicLayer(nn.Module):\n"," \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," depth,\n"," num_heads,\n"," window_size,\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," norm_layer=nn.LayerNorm,\n"," downsample=None,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.depth = depth\n","\n"," self.blocks = nn.ModuleList(\n"," [\n"," SwinTransformerBlock(\n"," dim=dim,\n"," input_resolution=input_resolution,\n"," num_heads=num_heads,\n"," window_size=window_size,\n"," shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n"," mlp_ratio=mlp_ratio,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," drop=drop,\n"," attn_drop=attn_drop,\n"," drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n"," norm_layer=norm_layer,\n"," )\n"," for i in range(depth)\n"," ]\n"," )\n","\n"," if downsample is not None:\n"," self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n"," else:\n"," self.downsample = None\n","\n"," def forward(self, x):\n"," for blk in self.blocks:\n"," x = blk(x)\n"," if self.downsample is not None:\n"," x = self.downsample(x)\n"," return x\n","\n","\n","class PatchEmbed(nn.Module):\n"," r\"\"\" Image to Patch Embedding \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n"," super().__init__()\n"," self.img_size = img_size\n"," self.patch_size = patch_size\n"," self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n"," self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n"," self.in_chans = in_chans\n"," self.embed_dim = embed_dim\n","\n"," self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n"," if norm_layer is not None:\n"," self.norm = norm_layer(embed_dim)\n"," else:\n"," self.norm = None\n","\n"," def forward(self, x):\n"," B, C, H, W = x.shape\n"," assert H == self.img_size[0] and W == self.img_size[1], \\\n"," f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n"," x = self.proj(x).flatten(2).transpose(1, 2)\n"," if self.norm is not None:\n"," x = self.norm(x)\n"," return x\n","\n","\n","class SwinTransformerForClassification(nn.Module):\n"," \"\"\"\n"," Swin Transformer adapted for classification tasks.\n"," This version removes the hierarchical structure (patch merging) and the U-Net decoder\n"," to function as a standard vision transformer, outputting class predictions.\n"," \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n"," embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n"," window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n"," drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n"," norm_layer=nn.LayerNorm, ape=False, patch_norm=True, **kwargs):\n"," super().__init__()\n","\n"," self.num_classes = num_classes\n"," self.num_layers = len(depths)\n"," self.embed_dim = embed_dim\n"," self.ape = ape\n"," self.patch_norm = patch_norm\n"," self.num_features = int(embed_dim) # No feature increase without patch merging\n"," self.mlp_ratio = mlp_ratio\n","\n"," # Split image into non-overlapping patches\n"," self.patch_embed = PatchEmbed(\n"," img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n"," norm_layer=norm_layer if self.patch_norm else None)\n"," num_patches = self.patch_embed.num_patches\n"," patches_resolution = self.patch_embed.patches_resolution\n"," self.patches_resolution = patches_resolution\n","\n"," # Absolute position embedding\n"," if self.ape:\n"," self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n"," trunc_normal_(self.absolute_pos_embed, std=.02)\n","\n"," self.pos_drop = nn.Dropout(p=drop_rate)\n","\n"," # Stochastic depth\n"," dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n","\n"," # Build layers\n"," # NOTE: This implementation removes the hierarchical structure (patch merging)\n"," # to make it compatible with the 150x150 input and behave like a standard ViT.\n"," # All layers operate at the same resolution and feature dimension.\n"," self.layers = nn.ModuleList()\n"," # For simplicity, we use a single stage of Swin blocks.\n"," # You can create multiple stages by modifying this loop.\n"," layer = BasicLayer(dim=int(embed_dim),\n"," input_resolution=patches_resolution,\n"," depth=sum(depths), # Combine all depths into one stage\n"," num_heads=num_heads[0], # Use a single head count\n"," window_size=window_size,\n"," mlp_ratio=self.mlp_ratio,\n"," qkv_bias=qkv_bias, qk_scale=qk_scale,\n"," drop=drop_rate, attn_drop=attn_drop_rate,\n"," drop_path=dpr,\n"," norm_layer=norm_layer,\n"," downsample=None) # IMPORTANT: No downsampling\n"," self.layers.append(layer)\n","\n"," self.norm = norm_layer(self.num_features)\n"," # Use Adaptive Average Pooling to get a single feature vector for classification\n"," self.avgpool = nn.AdaptiveAvgPool1d(1)\n"," self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n","\n"," self.apply(self._init_weights)\n","\n"," def _init_weights(self, m):\n"," if isinstance(m, nn.Linear):\n"," trunc_normal_(m.weight, std=.02)\n"," if isinstance(m, nn.Linear) and m.bias is not None:\n"," nn.init.constant_(m.bias, 0)\n"," elif isinstance(m, nn.LayerNorm):\n"," nn.init.constant_(m.bias, 0)\n"," nn.init.constant_(m.weight, 1.0)\n","\n"," @torch.jit.ignore\n"," def no_weight_decay(self):\n"," return {'absolute_pos_embed'}\n","\n"," @torch.jit.ignore\n"," def no_weight_decay_keywords(self):\n"," return {'relative_position_bias_table'}\n","\n"," def forward_features(self, x):\n"," x = self.patch_embed(x)\n"," if self.ape:\n"," x = x + self.absolute_pos_embed\n"," x = self.pos_drop(x)\n","\n"," for layer in self.layers:\n"," x = layer(x)\n","\n"," x = self.norm(x)\n"," # B L C -> B C L -> B C 1 -> B C\n"," x = self.avgpool(x.transpose(1, 2))\n"," x = torch.flatten(x, 1)\n"," return x\n","\n"," def forward(self, x):\n"," x = self.forward_features(x)\n"," x = self.head(x)\n"," return x"]},{"cell_type":"code","source":["\n","\n","#!pip install torch_xla[tpu]"],"metadata":{"id":"hivvAHcI41JJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["#import torch_xla"],"metadata":{"id":"GtiRNfT34-6a"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Q3rnNlt1_txE"},"outputs":[],"source":["import torch\n","import numpy as np\n","from sklearn.metrics import roc_auc_score, roc_curve, auc\n","from sklearn.preprocessing import label_binarize\n","import copy\n","import matplotlib.pyplot as plt\n","from itertools import cycle\n","\n","def plot_roc_curve(all_labels, all_probs, class_names):\n"," \"\"\"\n"," Plots the ROC curve for each class and the micro/macro averages.\n"," \"\"\"\n"," # Binarize the labels for multi-class ROC analysis\n"," all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n"," all_probs = np.array(all_probs)\n","\n"," # Compute ROC curve and ROC area for each class\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," for i in range(len(class_names)):\n"," fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," # Compute micro-average ROC curve and ROC area\n"," fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n"," roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n","\n"," # Compute macro-average ROC curve and ROC area\n"," # First aggregate all false positive rates\n"," all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n"," # Then interpolate all ROC curves at these points\n"," mean_tpr = np.zeros_like(all_fpr)\n"," for i in range(len(class_names)):\n"," mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n"," # Finally average it and compute AUC\n"," mean_tpr /= len(class_names)\n"," fpr[\"macro\"] = all_fpr\n"," tpr[\"macro\"] = mean_tpr\n"," roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n","\n"," # Plot all ROC curves\n"," plt.figure(figsize=(10, 8))\n","\n"," plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n"," label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n"," color='deeppink', linestyle=':', linewidth=4)\n","\n"," plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n"," label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n"," color='navy', linestyle=':', linewidth=4)\n","\n"," colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n"," for i, color in zip(range(len(class_names)), colors):\n"," plt.plot(fpr[i], tpr[i], color=color, lw=2,\n"," label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--', lw=2)\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin.png\")\n"," print(\"\\nROC curve plot saved as roc_curve.png\")\n","\n","\"\"\"Training and Evaluation with Early Stopping\"\"\"\n","def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n"," \"\"\"\n"," Trains the model with early stopping based on validation ROC AUC score.\n","\n"," Args:\n"," model (torch.nn.Module): The neural network model to train.\n"," train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n"," val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n"," criterion: The loss function.\n"," optimizer: The optimization algorithm.\n"," scheduler: The learning rate scheduler.\n"," num_epochs (int): The maximum number of epochs to train for.\n"," patience (int): Number of epochs to wait for improvement before stopping.\n"," \"\"\"\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Training on device: {device}\")\n","\n"," model.to(device)\n","\n"," best_roc_auc = 0.0\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = []\n"," best_labels = []\n","\n"," class_names = ['axion', 'cdm', 'no_sub']\n","\n"," for epoch in range(num_epochs):\n"," print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n","\n"," # --- Training Phase ---\n"," model.train()\n"," train_loss = 0.0\n"," train_correct = 0\n","\n"," for images, labels in train_loader:\n"," images, labels = images.to(device), labels.to(device)\n","\n"," optimizer.zero_grad()\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," scheduler.step()\n","\n"," train_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," train_correct += (predicted == labels).sum().item()\n","\n"," # --- Validation Phase ---\n"," model.eval()\n"," val_loss = 0.0\n"," val_correct = 0\n"," all_probs = []\n"," all_labels = []\n","\n"," with torch.no_grad():\n"," for images, labels in val_loader:\n"," images, labels = images.to(device), labels.to(device)\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n","\n"," val_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," val_correct += (predicted == labels).sum().item()\n","\n"," probs = torch.softmax(outputs, dim=1)\n"," all_probs.extend(probs.cpu().numpy())\n"," all_labels.extend(labels.cpu().numpy())\n","\n"," # --- Calculate Metrics ---\n"," train_loss = train_loss / len(train_loader.dataset)\n"," val_loss = val_loss / len(val_loader.dataset)\n"," train_accuracy = train_correct / len(train_loader.dataset)\n"," val_accuracy = val_correct / len(val_loader.dataset)\n","\n"," # Calculate multi-class ROC AUC score\n"," all_labels_np = np.array(all_labels)\n"," all_probs_np = np.array(all_probs)\n"," try:\n"," val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n"," except ValueError as e:\n"," print(f\"Could not calculate ROC AUC: {e}\")\n"," val_roc_auc = 0.0\n","\n"," # Epoch-level summary\n"," #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n"," #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n"," #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n","\n"," if val_roc_auc > best_roc_auc:\n"," best_roc_auc = val_roc_auc\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = all_probs\n"," best_labels = all_labels\n"," #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n"," print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n"," else:\n"," epochs_no_improve += 1\n"," print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n","\n"," if epochs_no_improve >= patience:\n"," print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n"," model.load_state_dict(best_model_wts)\n"," break\n","\n"," print(\"\\nTraining Complete!\")\n"," model.load_state_dict(best_model_wts)\n","\n"," # After the training loop, plot the ROC curve for the best model\n"," if best_probs and best_labels:\n"," plot_roc_curve(best_labels, best_probs, class_names)\n","\n"," return model, best_probs, best_labels"]},{"cell_type":"code","source":["#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')"],"metadata":{"id":"9QBIRCLEkikD"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-ZJepKUw_txF","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"5a99a81d-cc73-43b2-de89-221e623cf418","executionInfo":{"status":"ok","timestamp":1756369131300,"user_tz":300,"elapsed":3173720,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Optimizer: Adam\n","Learning Rate: 0.0001\n","Training on device: cuda\n","===== Epoch 1/2000 =====\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n"," warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["New best model saved with Val ROC AUC: 0.5243, Train Loss: 1.1014, Train Accuracy: 0.3090, Val Loss: 1.0994, Val Accuracy: 0.3022\n","===== Epoch 2/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5243. Train Loss: 1.0991, Train Accuracy: 0.3380, Val Loss: 1.0994, Val Accuracy: 0.2844\n","===== Epoch 3/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5243. Train Loss: 1.0992, Train Accuracy: 0.3325, Val Loss: 1.1009, Val Accuracy: 0.3156\n","===== Epoch 4/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5243. Train Loss: 1.0991, Train Accuracy: 0.3200, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 5/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5243. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1018, Val Accuracy: 0.3467\n","===== Epoch 6/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5243. Train Loss: 1.0992, Train Accuracy: 0.3294, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 7/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5243. Train Loss: 1.0999, Train Accuracy: 0.3208, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 8/2000 =====\n","New best model saved with Val ROC AUC: 0.5589, Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2933\n","===== Epoch 9/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5589. Train Loss: 1.0994, Train Accuracy: 0.3169, Val Loss: 1.1022, Val Accuracy: 0.2844\n","===== Epoch 10/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5589. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.3733\n","===== Epoch 11/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5589. Train Loss: 1.1000, Train Accuracy: 0.3075, Val Loss: 1.0996, Val Accuracy: 0.2933\n","===== Epoch 12/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3318, Val Loss: 1.1012, Val Accuracy: 0.3289\n","===== Epoch 13/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 14/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5589. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.0994, Val Accuracy: 0.2978\n","===== Epoch 15/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3365, Val Loss: 1.1017, Val Accuracy: 0.2667\n","===== Epoch 16/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 17/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5589. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.3156\n","===== Epoch 18/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3059, Val Loss: 1.1009, Val Accuracy: 0.3289\n","===== Epoch 19/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5589. Train Loss: 1.0993, Train Accuracy: 0.3380, Val Loss: 1.1000, Val Accuracy: 0.3111\n","===== Epoch 20/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5589. Train Loss: 1.0992, Train Accuracy: 0.3286, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 21/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 22/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1012, Val Accuracy: 0.2933\n","===== Epoch 23/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3244\n","===== Epoch 24/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3349, Val Loss: 1.1016, Val Accuracy: 0.2756\n","===== Epoch 25/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5589. Train Loss: 1.0992, Train Accuracy: 0.3082, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 26/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.0998, Val Accuracy: 0.3156\n","===== Epoch 27/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5589. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2711\n","===== Epoch 28/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1010, Val Accuracy: 0.2800\n","===== Epoch 29/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3341, Val Loss: 1.1005, Val Accuracy: 0.3022\n","===== Epoch 30/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3357, Val Loss: 1.0997, Val Accuracy: 0.3156\n","===== Epoch 31/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 32/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 33/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 34/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1014, Val Accuracy: 0.2800\n","===== Epoch 35/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5589. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.1009, Val Accuracy: 0.3067\n","===== Epoch 36/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5589. Train Loss: 1.0983, Train Accuracy: 0.3475, Val Loss: 1.1002, Val Accuracy: 0.3156\n","===== Epoch 37/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5589. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1016, Val Accuracy: 0.2889\n","===== Epoch 38/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5589. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2800\n","===== Epoch 39/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3357, Val Loss: 1.1013, Val Accuracy: 0.2622\n","===== Epoch 40/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5589. Train Loss: 1.0982, Train Accuracy: 0.3475, Val Loss: 1.0995, Val Accuracy: 0.3289\n","===== Epoch 41/2000 =====\n","New best model saved with Val ROC AUC: 0.5969, Train Loss: 1.0982, Train Accuracy: 0.3388, Val Loss: 1.0989, Val Accuracy: 0.3244\n","===== Epoch 42/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 43/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2889\n","===== Epoch 44/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3553, Val Loss: 1.1014, Val Accuracy: 0.2978\n","===== Epoch 45/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2800\n","===== Epoch 46/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3545, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 47/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1012, Val Accuracy: 0.2889\n","===== Epoch 48/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1002, Val Accuracy: 0.3022\n","===== Epoch 49/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2933\n","===== Epoch 50/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2933\n","===== Epoch 51/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2978\n","===== Epoch 52/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 53/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2756\n","===== Epoch 54/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3537, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 55/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2667\n","===== Epoch 56/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1004, Val Accuracy: 0.2978\n","===== Epoch 57/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.1013, Val Accuracy: 0.2978\n","===== Epoch 58/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3490, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 59/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2711\n","===== Epoch 60/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2800\n","===== Epoch 61/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3459, Val Loss: 1.1008, Val Accuracy: 0.2889\n","===== Epoch 62/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2933\n","===== Epoch 63/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 64/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2889\n","===== Epoch 65/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 66/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.3067\n","===== Epoch 67/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2800\n","===== Epoch 68/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3333, Val Loss: 1.1006, Val Accuracy: 0.2800\n","===== Epoch 69/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 70/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3349, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 71/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3341, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 72/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 73/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3224, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 74/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3459, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 75/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3278, Val Loss: 1.1010, Val Accuracy: 0.2978\n","===== Epoch 76/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2933\n","===== Epoch 77/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 78/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1009, Val Accuracy: 0.3022\n","===== Epoch 79/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3373, Val Loss: 1.1007, Val Accuracy: 0.2933\n","===== Epoch 80/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 81/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3475, Val Loss: 1.1006, Val Accuracy: 0.2756\n","===== Epoch 82/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2533\n","===== Epoch 83/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 84/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1015, Val Accuracy: 0.2711\n","===== Epoch 85/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5969. Train Loss: 1.0994, Train Accuracy: 0.3427, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 86/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5969. Train Loss: 1.0997, Train Accuracy: 0.3169, Val Loss: 1.1011, Val Accuracy: 0.2756\n","===== Epoch 87/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 88/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3365, Val Loss: 1.1004, Val Accuracy: 0.3022\n","===== Epoch 89/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3475, Val Loss: 1.1013, Val Accuracy: 0.2933\n","===== Epoch 90/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.3289\n","===== Epoch 91/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3239, Val Loss: 1.1002, Val Accuracy: 0.3244\n","===== Epoch 92/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3443, Val Loss: 1.1005, Val Accuracy: 0.2889\n","===== Epoch 93/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5969. Train Loss: 1.0997, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.3067\n","===== Epoch 94/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.0992, Val Accuracy: 0.2978\n","===== Epoch 95/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.1004, Val Accuracy: 0.2978\n","===== Epoch 96/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.3244\n","===== Epoch 97/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1015, Val Accuracy: 0.2800\n","===== Epoch 98/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 99/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 100/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1013, Val Accuracy: 0.2756\n","===== Epoch 101/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 102/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3365, Val Loss: 1.1011, Val Accuracy: 0.2622\n","===== Epoch 103/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3231, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 104/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5969. Train Loss: 1.0993, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 105/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.0996, Val Accuracy: 0.3067\n","===== Epoch 106/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1002, Val Accuracy: 0.3200\n","===== Epoch 107/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3271, Val Loss: 1.1008, Val Accuracy: 0.2800\n","===== Epoch 108/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.2756\n","===== Epoch 109/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3278, Val Loss: 1.1007, Val Accuracy: 0.3067\n","===== Epoch 110/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3435, Val Loss: 1.0999, Val Accuracy: 0.2800\n","===== Epoch 111/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3537, Val Loss: 1.1002, Val Accuracy: 0.2933\n","===== Epoch 112/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3255, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 113/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2889\n","===== Epoch 114/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 115/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3357, Val Loss: 1.1008, Val Accuracy: 0.2533\n","===== Epoch 116/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5969. Train Loss: 1.0992, Train Accuracy: 0.3357, Val Loss: 1.1003, Val Accuracy: 0.3200\n","===== Epoch 117/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1013, Val Accuracy: 0.3067\n","===== Epoch 118/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3318, Val Loss: 1.1012, Val Accuracy: 0.2756\n","===== Epoch 119/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3506, Val Loss: 1.0996, Val Accuracy: 0.3156\n","===== Epoch 120/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1012, Val Accuracy: 0.2667\n","===== Epoch 121/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3302, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 122/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3318, Val Loss: 1.1010, Val Accuracy: 0.2800\n","===== Epoch 123/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 124/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.0999, Val Accuracy: 0.2800\n","===== Epoch 125/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3200, Val Loss: 1.1015, Val Accuracy: 0.2756\n","===== Epoch 126/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1004, Val Accuracy: 0.2756\n","===== Epoch 127/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3318, Val Loss: 1.1004, Val Accuracy: 0.2889\n","===== Epoch 128/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 129/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 130/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3318, Val Loss: 1.1000, Val Accuracy: 0.3022\n","===== Epoch 131/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 132/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1006, Val Accuracy: 0.2800\n","===== Epoch 133/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2622\n","===== Epoch 134/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3325, Val Loss: 1.1004, Val Accuracy: 0.2978\n","===== Epoch 135/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1001, Val Accuracy: 0.3067\n","===== Epoch 136/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1012, Val Accuracy: 0.2756\n","===== Epoch 137/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 138/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2667\n","===== Epoch 139/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 140/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 141/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2978\n","===== Epoch 142/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 143/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1001, Val Accuracy: 0.2933\n","===== Epoch 144/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1005, Val Accuracy: 0.2889\n","===== Epoch 145/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1010, Val Accuracy: 0.2889\n","===== Epoch 146/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2756\n","===== Epoch 147/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 148/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 149/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 150/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 151/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 152/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2889\n","===== Epoch 153/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 154/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3506, Val Loss: 1.1004, Val Accuracy: 0.2978\n","===== Epoch 155/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1010, Val Accuracy: 0.2978\n","===== Epoch 156/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 157/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 158/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 159/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1005, Val Accuracy: 0.2756\n","===== Epoch 160/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.1009, Val Accuracy: 0.2978\n","===== Epoch 161/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2756\n","===== Epoch 162/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1008, Val Accuracy: 0.2800\n","===== Epoch 163/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 164/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3506, Val Loss: 1.1010, Val Accuracy: 0.2889\n","===== Epoch 165/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1001, Val Accuracy: 0.2933\n","===== Epoch 166/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.3111\n","===== Epoch 167/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3639, Val Loss: 1.1002, Val Accuracy: 0.3022\n","===== Epoch 168/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1014, Val Accuracy: 0.2800\n","===== Epoch 169/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 170/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1000, Val Accuracy: 0.3422\n","===== Epoch 171/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 172/2000 =====\n","No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2978\n","===== Epoch 173/2000 =====\n","No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2889\n","===== Epoch 174/2000 =====\n","No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1010, Val Accuracy: 0.2889\n","===== Epoch 175/2000 =====\n","No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2756\n","===== Epoch 176/2000 =====\n","No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 177/2000 =====\n","No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 178/2000 =====\n","No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3255, Val Loss: 1.1013, Val Accuracy: 0.2800\n","===== Epoch 179/2000 =====\n","No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 180/2000 =====\n","No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 181/2000 =====\n","No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 182/2000 =====\n","No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3467, Val Loss: 1.1020, Val Accuracy: 0.2844\n","===== Epoch 183/2000 =====\n","No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3475, Val Loss: 1.1008, Val Accuracy: 0.2933\n","===== Epoch 184/2000 =====\n","No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5969. Train Loss: 1.0995, Train Accuracy: 0.3365, Val Loss: 1.1007, Val Accuracy: 0.3200\n","===== Epoch 185/2000 =====\n","No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 186/2000 =====\n","No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3216, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 187/2000 =====\n","No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 188/2000 =====\n","No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 189/2000 =====\n","No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3545, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 190/2000 =====\n","No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 191/2000 =====\n","No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3357, Val Loss: 1.0999, Val Accuracy: 0.3111\n","===== Epoch 192/2000 =====\n","No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1005, Val Accuracy: 0.2711\n","===== Epoch 193/2000 =====\n","No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5969. Train Loss: 1.0992, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 194/2000 =====\n","No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2800\n","===== Epoch 195/2000 =====\n","No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1005, Val Accuracy: 0.2711\n","===== Epoch 196/2000 =====\n","No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 197/2000 =====\n","No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3333, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 198/2000 =====\n","No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 199/2000 =====\n","No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 200/2000 =====\n","No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 201/2000 =====\n","No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 202/2000 =====\n","No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 203/2000 =====\n","No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3271, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 204/2000 =====\n","No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3247, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 205/2000 =====\n","No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 206/2000 =====\n","No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 207/2000 =====\n","No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 208/2000 =====\n","No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 209/2000 =====\n","No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3247, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 210/2000 =====\n","No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 211/2000 =====\n","No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 212/2000 =====\n","No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 213/2000 =====\n","No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1011, Val Accuracy: 0.2711\n","===== Epoch 214/2000 =====\n","No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 215/2000 =====\n","No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2711\n","===== Epoch 216/2000 =====\n","No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1001, Val Accuracy: 0.2978\n","===== Epoch 217/2000 =====\n","No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 218/2000 =====\n","No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2800\n","===== Epoch 219/2000 =====\n","No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 220/2000 =====\n","No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3325, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 221/2000 =====\n","No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 222/2000 =====\n","No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 223/2000 =====\n","No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 224/2000 =====\n","No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 225/2000 =====\n","No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 226/2000 =====\n","No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 227/2000 =====\n","No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 228/2000 =====\n","No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 229/2000 =====\n","No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 230/2000 =====\n","No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 231/2000 =====\n","No improvement in Val ROC AUC for 190 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 232/2000 =====\n","No improvement in Val ROC AUC for 191 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 233/2000 =====\n","No improvement in Val ROC AUC for 192 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3373, Val Loss: 1.1003, Val Accuracy: 0.2933\n","===== Epoch 234/2000 =====\n","No improvement in Val ROC AUC for 193 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3388, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 235/2000 =====\n","No improvement in Val ROC AUC for 194 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1001, Val Accuracy: 0.2756\n","===== Epoch 236/2000 =====\n","No improvement in Val ROC AUC for 195 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 237/2000 =====\n","No improvement in Val ROC AUC for 196 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1007, Val Accuracy: 0.2756\n","===== Epoch 238/2000 =====\n","No improvement in Val ROC AUC for 197 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3459, Val Loss: 1.1009, Val Accuracy: 0.2933\n","===== Epoch 239/2000 =====\n","No improvement in Val ROC AUC for 198 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 240/2000 =====\n","No improvement in Val ROC AUC for 199 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0997, Val Accuracy: 0.2889\n","===== Epoch 241/2000 =====\n","No improvement in Val ROC AUC for 200 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2800\n","===== Epoch 242/2000 =====\n","No improvement in Val ROC AUC for 201 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1010, Val Accuracy: 0.2889\n","===== Epoch 243/2000 =====\n","No improvement in Val ROC AUC for 202 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 244/2000 =====\n","No improvement in Val ROC AUC for 203 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2800\n","===== Epoch 245/2000 =====\n","No improvement in Val ROC AUC for 204 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 246/2000 =====\n","No improvement in Val ROC AUC for 205 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 247/2000 =====\n","No improvement in Val ROC AUC for 206 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.2933\n","===== Epoch 248/2000 =====\n","No improvement in Val ROC AUC for 207 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2800\n","===== Epoch 249/2000 =====\n","No improvement in Val ROC AUC for 208 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 250/2000 =====\n","No improvement in Val ROC AUC for 209 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 251/2000 =====\n","No improvement in Val ROC AUC for 210 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2800\n","===== Epoch 252/2000 =====\n","No improvement in Val ROC AUC for 211 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 253/2000 =====\n","No improvement in Val ROC AUC for 212 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 254/2000 =====\n","No improvement in Val ROC AUC for 213 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 255/2000 =====\n","No improvement in Val ROC AUC for 214 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3380, Val Loss: 1.1004, Val Accuracy: 0.2800\n","===== Epoch 256/2000 =====\n","No improvement in Val ROC AUC for 215 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2756\n","===== Epoch 257/2000 =====\n","No improvement in Val ROC AUC for 216 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 258/2000 =====\n","No improvement in Val ROC AUC for 217 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2933\n","===== Epoch 259/2000 =====\n","No improvement in Val ROC AUC for 218 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1010, Val Accuracy: 0.2800\n","===== Epoch 260/2000 =====\n","No improvement in Val ROC AUC for 219 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.3022\n","===== Epoch 261/2000 =====\n","No improvement in Val ROC AUC for 220 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 262/2000 =====\n","No improvement in Val ROC AUC for 221 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.0996, Val Accuracy: 0.3067\n","===== Epoch 263/2000 =====\n","No improvement in Val ROC AUC for 222 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 264/2000 =====\n","No improvement in Val ROC AUC for 223 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2889\n","===== Epoch 265/2000 =====\n","No improvement in Val ROC AUC for 224 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 266/2000 =====\n","No improvement in Val ROC AUC for 225 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 267/2000 =====\n","No improvement in Val ROC AUC for 226 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2800\n","===== Epoch 268/2000 =====\n","No improvement in Val ROC AUC for 227 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 269/2000 =====\n","No improvement in Val ROC AUC for 228 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 270/2000 =====\n","No improvement in Val ROC AUC for 229 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 271/2000 =====\n","No improvement in Val ROC AUC for 230 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 272/2000 =====\n","No improvement in Val ROC AUC for 231 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1002, Val Accuracy: 0.2800\n","===== Epoch 273/2000 =====\n","No improvement in Val ROC AUC for 232 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 274/2000 =====\n","No improvement in Val ROC AUC for 233 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2800\n","===== Epoch 275/2000 =====\n","No improvement in Val ROC AUC for 234 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 276/2000 =====\n","No improvement in Val ROC AUC for 235 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 277/2000 =====\n","No improvement in Val ROC AUC for 236 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 278/2000 =====\n","No improvement in Val ROC AUC for 237 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 279/2000 =====\n","No improvement in Val ROC AUC for 238 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 280/2000 =====\n","No improvement in Val ROC AUC for 239 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 281/2000 =====\n","No improvement in Val ROC AUC for 240 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 282/2000 =====\n","No improvement in Val ROC AUC for 241 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 283/2000 =====\n","No improvement in Val ROC AUC for 242 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 284/2000 =====\n","No improvement in Val ROC AUC for 243 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 285/2000 =====\n","No improvement in Val ROC AUC for 244 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.3156\n","===== Epoch 286/2000 =====\n","No improvement in Val ROC AUC for 245 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3294, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 287/2000 =====\n","No improvement in Val ROC AUC for 246 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 288/2000 =====\n","No improvement in Val ROC AUC for 247 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 289/2000 =====\n","No improvement in Val ROC AUC for 248 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 290/2000 =====\n","No improvement in Val ROC AUC for 249 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 291/2000 =====\n","No improvement in Val ROC AUC for 250 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3216, Val Loss: 1.1003, Val Accuracy: 0.2800\n","===== Epoch 292/2000 =====\n","No improvement in Val ROC AUC for 251 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 293/2000 =====\n","No improvement in Val ROC AUC for 252 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 294/2000 =====\n","No improvement in Val ROC AUC for 253 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 295/2000 =====\n","No improvement in Val ROC AUC for 254 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 296/2000 =====\n","No improvement in Val ROC AUC for 255 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 297/2000 =====\n","No improvement in Val ROC AUC for 256 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1004, Val Accuracy: 0.2667\n","===== Epoch 298/2000 =====\n","No improvement in Val ROC AUC for 257 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 299/2000 =====\n","No improvement in Val ROC AUC for 258 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 300/2000 =====\n","No improvement in Val ROC AUC for 259 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3318, Val Loss: 1.1006, Val Accuracy: 0.3022\n","===== Epoch 301/2000 =====\n","No improvement in Val ROC AUC for 260 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 302/2000 =====\n","No improvement in Val ROC AUC for 261 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 303/2000 =====\n","No improvement in Val ROC AUC for 262 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 304/2000 =====\n","No improvement in Val ROC AUC for 263 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 305/2000 =====\n","No improvement in Val ROC AUC for 264 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 306/2000 =====\n","No improvement in Val ROC AUC for 265 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 307/2000 =====\n","No improvement in Val ROC AUC for 266 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 308/2000 =====\n","No improvement in Val ROC AUC for 267 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3255, Val Loss: 1.0998, Val Accuracy: 0.2800\n","===== Epoch 309/2000 =====\n","No improvement in Val ROC AUC for 268 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 310/2000 =====\n","No improvement in Val ROC AUC for 269 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 311/2000 =====\n","No improvement in Val ROC AUC for 270 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 312/2000 =====\n","No improvement in Val ROC AUC for 271 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 313/2000 =====\n","No improvement in Val ROC AUC for 272 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 314/2000 =====\n","No improvement in Val ROC AUC for 273 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 315/2000 =====\n","No improvement in Val ROC AUC for 274 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 316/2000 =====\n","No improvement in Val ROC AUC for 275 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 317/2000 =====\n","No improvement in Val ROC AUC for 276 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 318/2000 =====\n","No improvement in Val ROC AUC for 277 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 319/2000 =====\n","No improvement in Val ROC AUC for 278 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 320/2000 =====\n","No improvement in Val ROC AUC for 279 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 321/2000 =====\n","No improvement in Val ROC AUC for 280 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 322/2000 =====\n","No improvement in Val ROC AUC for 281 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 323/2000 =====\n","No improvement in Val ROC AUC for 282 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 324/2000 =====\n","No improvement in Val ROC AUC for 283 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 325/2000 =====\n","No improvement in Val ROC AUC for 284 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3443, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 326/2000 =====\n","No improvement in Val ROC AUC for 285 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 327/2000 =====\n","No improvement in Val ROC AUC for 286 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 328/2000 =====\n","No improvement in Val ROC AUC for 287 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 329/2000 =====\n","No improvement in Val ROC AUC for 288 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 330/2000 =====\n","No improvement in Val ROC AUC for 289 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 331/2000 =====\n","No improvement in Val ROC AUC for 290 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 332/2000 =====\n","No improvement in Val ROC AUC for 291 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 333/2000 =====\n","No improvement in Val ROC AUC for 292 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 334/2000 =====\n","No improvement in Val ROC AUC for 293 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 335/2000 =====\n","No improvement in Val ROC AUC for 294 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 336/2000 =====\n","No improvement in Val ROC AUC for 295 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 337/2000 =====\n","No improvement in Val ROC AUC for 296 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 338/2000 =====\n","No improvement in Val ROC AUC for 297 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 339/2000 =====\n","No improvement in Val ROC AUC for 298 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 340/2000 =====\n","No improvement in Val ROC AUC for 299 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 341/2000 =====\n","No improvement in Val ROC AUC for 300 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 342/2000 =====\n","No improvement in Val ROC AUC for 301 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 343/2000 =====\n","No improvement in Val ROC AUC for 302 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 344/2000 =====\n","No improvement in Val ROC AUC for 303 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 345/2000 =====\n","No improvement in Val ROC AUC for 304 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 346/2000 =====\n","No improvement in Val ROC AUC for 305 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 347/2000 =====\n","No improvement in Val ROC AUC for 306 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 348/2000 =====\n","No improvement in Val ROC AUC for 307 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 349/2000 =====\n","No improvement in Val ROC AUC for 308 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 350/2000 =====\n","No improvement in Val ROC AUC for 309 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 351/2000 =====\n","No improvement in Val ROC AUC for 310 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 352/2000 =====\n","No improvement in Val ROC AUC for 311 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 353/2000 =====\n","No improvement in Val ROC AUC for 312 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 354/2000 =====\n","No improvement in Val ROC AUC for 313 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 355/2000 =====\n","No improvement in Val ROC AUC for 314 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 356/2000 =====\n","No improvement in Val ROC AUC for 315 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 357/2000 =====\n","No improvement in Val ROC AUC for 316 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 358/2000 =====\n","No improvement in Val ROC AUC for 317 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 359/2000 =====\n","No improvement in Val ROC AUC for 318 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 360/2000 =====\n","No improvement in Val ROC AUC for 319 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 361/2000 =====\n","No improvement in Val ROC AUC for 320 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 362/2000 =====\n","No improvement in Val ROC AUC for 321 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 363/2000 =====\n","No improvement in Val ROC AUC for 322 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 364/2000 =====\n","No improvement in Val ROC AUC for 323 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 365/2000 =====\n","No improvement in Val ROC AUC for 324 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 366/2000 =====\n","No improvement in Val ROC AUC for 325 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 367/2000 =====\n","No improvement in Val ROC AUC for 326 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 368/2000 =====\n","No improvement in Val ROC AUC for 327 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 369/2000 =====\n","No improvement in Val ROC AUC for 328 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 370/2000 =====\n","No improvement in Val ROC AUC for 329 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 371/2000 =====\n","No improvement in Val ROC AUC for 330 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 372/2000 =====\n","No improvement in Val ROC AUC for 331 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 373/2000 =====\n","No improvement in Val ROC AUC for 332 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0998, Val Accuracy: 0.2844\n","===== Epoch 374/2000 =====\n","No improvement in Val ROC AUC for 333 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 375/2000 =====\n","No improvement in Val ROC AUC for 334 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 376/2000 =====\n","No improvement in Val ROC AUC for 335 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 377/2000 =====\n","No improvement in Val ROC AUC for 336 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 378/2000 =====\n","No improvement in Val ROC AUC for 337 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 379/2000 =====\n","No improvement in Val ROC AUC for 338 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 380/2000 =====\n","No improvement in Val ROC AUC for 339 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3247, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 381/2000 =====\n","No improvement in Val ROC AUC for 340 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 382/2000 =====\n","No improvement in Val ROC AUC for 341 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 383/2000 =====\n","No improvement in Val ROC AUC for 342 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 384/2000 =====\n","No improvement in Val ROC AUC for 343 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 385/2000 =====\n","No improvement in Val ROC AUC for 344 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 386/2000 =====\n","No improvement in Val ROC AUC for 345 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 387/2000 =====\n","No improvement in Val ROC AUC for 346 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3404, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 388/2000 =====\n","No improvement in Val ROC AUC for 347 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 389/2000 =====\n","No improvement in Val ROC AUC for 348 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 390/2000 =====\n","No improvement in Val ROC AUC for 349 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 391/2000 =====\n","No improvement in Val ROC AUC for 350 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3263, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 392/2000 =====\n","No improvement in Val ROC AUC for 351 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 393/2000 =====\n","No improvement in Val ROC AUC for 352 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 394/2000 =====\n","No improvement in Val ROC AUC for 353 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 395/2000 =====\n","No improvement in Val ROC AUC for 354 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3365, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 396/2000 =====\n","No improvement in Val ROC AUC for 355 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 397/2000 =====\n","No improvement in Val ROC AUC for 356 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 398/2000 =====\n","No improvement in Val ROC AUC for 357 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 399/2000 =====\n","No improvement in Val ROC AUC for 358 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 400/2000 =====\n","No improvement in Val ROC AUC for 359 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3122, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 401/2000 =====\n","No improvement in Val ROC AUC for 360 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 402/2000 =====\n","No improvement in Val ROC AUC for 361 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 403/2000 =====\n","No improvement in Val ROC AUC for 362 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 404/2000 =====\n","No improvement in Val ROC AUC for 363 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 405/2000 =====\n","No improvement in Val ROC AUC for 364 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 406/2000 =====\n","No improvement in Val ROC AUC for 365 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 407/2000 =====\n","No improvement in Val ROC AUC for 366 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 408/2000 =====\n","No improvement in Val ROC AUC for 367 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 409/2000 =====\n","No improvement in Val ROC AUC for 368 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 410/2000 =====\n","No improvement in Val ROC AUC for 369 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 411/2000 =====\n","No improvement in Val ROC AUC for 370 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 412/2000 =====\n","No improvement in Val ROC AUC for 371 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 413/2000 =====\n","No improvement in Val ROC AUC for 372 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 414/2000 =====\n","No improvement in Val ROC AUC for 373 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 415/2000 =====\n","No improvement in Val ROC AUC for 374 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 416/2000 =====\n","No improvement in Val ROC AUC for 375 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 417/2000 =====\n","No improvement in Val ROC AUC for 376 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 418/2000 =====\n","No improvement in Val ROC AUC for 377 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 419/2000 =====\n","No improvement in Val ROC AUC for 378 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 420/2000 =====\n","No improvement in Val ROC AUC for 379 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 421/2000 =====\n","No improvement in Val ROC AUC for 380 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 422/2000 =====\n","No improvement in Val ROC AUC for 381 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 423/2000 =====\n","No improvement in Val ROC AUC for 382 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 424/2000 =====\n","No improvement in Val ROC AUC for 383 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 425/2000 =====\n","No improvement in Val ROC AUC for 384 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 426/2000 =====\n","No improvement in Val ROC AUC for 385 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 427/2000 =====\n","No improvement in Val ROC AUC for 386 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 428/2000 =====\n","No improvement in Val ROC AUC for 387 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 429/2000 =====\n","No improvement in Val ROC AUC for 388 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 430/2000 =====\n","No improvement in Val ROC AUC for 389 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 431/2000 =====\n","No improvement in Val ROC AUC for 390 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 432/2000 =====\n","No improvement in Val ROC AUC for 391 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 433/2000 =====\n","No improvement in Val ROC AUC for 392 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 434/2000 =====\n","No improvement in Val ROC AUC for 393 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 435/2000 =====\n","No improvement in Val ROC AUC for 394 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 436/2000 =====\n","No improvement in Val ROC AUC for 395 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 437/2000 =====\n","No improvement in Val ROC AUC for 396 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 438/2000 =====\n","No improvement in Val ROC AUC for 397 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 439/2000 =====\n","No improvement in Val ROC AUC for 398 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 440/2000 =====\n","No improvement in Val ROC AUC for 399 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 441/2000 =====\n","No improvement in Val ROC AUC for 400 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 442/2000 =====\n","No improvement in Val ROC AUC for 401 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 443/2000 =====\n","No improvement in Val ROC AUC for 402 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 444/2000 =====\n","No improvement in Val ROC AUC for 403 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 445/2000 =====\n","No improvement in Val ROC AUC for 404 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 446/2000 =====\n","No improvement in Val ROC AUC for 405 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 447/2000 =====\n","No improvement in Val ROC AUC for 406 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 448/2000 =====\n","No improvement in Val ROC AUC for 407 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 449/2000 =====\n","No improvement in Val ROC AUC for 408 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 450/2000 =====\n","No improvement in Val ROC AUC for 409 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 451/2000 =====\n","No improvement in Val ROC AUC for 410 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 452/2000 =====\n","No improvement in Val ROC AUC for 411 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 453/2000 =====\n","No improvement in Val ROC AUC for 412 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 454/2000 =====\n","No improvement in Val ROC AUC for 413 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 455/2000 =====\n","No improvement in Val ROC AUC for 414 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 456/2000 =====\n","No improvement in Val ROC AUC for 415 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 457/2000 =====\n","No improvement in Val ROC AUC for 416 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 458/2000 =====\n","No improvement in Val ROC AUC for 417 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 459/2000 =====\n","No improvement in Val ROC AUC for 418 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 460/2000 =====\n","No improvement in Val ROC AUC for 419 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 461/2000 =====\n","No improvement in Val ROC AUC for 420 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 462/2000 =====\n","No improvement in Val ROC AUC for 421 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2889\n","===== Epoch 463/2000 =====\n","No improvement in Val ROC AUC for 422 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2711\n","===== Epoch 464/2000 =====\n","No improvement in Val ROC AUC for 423 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2800\n","===== Epoch 465/2000 =====\n","No improvement in Val ROC AUC for 424 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 466/2000 =====\n","No improvement in Val ROC AUC for 425 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 467/2000 =====\n","No improvement in Val ROC AUC for 426 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1003, Val Accuracy: 0.2889\n","===== Epoch 468/2000 =====\n","No improvement in Val ROC AUC for 427 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 469/2000 =====\n","No improvement in Val ROC AUC for 428 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 470/2000 =====\n","No improvement in Val ROC AUC for 429 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 471/2000 =====\n","No improvement in Val ROC AUC for 430 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 472/2000 =====\n","No improvement in Val ROC AUC for 431 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3325, Val Loss: 1.1009, Val Accuracy: 0.2933\n","===== Epoch 473/2000 =====\n","No improvement in Val ROC AUC for 432 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 474/2000 =====\n","No improvement in Val ROC AUC for 433 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 475/2000 =====\n","No improvement in Val ROC AUC for 434 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 476/2000 =====\n","No improvement in Val ROC AUC for 435 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 477/2000 =====\n","No improvement in Val ROC AUC for 436 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 478/2000 =====\n","No improvement in Val ROC AUC for 437 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 479/2000 =====\n","No improvement in Val ROC AUC for 438 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 480/2000 =====\n","No improvement in Val ROC AUC for 439 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 481/2000 =====\n","No improvement in Val ROC AUC for 440 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 482/2000 =====\n","No improvement in Val ROC AUC for 441 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 483/2000 =====\n","No improvement in Val ROC AUC for 442 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 484/2000 =====\n","No improvement in Val ROC AUC for 443 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 485/2000 =====\n","No improvement in Val ROC AUC for 444 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3443, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 486/2000 =====\n","No improvement in Val ROC AUC for 445 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 487/2000 =====\n","No improvement in Val ROC AUC for 446 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3482, Val Loss: 1.1003, Val Accuracy: 0.2978\n","===== Epoch 488/2000 =====\n","No improvement in Val ROC AUC for 447 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 489/2000 =====\n","No improvement in Val ROC AUC for 448 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 490/2000 =====\n","No improvement in Val ROC AUC for 449 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 491/2000 =====\n","No improvement in Val ROC AUC for 450 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 492/2000 =====\n","No improvement in Val ROC AUC for 451 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 493/2000 =====\n","No improvement in Val ROC AUC for 452 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 494/2000 =====\n","No improvement in Val ROC AUC for 453 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 495/2000 =====\n","No improvement in Val ROC AUC for 454 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3349, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 496/2000 =====\n","No improvement in Val ROC AUC for 455 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 497/2000 =====\n","No improvement in Val ROC AUC for 456 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3286, Val Loss: 1.0998, Val Accuracy: 0.2844\n","===== Epoch 498/2000 =====\n","No improvement in Val ROC AUC for 457 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 499/2000 =====\n","No improvement in Val ROC AUC for 458 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 500/2000 =====\n","No improvement in Val ROC AUC for 459 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 501/2000 =====\n","No improvement in Val ROC AUC for 460 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 502/2000 =====\n","No improvement in Val ROC AUC for 461 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.0997, Val Accuracy: 0.2756\n","===== Epoch 503/2000 =====\n","No improvement in Val ROC AUC for 462 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 504/2000 =====\n","No improvement in Val ROC AUC for 463 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 505/2000 =====\n","No improvement in Val ROC AUC for 464 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 506/2000 =====\n","No improvement in Val ROC AUC for 465 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 507/2000 =====\n","No improvement in Val ROC AUC for 466 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 508/2000 =====\n","No improvement in Val ROC AUC for 467 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 509/2000 =====\n","No improvement in Val ROC AUC for 468 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 510/2000 =====\n","No improvement in Val ROC AUC for 469 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 511/2000 =====\n","No improvement in Val ROC AUC for 470 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 512/2000 =====\n","No improvement in Val ROC AUC for 471 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 513/2000 =====\n","No improvement in Val ROC AUC for 472 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 514/2000 =====\n","No improvement in Val ROC AUC for 473 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 515/2000 =====\n","No improvement in Val ROC AUC for 474 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 516/2000 =====\n","No improvement in Val ROC AUC for 475 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.0996, Val Accuracy: 0.2844\n","===== Epoch 517/2000 =====\n","No improvement in Val ROC AUC for 476 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 518/2000 =====\n","No improvement in Val ROC AUC for 477 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 519/2000 =====\n","No improvement in Val ROC AUC for 478 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 520/2000 =====\n","No improvement in Val ROC AUC for 479 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 521/2000 =====\n","No improvement in Val ROC AUC for 480 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 522/2000 =====\n","No improvement in Val ROC AUC for 481 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 523/2000 =====\n","No improvement in Val ROC AUC for 482 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 524/2000 =====\n","No improvement in Val ROC AUC for 483 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 525/2000 =====\n","No improvement in Val ROC AUC for 484 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 526/2000 =====\n","No improvement in Val ROC AUC for 485 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 527/2000 =====\n","No improvement in Val ROC AUC for 486 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 528/2000 =====\n","No improvement in Val ROC AUC for 487 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 529/2000 =====\n","No improvement in Val ROC AUC for 488 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 530/2000 =====\n","No improvement in Val ROC AUC for 489 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 531/2000 =====\n","No improvement in Val ROC AUC for 490 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 532/2000 =====\n","No improvement in Val ROC AUC for 491 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 533/2000 =====\n","No improvement in Val ROC AUC for 492 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 534/2000 =====\n","No improvement in Val ROC AUC for 493 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 535/2000 =====\n","No improvement in Val ROC AUC for 494 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 536/2000 =====\n","No improvement in Val ROC AUC for 495 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 537/2000 =====\n","No improvement in Val ROC AUC for 496 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 538/2000 =====\n","No improvement in Val ROC AUC for 497 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 539/2000 =====\n","No improvement in Val ROC AUC for 498 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 540/2000 =====\n","No improvement in Val ROC AUC for 499 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 541/2000 =====\n","No improvement in Val ROC AUC for 500 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 542/2000 =====\n","No improvement in Val ROC AUC for 501 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 543/2000 =====\n","No improvement in Val ROC AUC for 502 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3388, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 544/2000 =====\n","No improvement in Val ROC AUC for 503 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 545/2000 =====\n","No improvement in Val ROC AUC for 504 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 546/2000 =====\n","No improvement in Val ROC AUC for 505 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 547/2000 =====\n","No improvement in Val ROC AUC for 506 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 548/2000 =====\n","No improvement in Val ROC AUC for 507 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.0997, Val Accuracy: 0.2844\n","===== Epoch 549/2000 =====\n","No improvement in Val ROC AUC for 508 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 550/2000 =====\n","No improvement in Val ROC AUC for 509 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 551/2000 =====\n","No improvement in Val ROC AUC for 510 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 552/2000 =====\n","No improvement in Val ROC AUC for 511 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 553/2000 =====\n","No improvement in Val ROC AUC for 512 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 554/2000 =====\n","No improvement in Val ROC AUC for 513 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 555/2000 =====\n","No improvement in Val ROC AUC for 514 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 556/2000 =====\n","No improvement in Val ROC AUC for 515 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 557/2000 =====\n","No improvement in Val ROC AUC for 516 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 558/2000 =====\n","No improvement in Val ROC AUC for 517 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 559/2000 =====\n","No improvement in Val ROC AUC for 518 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 560/2000 =====\n","No improvement in Val ROC AUC for 519 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 561/2000 =====\n","No improvement in Val ROC AUC for 520 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 562/2000 =====\n","No improvement in Val ROC AUC for 521 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3459, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 563/2000 =====\n","No improvement in Val ROC AUC for 522 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 564/2000 =====\n","No improvement in Val ROC AUC for 523 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 565/2000 =====\n","No improvement in Val ROC AUC for 524 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3435, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 566/2000 =====\n","No improvement in Val ROC AUC for 525 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 567/2000 =====\n","No improvement in Val ROC AUC for 526 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 568/2000 =====\n","No improvement in Val ROC AUC for 527 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 569/2000 =====\n","No improvement in Val ROC AUC for 528 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 570/2000 =====\n","No improvement in Val ROC AUC for 529 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 571/2000 =====\n","No improvement in Val ROC AUC for 530 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 572/2000 =====\n","No improvement in Val ROC AUC for 531 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 573/2000 =====\n","No improvement in Val ROC AUC for 532 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 574/2000 =====\n","No improvement in Val ROC AUC for 533 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 575/2000 =====\n","No improvement in Val ROC AUC for 534 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 576/2000 =====\n","No improvement in Val ROC AUC for 535 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 577/2000 =====\n","No improvement in Val ROC AUC for 536 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 578/2000 =====\n","No improvement in Val ROC AUC for 537 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 579/2000 =====\n","No improvement in Val ROC AUC for 538 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 580/2000 =====\n","No improvement in Val ROC AUC for 539 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 581/2000 =====\n","No improvement in Val ROC AUC for 540 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.0995, Val Accuracy: 0.3022\n","===== Epoch 582/2000 =====\n","No improvement in Val ROC AUC for 541 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 583/2000 =====\n","No improvement in Val ROC AUC for 542 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 584/2000 =====\n","No improvement in Val ROC AUC for 543 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 585/2000 =====\n","No improvement in Val ROC AUC for 544 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3294, Val Loss: 1.0998, Val Accuracy: 0.2844\n","===== Epoch 586/2000 =====\n","No improvement in Val ROC AUC for 545 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2889\n","===== Epoch 587/2000 =====\n","No improvement in Val ROC AUC for 546 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 588/2000 =====\n","No improvement in Val ROC AUC for 547 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2889\n","===== Epoch 589/2000 =====\n","No improvement in Val ROC AUC for 548 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 590/2000 =====\n","No improvement in Val ROC AUC for 549 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 591/2000 =====\n","No improvement in Val ROC AUC for 550 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3349, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 592/2000 =====\n","No improvement in Val ROC AUC for 551 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 593/2000 =====\n","No improvement in Val ROC AUC for 552 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 594/2000 =====\n","No improvement in Val ROC AUC for 553 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 595/2000 =====\n","No improvement in Val ROC AUC for 554 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 596/2000 =====\n","No improvement in Val ROC AUC for 555 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 597/2000 =====\n","No improvement in Val ROC AUC for 556 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 598/2000 =====\n","No improvement in Val ROC AUC for 557 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.0997, Val Accuracy: 0.2844\n","===== Epoch 599/2000 =====\n","No improvement in Val ROC AUC for 558 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3365, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 600/2000 =====\n","No improvement in Val ROC AUC for 559 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 601/2000 =====\n","No improvement in Val ROC AUC for 560 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 602/2000 =====\n","No improvement in Val ROC AUC for 561 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 603/2000 =====\n","No improvement in Val ROC AUC for 562 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.3022\n","===== Epoch 604/2000 =====\n","No improvement in Val ROC AUC for 563 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1003, Val Accuracy: 0.2800\n","===== Epoch 605/2000 =====\n","No improvement in Val ROC AUC for 564 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 606/2000 =====\n","No improvement in Val ROC AUC for 565 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2978\n","===== Epoch 607/2000 =====\n","No improvement in Val ROC AUC for 566 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 608/2000 =====\n","No improvement in Val ROC AUC for 567 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3208, Val Loss: 1.0997, Val Accuracy: 0.2711\n","===== Epoch 609/2000 =====\n","No improvement in Val ROC AUC for 568 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 610/2000 =====\n","No improvement in Val ROC AUC for 569 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 611/2000 =====\n","No improvement in Val ROC AUC for 570 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1000, Val Accuracy: 0.2889\n","===== Epoch 612/2000 =====\n","No improvement in Val ROC AUC for 571 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 613/2000 =====\n","No improvement in Val ROC AUC for 572 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 614/2000 =====\n","No improvement in Val ROC AUC for 573 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2800\n","===== Epoch 615/2000 =====\n","No improvement in Val ROC AUC for 574 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3482, Val Loss: 1.0993, Val Accuracy: 0.3156\n","===== Epoch 616/2000 =====\n","No improvement in Val ROC AUC for 575 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.0992, Val Accuracy: 0.2844\n","===== Epoch 617/2000 =====\n","No improvement in Val ROC AUC for 576 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3349, Val Loss: 1.0994, Val Accuracy: 0.2667\n","===== Epoch 618/2000 =====\n","No improvement in Val ROC AUC for 577 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2800\n","===== Epoch 619/2000 =====\n","No improvement in Val ROC AUC for 578 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1003, Val Accuracy: 0.2933\n","===== Epoch 620/2000 =====\n","No improvement in Val ROC AUC for 579 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.0997, Val Accuracy: 0.2844\n","===== Epoch 621/2000 =====\n","No improvement in Val ROC AUC for 580 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.0992, Val Accuracy: 0.2978\n","===== Epoch 622/2000 =====\n","No improvement in Val ROC AUC for 581 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 623/2000 =====\n","No improvement in Val ROC AUC for 582 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 624/2000 =====\n","No improvement in Val ROC AUC for 583 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 625/2000 =====\n","No improvement in Val ROC AUC for 584 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 626/2000 =====\n","No improvement in Val ROC AUC for 585 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3529, Val Loss: 1.0996, Val Accuracy: 0.2889\n","===== Epoch 627/2000 =====\n","No improvement in Val ROC AUC for 586 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.0999, Val Accuracy: 0.2800\n","===== Epoch 628/2000 =====\n","No improvement in Val ROC AUC for 587 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 629/2000 =====\n","No improvement in Val ROC AUC for 588 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 630/2000 =====\n","No improvement in Val ROC AUC for 589 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.0994, Val Accuracy: 0.2889\n","===== Epoch 631/2000 =====\n","No improvement in Val ROC AUC for 590 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2889\n","===== Epoch 632/2000 =====\n","No improvement in Val ROC AUC for 591 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 633/2000 =====\n","No improvement in Val ROC AUC for 592 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1008, Val Accuracy: 0.2889\n","===== Epoch 634/2000 =====\n","No improvement in Val ROC AUC for 593 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3443, Val Loss: 1.1014, Val Accuracy: 0.2756\n","===== Epoch 635/2000 =====\n","No improvement in Val ROC AUC for 594 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3482, Val Loss: 1.1004, Val Accuracy: 0.2933\n","===== Epoch 636/2000 =====\n","No improvement in Val ROC AUC for 595 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3467, Val Loss: 1.1005, Val Accuracy: 0.2889\n","===== Epoch 637/2000 =====\n","No improvement in Val ROC AUC for 596 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 638/2000 =====\n","No improvement in Val ROC AUC for 597 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.3022\n","===== Epoch 639/2000 =====\n","No improvement in Val ROC AUC for 598 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.0998, Val Accuracy: 0.2889\n","===== Epoch 640/2000 =====\n","No improvement in Val ROC AUC for 599 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 641/2000 =====\n","No improvement in Val ROC AUC for 600 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3412, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 642/2000 =====\n","No improvement in Val ROC AUC for 601 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1021, Val Accuracy: 0.2756\n","===== Epoch 643/2000 =====\n","No improvement in Val ROC AUC for 602 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1007, Val Accuracy: 0.2756\n","===== Epoch 644/2000 =====\n","No improvement in Val ROC AUC for 603 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2756\n","===== Epoch 645/2000 =====\n","No improvement in Val ROC AUC for 604 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 646/2000 =====\n","No improvement in Val ROC AUC for 605 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.2933\n","===== Epoch 647/2000 =====\n","No improvement in Val ROC AUC for 606 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3482, Val Loss: 1.1005, Val Accuracy: 0.3022\n","===== Epoch 648/2000 =====\n","No improvement in Val ROC AUC for 607 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1003, Val Accuracy: 0.2889\n","===== Epoch 649/2000 =====\n","No improvement in Val ROC AUC for 608 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.3022\n","===== Epoch 650/2000 =====\n","No improvement in Val ROC AUC for 609 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3514, Val Loss: 1.0995, Val Accuracy: 0.2978\n","===== Epoch 651/2000 =====\n","No improvement in Val ROC AUC for 610 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3498, Val Loss: 1.1008, Val Accuracy: 0.2889\n","===== Epoch 652/2000 =====\n","No improvement in Val ROC AUC for 611 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2756\n","===== Epoch 653/2000 =====\n","No improvement in Val ROC AUC for 612 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3435, Val Loss: 1.0988, Val Accuracy: 0.3022\n","===== Epoch 654/2000 =====\n","No improvement in Val ROC AUC for 613 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3111\n","===== Epoch 655/2000 =====\n","No improvement in Val ROC AUC for 614 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3600, Val Loss: 1.1008, Val Accuracy: 0.2978\n","===== Epoch 656/2000 =====\n","No improvement in Val ROC AUC for 615 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 657/2000 =====\n","No improvement in Val ROC AUC for 616 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.0999, Val Accuracy: 0.2933\n","===== Epoch 658/2000 =====\n","No improvement in Val ROC AUC for 617 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3498, Val Loss: 1.0990, Val Accuracy: 0.2889\n","===== Epoch 659/2000 =====\n","No improvement in Val ROC AUC for 618 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.0993, Val Accuracy: 0.3022\n","===== Epoch 660/2000 =====\n","No improvement in Val ROC AUC for 619 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1000, Val Accuracy: 0.2933\n","===== Epoch 661/2000 =====\n","No improvement in Val ROC AUC for 620 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 662/2000 =====\n","No improvement in Val ROC AUC for 621 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1005, Val Accuracy: 0.2978\n","===== Epoch 663/2000 =====\n","No improvement in Val ROC AUC for 622 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2889\n","===== Epoch 664/2000 =====\n","No improvement in Val ROC AUC for 623 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 665/2000 =====\n","No improvement in Val ROC AUC for 624 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.0998, Val Accuracy: 0.3022\n","===== Epoch 666/2000 =====\n","No improvement in Val ROC AUC for 625 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3467, Val Loss: 1.1014, Val Accuracy: 0.2933\n","===== Epoch 667/2000 =====\n","No improvement in Val ROC AUC for 626 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3514, Val Loss: 1.0991, Val Accuracy: 0.2978\n","===== Epoch 668/2000 =====\n","No improvement in Val ROC AUC for 627 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3522, Val Loss: 1.1004, Val Accuracy: 0.2933\n","===== Epoch 669/2000 =====\n","No improvement in Val ROC AUC for 628 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.3067\n","===== Epoch 670/2000 =====\n","No improvement in Val ROC AUC for 629 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3529, Val Loss: 1.0997, Val Accuracy: 0.3200\n","===== Epoch 671/2000 =====\n","No improvement in Val ROC AUC for 630 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2933\n","===== Epoch 672/2000 =====\n","No improvement in Val ROC AUC for 631 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.0979, Val Accuracy: 0.3467\n","===== Epoch 673/2000 =====\n","No improvement in Val ROC AUC for 632 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3506, Val Loss: 1.1011, Val Accuracy: 0.3022\n","===== Epoch 674/2000 =====\n","No improvement in Val ROC AUC for 633 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.0999, Val Accuracy: 0.2978\n","===== Epoch 675/2000 =====\n","No improvement in Val ROC AUC for 634 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3553, Val Loss: 1.0991, Val Accuracy: 0.3200\n","===== Epoch 676/2000 =====\n","No improvement in Val ROC AUC for 635 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.3022\n","===== Epoch 677/2000 =====\n","No improvement in Val ROC AUC for 636 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.1012, Val Accuracy: 0.2978\n","===== Epoch 678/2000 =====\n","No improvement in Val ROC AUC for 637 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3686, Val Loss: 1.0994, Val Accuracy: 0.2889\n","===== Epoch 679/2000 =====\n","No improvement in Val ROC AUC for 638 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2933\n","===== Epoch 680/2000 =====\n","No improvement in Val ROC AUC for 639 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3404, Val Loss: 1.0985, Val Accuracy: 0.3289\n","===== Epoch 681/2000 =====\n","No improvement in Val ROC AUC for 640 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3475, Val Loss: 1.0995, Val Accuracy: 0.2978\n","===== Epoch 682/2000 =====\n","No improvement in Val ROC AUC for 641 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.0998, Val Accuracy: 0.3067\n","===== Epoch 683/2000 =====\n","No improvement in Val ROC AUC for 642 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3765, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 684/2000 =====\n","No improvement in Val ROC AUC for 643 epoch(s). Best is 0.5969. Train Loss: 1.0994, Train Accuracy: 0.3373, Val Loss: 1.1026, Val Accuracy: 0.2978\n","===== Epoch 685/2000 =====\n","No improvement in Val ROC AUC for 644 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3451, Val Loss: 1.0983, Val Accuracy: 0.3333\n","===== Epoch 686/2000 =====\n","No improvement in Val ROC AUC for 645 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3396, Val Loss: 1.0976, Val Accuracy: 0.3511\n","===== Epoch 687/2000 =====\n","No improvement in Val ROC AUC for 646 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3812, Val Loss: 1.0975, Val Accuracy: 0.3467\n","===== Epoch 688/2000 =====\n","No improvement in Val ROC AUC for 647 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3443, Val Loss: 1.0993, Val Accuracy: 0.3244\n","===== Epoch 689/2000 =====\n","No improvement in Val ROC AUC for 648 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3576, Val Loss: 1.0996, Val Accuracy: 0.3067\n","===== Epoch 690/2000 =====\n","No improvement in Val ROC AUC for 649 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3569, Val Loss: 1.0947, Val Accuracy: 0.3644\n","===== Epoch 691/2000 =====\n","No improvement in Val ROC AUC for 650 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3451, Val Loss: 1.1025, Val Accuracy: 0.3067\n","===== Epoch 692/2000 =====\n","No improvement in Val ROC AUC for 651 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3514, Val Loss: 1.0994, Val Accuracy: 0.3600\n","===== Epoch 693/2000 =====\n","No improvement in Val ROC AUC for 652 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.0982, Val Accuracy: 0.3111\n","===== Epoch 694/2000 =====\n","No improvement in Val ROC AUC for 653 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.3289\n","===== Epoch 695/2000 =====\n","No improvement in Val ROC AUC for 654 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3514, Val Loss: 1.1007, Val Accuracy: 0.3378\n","===== Epoch 696/2000 =====\n","No improvement in Val ROC AUC for 655 epoch(s). Best is 0.5969. Train Loss: 1.0996, Train Accuracy: 0.3459, Val Loss: 1.1013, Val Accuracy: 0.3022\n","===== Epoch 697/2000 =====\n","No improvement in Val ROC AUC for 656 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1005, Val Accuracy: 0.2978\n","===== Epoch 698/2000 =====\n","No improvement in Val ROC AUC for 657 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3537, Val Loss: 1.1014, Val Accuracy: 0.2933\n","===== Epoch 699/2000 =====\n","No improvement in Val ROC AUC for 658 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3514, Val Loss: 1.0992, Val Accuracy: 0.3289\n","===== Epoch 700/2000 =====\n","No improvement in Val ROC AUC for 659 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.3022\n","===== Epoch 701/2000 =====\n","No improvement in Val ROC AUC for 660 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3506, Val Loss: 1.1011, Val Accuracy: 0.3067\n","===== Epoch 702/2000 =====\n","No improvement in Val ROC AUC for 661 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3522, Val Loss: 1.1022, Val Accuracy: 0.2889\n","===== Epoch 703/2000 =====\n","No improvement in Val ROC AUC for 662 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3349, Val Loss: 1.0986, Val Accuracy: 0.3333\n","===== Epoch 704/2000 =====\n","No improvement in Val ROC AUC for 663 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3341, Val Loss: 1.1011, Val Accuracy: 0.3200\n","===== Epoch 705/2000 =====\n","No improvement in Val ROC AUC for 664 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.0990, Val Accuracy: 0.3156\n","===== Epoch 706/2000 =====\n","No improvement in Val ROC AUC for 665 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3357, Val Loss: 1.0962, Val Accuracy: 0.3556\n","===== Epoch 707/2000 =====\n","No improvement in Val ROC AUC for 666 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3545, Val Loss: 1.1013, Val Accuracy: 0.3200\n","===== Epoch 708/2000 =====\n","No improvement in Val ROC AUC for 667 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3490, Val Loss: 1.0992, Val Accuracy: 0.3289\n","===== Epoch 709/2000 =====\n","No improvement in Val ROC AUC for 668 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3443, Val Loss: 1.0995, Val Accuracy: 0.3422\n","===== Epoch 710/2000 =====\n","No improvement in Val ROC AUC for 669 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3600, Val Loss: 1.0955, Val Accuracy: 0.3911\n","===== Epoch 711/2000 =====\n","No improvement in Val ROC AUC for 670 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.3289\n","===== Epoch 712/2000 =====\n","No improvement in Val ROC AUC for 671 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3710, Val Loss: 1.0996, Val Accuracy: 0.2933\n","===== Epoch 713/2000 =====\n","No improvement in Val ROC AUC for 672 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3529, Val Loss: 1.0996, Val Accuracy: 0.3422\n","===== Epoch 714/2000 =====\n","No improvement in Val ROC AUC for 673 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1001, Val Accuracy: 0.3244\n","===== Epoch 715/2000 =====\n","No improvement in Val ROC AUC for 674 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3576, Val Loss: 1.0998, Val Accuracy: 0.3511\n","===== Epoch 716/2000 =====\n","No improvement in Val ROC AUC for 675 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3584, Val Loss: 1.0989, Val Accuracy: 0.3289\n","===== Epoch 717/2000 =====\n","No improvement in Val ROC AUC for 676 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3514, Val Loss: 1.1012, Val Accuracy: 0.2978\n","===== Epoch 718/2000 =====\n","No improvement in Val ROC AUC for 677 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3435, Val Loss: 1.0967, Val Accuracy: 0.3644\n","===== Epoch 719/2000 =====\n","No improvement in Val ROC AUC for 678 epoch(s). Best is 0.5969. Train Loss: 1.0993, Train Accuracy: 0.3341, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 720/2000 =====\n","No improvement in Val ROC AUC for 679 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3678, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 721/2000 =====\n","No improvement in Val ROC AUC for 680 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1019, Val Accuracy: 0.2978\n","===== Epoch 722/2000 =====\n","No improvement in Val ROC AUC for 681 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3529, Val Loss: 1.1010, Val Accuracy: 0.3022\n","===== Epoch 723/2000 =====\n","No improvement in Val ROC AUC for 682 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3592, Val Loss: 1.0995, Val Accuracy: 0.3378\n","===== Epoch 724/2000 =====\n","No improvement in Val ROC AUC for 683 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3514, Val Loss: 1.0994, Val Accuracy: 0.3022\n","===== Epoch 725/2000 =====\n","No improvement in Val ROC AUC for 684 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3584, Val Loss: 1.0983, Val Accuracy: 0.3556\n","===== Epoch 726/2000 =====\n","No improvement in Val ROC AUC for 685 epoch(s). Best is 0.5969. Train Loss: 1.0955, Train Accuracy: 0.3537, Val Loss: 1.0995, Val Accuracy: 0.3511\n","===== Epoch 727/2000 =====\n","No improvement in Val ROC AUC for 686 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3537, Val Loss: 1.1013, Val Accuracy: 0.3244\n","===== Epoch 728/2000 =====\n","No improvement in Val ROC AUC for 687 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1017, Val Accuracy: 0.2756\n","===== Epoch 729/2000 =====\n","No improvement in Val ROC AUC for 688 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3639, Val Loss: 1.0988, Val Accuracy: 0.3244\n","===== Epoch 730/2000 =====\n","No improvement in Val ROC AUC for 689 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3592, Val Loss: 1.0980, Val Accuracy: 0.3378\n","===== Epoch 731/2000 =====\n","No improvement in Val ROC AUC for 690 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3639, Val Loss: 1.0979, Val Accuracy: 0.3111\n","===== Epoch 732/2000 =====\n","No improvement in Val ROC AUC for 691 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.0965, Val Accuracy: 0.3378\n","===== Epoch 733/2000 =====\n","No improvement in Val ROC AUC for 692 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3710, Val Loss: 1.0966, Val Accuracy: 0.3333\n","===== Epoch 734/2000 =====\n","No improvement in Val ROC AUC for 693 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3561, Val Loss: 1.0980, Val Accuracy: 0.3333\n","===== Epoch 735/2000 =====\n","No improvement in Val ROC AUC for 694 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3671, Val Loss: 1.0976, Val Accuracy: 0.3111\n","===== Epoch 736/2000 =====\n","No improvement in Val ROC AUC for 695 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3639, Val Loss: 1.0989, Val Accuracy: 0.3067\n","===== Epoch 737/2000 =====\n","No improvement in Val ROC AUC for 696 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1000, Val Accuracy: 0.3022\n","===== Epoch 738/2000 =====\n","No improvement in Val ROC AUC for 697 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3639, Val Loss: 1.0976, Val Accuracy: 0.3467\n","===== Epoch 739/2000 =====\n","No improvement in Val ROC AUC for 698 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3639, Val Loss: 1.0967, Val Accuracy: 0.3689\n","===== Epoch 740/2000 =====\n","No improvement in Val ROC AUC for 699 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3694, Val Loss: 1.0974, Val Accuracy: 0.3733\n","===== Epoch 741/2000 =====\n","No improvement in Val ROC AUC for 700 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.0998, Val Accuracy: 0.3378\n","===== Epoch 742/2000 =====\n","No improvement in Val ROC AUC for 701 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3545, Val Loss: 1.0974, Val Accuracy: 0.3289\n","===== Epoch 743/2000 =====\n","No improvement in Val ROC AUC for 702 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3561, Val Loss: 1.0977, Val Accuracy: 0.3556\n","===== Epoch 744/2000 =====\n","No improvement in Val ROC AUC for 703 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3561, Val Loss: 1.1002, Val Accuracy: 0.3244\n","===== Epoch 745/2000 =====\n","No improvement in Val ROC AUC for 704 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3459, Val Loss: 1.0986, Val Accuracy: 0.3556\n","===== Epoch 746/2000 =====\n","No improvement in Val ROC AUC for 705 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3490, Val Loss: 1.1017, Val Accuracy: 0.2800\n","===== Epoch 747/2000 =====\n","No improvement in Val ROC AUC for 706 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3600, Val Loss: 1.0981, Val Accuracy: 0.3422\n","===== Epoch 748/2000 =====\n","No improvement in Val ROC AUC for 707 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3592, Val Loss: 1.0935, Val Accuracy: 0.3822\n","===== Epoch 749/2000 =====\n","No improvement in Val ROC AUC for 708 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3592, Val Loss: 1.1026, Val Accuracy: 0.2800\n","===== Epoch 750/2000 =====\n","No improvement in Val ROC AUC for 709 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3608, Val Loss: 1.0993, Val Accuracy: 0.3244\n","===== Epoch 751/2000 =====\n","No improvement in Val ROC AUC for 710 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3733, Val Loss: 1.1003, Val Accuracy: 0.3289\n","===== Epoch 752/2000 =====\n","No improvement in Val ROC AUC for 711 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3631, Val Loss: 1.0973, Val Accuracy: 0.3733\n","===== Epoch 753/2000 =====\n","No improvement in Val ROC AUC for 712 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3608, Val Loss: 1.1001, Val Accuracy: 0.3289\n","===== Epoch 754/2000 =====\n","No improvement in Val ROC AUC for 713 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3678, Val Loss: 1.0991, Val Accuracy: 0.3556\n","===== Epoch 755/2000 =====\n","No improvement in Val ROC AUC for 714 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3686, Val Loss: 1.0963, Val Accuracy: 0.3556\n","===== Epoch 756/2000 =====\n","No improvement in Val ROC AUC for 715 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1010, Val Accuracy: 0.3244\n","===== Epoch 757/2000 =====\n","No improvement in Val ROC AUC for 716 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3561, Val Loss: 1.0960, Val Accuracy: 0.3556\n","===== Epoch 758/2000 =====\n","No improvement in Val ROC AUC for 717 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3459, Val Loss: 1.1001, Val Accuracy: 0.3067\n","===== Epoch 759/2000 =====\n","No improvement in Val ROC AUC for 718 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3506, Val Loss: 1.0946, Val Accuracy: 0.3867\n","===== Epoch 760/2000 =====\n","No improvement in Val ROC AUC for 719 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3569, Val Loss: 1.1015, Val Accuracy: 0.3022\n","===== Epoch 761/2000 =====\n","No improvement in Val ROC AUC for 720 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.1014, Val Accuracy: 0.3289\n","===== Epoch 762/2000 =====\n","No improvement in Val ROC AUC for 721 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3556\n","===== Epoch 763/2000 =====\n","No improvement in Val ROC AUC for 722 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3584, Val Loss: 1.0996, Val Accuracy: 0.3511\n","===== Epoch 764/2000 =====\n","No improvement in Val ROC AUC for 723 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3569, Val Loss: 1.1005, Val Accuracy: 0.3200\n","===== Epoch 765/2000 =====\n","No improvement in Val ROC AUC for 724 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3608, Val Loss: 1.0975, Val Accuracy: 0.2978\n","===== Epoch 766/2000 =====\n","No improvement in Val ROC AUC for 725 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3553, Val Loss: 1.1038, Val Accuracy: 0.2889\n","===== Epoch 767/2000 =====\n","No improvement in Val ROC AUC for 726 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3490, Val Loss: 1.0992, Val Accuracy: 0.3511\n","===== Epoch 768/2000 =====\n","No improvement in Val ROC AUC for 727 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3522, Val Loss: 1.0979, Val Accuracy: 0.3956\n","===== Epoch 769/2000 =====\n","No improvement in Val ROC AUC for 728 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3459, Val Loss: 1.1050, Val Accuracy: 0.2889\n","===== Epoch 770/2000 =====\n","No improvement in Val ROC AUC for 729 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3482, Val Loss: 1.0957, Val Accuracy: 0.3600\n","===== Epoch 771/2000 =====\n","No improvement in Val ROC AUC for 730 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3616, Val Loss: 1.0996, Val Accuracy: 0.3244\n","===== Epoch 772/2000 =====\n","No improvement in Val ROC AUC for 731 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3522, Val Loss: 1.0970, Val Accuracy: 0.3511\n","===== Epoch 773/2000 =====\n","No improvement in Val ROC AUC for 732 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3576, Val Loss: 1.0989, Val Accuracy: 0.3733\n","===== Epoch 774/2000 =====\n","No improvement in Val ROC AUC for 733 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3529, Val Loss: 1.1019, Val Accuracy: 0.3111\n","===== Epoch 775/2000 =====\n","No improvement in Val ROC AUC for 734 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3553, Val Loss: 1.1012, Val Accuracy: 0.3022\n","===== Epoch 776/2000 =====\n","No improvement in Val ROC AUC for 735 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3553, Val Loss: 1.1016, Val Accuracy: 0.3289\n","===== Epoch 777/2000 =====\n","No improvement in Val ROC AUC for 736 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3592, Val Loss: 1.0988, Val Accuracy: 0.3378\n","===== Epoch 778/2000 =====\n","No improvement in Val ROC AUC for 737 epoch(s). Best is 0.5969. Train Loss: 1.0950, Train Accuracy: 0.3624, Val Loss: 1.1061, Val Accuracy: 0.2889\n","===== Epoch 779/2000 =====\n","No improvement in Val ROC AUC for 738 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3482, Val Loss: 1.0978, Val Accuracy: 0.3378\n","===== Epoch 780/2000 =====\n","No improvement in Val ROC AUC for 739 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3639, Val Loss: 1.0939, Val Accuracy: 0.3867\n","===== Epoch 781/2000 =====\n","No improvement in Val ROC AUC for 740 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3631, Val Loss: 1.0966, Val Accuracy: 0.3511\n","===== Epoch 782/2000 =====\n","No improvement in Val ROC AUC for 741 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3427, Val Loss: 1.0998, Val Accuracy: 0.3733\n","===== Epoch 783/2000 =====\n","No improvement in Val ROC AUC for 742 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3537, Val Loss: 1.0954, Val Accuracy: 0.3600\n","===== Epoch 784/2000 =====\n","No improvement in Val ROC AUC for 743 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3451, Val Loss: 1.0949, Val Accuracy: 0.3333\n","===== Epoch 785/2000 =====\n","No improvement in Val ROC AUC for 744 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3545, Val Loss: 1.0970, Val Accuracy: 0.3778\n","===== Epoch 786/2000 =====\n","No improvement in Val ROC AUC for 745 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3584, Val Loss: 1.1017, Val Accuracy: 0.3200\n","===== Epoch 787/2000 =====\n","No improvement in Val ROC AUC for 746 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3459, Val Loss: 1.1017, Val Accuracy: 0.3244\n","===== Epoch 788/2000 =====\n","No improvement in Val ROC AUC for 747 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3600, Val Loss: 1.0977, Val Accuracy: 0.3467\n","===== Epoch 789/2000 =====\n","No improvement in Val ROC AUC for 748 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3396, Val Loss: 1.1043, Val Accuracy: 0.2844\n","===== Epoch 790/2000 =====\n","No improvement in Val ROC AUC for 749 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3506, Val Loss: 1.0968, Val Accuracy: 0.3644\n","===== Epoch 791/2000 =====\n","No improvement in Val ROC AUC for 750 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3655, Val Loss: 1.1024, Val Accuracy: 0.3022\n","===== Epoch 792/2000 =====\n","No improvement in Val ROC AUC for 751 epoch(s). Best is 0.5969. Train Loss: 1.0949, Train Accuracy: 0.3624, Val Loss: 1.1015, Val Accuracy: 0.3022\n","===== Epoch 793/2000 =====\n","No improvement in Val ROC AUC for 752 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3459, Val Loss: 1.1118, Val Accuracy: 0.3111\n","===== Epoch 794/2000 =====\n","No improvement in Val ROC AUC for 753 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.0989, Val Accuracy: 0.3467\n","===== Epoch 795/2000 =====\n","No improvement in Val ROC AUC for 754 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3537, Val Loss: 1.0968, Val Accuracy: 0.3511\n","===== Epoch 796/2000 =====\n","No improvement in Val ROC AUC for 755 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3608, Val Loss: 1.1005, Val Accuracy: 0.3111\n","===== Epoch 797/2000 =====\n","No improvement in Val ROC AUC for 756 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3435, Val Loss: 1.1075, Val Accuracy: 0.2978\n","===== Epoch 798/2000 =====\n","No improvement in Val ROC AUC for 757 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3584, Val Loss: 1.0998, Val Accuracy: 0.3289\n","===== Epoch 799/2000 =====\n","No improvement in Val ROC AUC for 758 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3569, Val Loss: 1.0973, Val Accuracy: 0.3689\n","===== Epoch 800/2000 =====\n","No improvement in Val ROC AUC for 759 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3459, Val Loss: 1.0984, Val Accuracy: 0.3244\n","===== Epoch 801/2000 =====\n","No improvement in Val ROC AUC for 760 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3490, Val Loss: 1.0931, Val Accuracy: 0.3778\n","===== Epoch 802/2000 =====\n","No improvement in Val ROC AUC for 761 epoch(s). Best is 0.5969. Train Loss: 1.0942, Train Accuracy: 0.3835, Val Loss: 1.0985, Val Accuracy: 0.3422\n","===== Epoch 803/2000 =====\n","No improvement in Val ROC AUC for 762 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3671, Val Loss: 1.0936, Val Accuracy: 0.3511\n","===== Epoch 804/2000 =====\n","No improvement in Val ROC AUC for 763 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3529, Val Loss: 1.1005, Val Accuracy: 0.3378\n","===== Epoch 805/2000 =====\n","No improvement in Val ROC AUC for 764 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3498, Val Loss: 1.1004, Val Accuracy: 0.3467\n","===== Epoch 806/2000 =====\n","No improvement in Val ROC AUC for 765 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3616, Val Loss: 1.0998, Val Accuracy: 0.3556\n","===== Epoch 807/2000 =====\n","No improvement in Val ROC AUC for 766 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3553, Val Loss: 1.1046, Val Accuracy: 0.2844\n","===== Epoch 808/2000 =====\n","No improvement in Val ROC AUC for 767 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3678, Val Loss: 1.1010, Val Accuracy: 0.3422\n","===== Epoch 809/2000 =====\n","No improvement in Val ROC AUC for 768 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3631, Val Loss: 1.0965, Val Accuracy: 0.3867\n","===== Epoch 810/2000 =====\n","No improvement in Val ROC AUC for 769 epoch(s). Best is 0.5969. Train Loss: 1.0960, Train Accuracy: 0.3671, Val Loss: 1.0944, Val Accuracy: 0.3689\n","===== Epoch 811/2000 =====\n","No improvement in Val ROC AUC for 770 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3702, Val Loss: 1.0917, Val Accuracy: 0.4267\n","===== Epoch 812/2000 =====\n","No improvement in Val ROC AUC for 771 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3561, Val Loss: 1.0950, Val Accuracy: 0.3111\n","===== Epoch 813/2000 =====\n","No improvement in Val ROC AUC for 772 epoch(s). Best is 0.5969. Train Loss: 1.0945, Train Accuracy: 0.3788, Val Loss: 1.1034, Val Accuracy: 0.3378\n","===== Epoch 814/2000 =====\n","No improvement in Val ROC AUC for 773 epoch(s). Best is 0.5969. Train Loss: 1.0954, Train Accuracy: 0.3812, Val Loss: 1.1039, Val Accuracy: 0.3333\n","===== Epoch 815/2000 =====\n","No improvement in Val ROC AUC for 774 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3608, Val Loss: 1.0999, Val Accuracy: 0.3289\n","===== Epoch 816/2000 =====\n","No improvement in Val ROC AUC for 775 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3600, Val Loss: 1.0964, Val Accuracy: 0.3689\n","===== Epoch 817/2000 =====\n","No improvement in Val ROC AUC for 776 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3569, Val Loss: 1.1000, Val Accuracy: 0.3556\n","===== Epoch 818/2000 =====\n","No improvement in Val ROC AUC for 777 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3663, Val Loss: 1.0957, Val Accuracy: 0.3333\n","===== Epoch 819/2000 =====\n","No improvement in Val ROC AUC for 778 epoch(s). Best is 0.5969. Train Loss: 1.0939, Train Accuracy: 0.3773, Val Loss: 1.1090, Val Accuracy: 0.3111\n","===== Epoch 820/2000 =====\n","No improvement in Val ROC AUC for 779 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3765, Val Loss: 1.1065, Val Accuracy: 0.3156\n","===== Epoch 821/2000 =====\n","No improvement in Val ROC AUC for 780 epoch(s). Best is 0.5969. Train Loss: 1.0954, Train Accuracy: 0.3600, Val Loss: 1.0963, Val Accuracy: 0.3778\n","===== Epoch 822/2000 =====\n","No improvement in Val ROC AUC for 781 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3600, Val Loss: 1.1061, Val Accuracy: 0.3156\n","===== Epoch 823/2000 =====\n","No improvement in Val ROC AUC for 782 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3600, Val Loss: 1.0963, Val Accuracy: 0.3556\n","===== Epoch 824/2000 =====\n","No improvement in Val ROC AUC for 783 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3388, Val Loss: 1.0982, Val Accuracy: 0.3778\n","===== Epoch 825/2000 =====\n","No improvement in Val ROC AUC for 784 epoch(s). Best is 0.5969. Train Loss: 1.0936, Train Accuracy: 0.3710, Val Loss: 1.1014, Val Accuracy: 0.3244\n","===== Epoch 826/2000 =====\n","No improvement in Val ROC AUC for 785 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3639, Val Loss: 1.1021, Val Accuracy: 0.3244\n","===== Epoch 827/2000 =====\n","No improvement in Val ROC AUC for 786 epoch(s). Best is 0.5969. Train Loss: 1.0955, Train Accuracy: 0.3631, Val Loss: 1.0987, Val Accuracy: 0.3644\n","===== Epoch 828/2000 =====\n","No improvement in Val ROC AUC for 787 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3514, Val Loss: 1.0924, Val Accuracy: 0.3689\n","===== Epoch 829/2000 =====\n","No improvement in Val ROC AUC for 788 epoch(s). Best is 0.5969. Train Loss: 1.0937, Train Accuracy: 0.3804, Val Loss: 1.1018, Val Accuracy: 0.3600\n","===== Epoch 830/2000 =====\n","No improvement in Val ROC AUC for 789 epoch(s). Best is 0.5969. Train Loss: 1.0950, Train Accuracy: 0.3678, Val Loss: 1.0998, Val Accuracy: 0.3244\n","===== Epoch 831/2000 =====\n","No improvement in Val ROC AUC for 790 epoch(s). Best is 0.5969. Train Loss: 1.0952, Train Accuracy: 0.3553, Val Loss: 1.0961, Val Accuracy: 0.3689\n","===== Epoch 832/2000 =====\n","No improvement in Val ROC AUC for 791 epoch(s). Best is 0.5969. Train Loss: 1.0928, Train Accuracy: 0.3741, Val Loss: 1.0941, Val Accuracy: 0.3556\n","===== Epoch 833/2000 =====\n","No improvement in Val ROC AUC for 792 epoch(s). Best is 0.5969. Train Loss: 1.0911, Train Accuracy: 0.3788, Val Loss: 1.1038, Val Accuracy: 0.3156\n","===== Epoch 834/2000 =====\n","No improvement in Val ROC AUC for 793 epoch(s). Best is 0.5969. Train Loss: 1.0938, Train Accuracy: 0.3725, Val Loss: 1.0964, Val Accuracy: 0.3600\n","===== Epoch 835/2000 =====\n","No improvement in Val ROC AUC for 794 epoch(s). Best is 0.5969. Train Loss: 1.0918, Train Accuracy: 0.3749, Val Loss: 1.0977, Val Accuracy: 0.3600\n","===== Epoch 836/2000 =====\n","No improvement in Val ROC AUC for 795 epoch(s). Best is 0.5969. Train Loss: 1.0935, Train Accuracy: 0.3686, Val Loss: 1.0937, Val Accuracy: 0.3422\n","===== Epoch 837/2000 =====\n","No improvement in Val ROC AUC for 796 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3796, Val Loss: 1.0965, Val Accuracy: 0.3111\n","===== Epoch 838/2000 =====\n","No improvement in Val ROC AUC for 797 epoch(s). Best is 0.5969. Train Loss: 1.0926, Train Accuracy: 0.3835, Val Loss: 1.0912, Val Accuracy: 0.3911\n","===== Epoch 839/2000 =====\n","No improvement in Val ROC AUC for 798 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3835, Val Loss: 1.1017, Val Accuracy: 0.3422\n","===== Epoch 840/2000 =====\n","No improvement in Val ROC AUC for 799 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3647, Val Loss: 1.0961, Val Accuracy: 0.3911\n","===== Epoch 841/2000 =====\n","No improvement in Val ROC AUC for 800 epoch(s). Best is 0.5969. Train Loss: 1.0918, Train Accuracy: 0.3765, Val Loss: 1.0958, Val Accuracy: 0.3867\n","===== Epoch 842/2000 =====\n","No improvement in Val ROC AUC for 801 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3467, Val Loss: 1.0935, Val Accuracy: 0.3644\n","===== Epoch 843/2000 =====\n","No improvement in Val ROC AUC for 802 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3702, Val Loss: 1.0961, Val Accuracy: 0.3511\n","===== Epoch 844/2000 =====\n","No improvement in Val ROC AUC for 803 epoch(s). Best is 0.5969. Train Loss: 1.0926, Train Accuracy: 0.3773, Val Loss: 1.0973, Val Accuracy: 0.3511\n","===== Epoch 845/2000 =====\n","No improvement in Val ROC AUC for 804 epoch(s). Best is 0.5969. Train Loss: 1.0940, Train Accuracy: 0.3694, Val Loss: 1.0991, Val Accuracy: 0.3556\n","===== Epoch 846/2000 =====\n","No improvement in Val ROC AUC for 805 epoch(s). Best is 0.5969. Train Loss: 1.0945, Train Accuracy: 0.3616, Val Loss: 1.0884, Val Accuracy: 0.3733\n","===== Epoch 847/2000 =====\n","No improvement in Val ROC AUC for 806 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3827, Val Loss: 1.0917, Val Accuracy: 0.3733\n","===== Epoch 848/2000 =====\n","No improvement in Val ROC AUC for 807 epoch(s). Best is 0.5969. Train Loss: 1.0938, Train Accuracy: 0.3584, Val Loss: 1.0994, Val Accuracy: 0.3422\n","===== Epoch 849/2000 =====\n","No improvement in Val ROC AUC for 808 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3553, Val Loss: 1.0961, Val Accuracy: 0.3778\n","===== Epoch 850/2000 =====\n","No improvement in Val ROC AUC for 809 epoch(s). Best is 0.5969. Train Loss: 1.0928, Train Accuracy: 0.3686, Val Loss: 1.0969, Val Accuracy: 0.3644\n","===== Epoch 851/2000 =====\n","No improvement in Val ROC AUC for 810 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3498, Val Loss: 1.0966, Val Accuracy: 0.3422\n","===== Epoch 852/2000 =====\n","No improvement in Val ROC AUC for 811 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3804, Val Loss: 1.0935, Val Accuracy: 0.3511\n","===== Epoch 853/2000 =====\n","No improvement in Val ROC AUC for 812 epoch(s). Best is 0.5969. Train Loss: 1.0924, Train Accuracy: 0.3702, Val Loss: 1.0925, Val Accuracy: 0.3867\n","===== Epoch 854/2000 =====\n","No improvement in Val ROC AUC for 813 epoch(s). Best is 0.5969. Train Loss: 1.0934, Train Accuracy: 0.3710, Val Loss: 1.1030, Val Accuracy: 0.3244\n","===== Epoch 855/2000 =====\n","No improvement in Val ROC AUC for 814 epoch(s). Best is 0.5969. Train Loss: 1.0935, Train Accuracy: 0.3631, Val Loss: 1.0961, Val Accuracy: 0.3733\n","===== Epoch 856/2000 =====\n","No improvement in Val ROC AUC for 815 epoch(s). Best is 0.5969. Train Loss: 1.0919, Train Accuracy: 0.3867, Val Loss: 1.1011, Val Accuracy: 0.3156\n","===== Epoch 857/2000 =====\n","No improvement in Val ROC AUC for 816 epoch(s). Best is 0.5969. Train Loss: 1.0946, Train Accuracy: 0.3639, Val Loss: 1.0929, Val Accuracy: 0.3778\n","===== Epoch 858/2000 =====\n","No improvement in Val ROC AUC for 817 epoch(s). Best is 0.5969. Train Loss: 1.0919, Train Accuracy: 0.3773, Val Loss: 1.1006, Val Accuracy: 0.3244\n","===== Epoch 859/2000 =====\n","No improvement in Val ROC AUC for 818 epoch(s). Best is 0.5969. Train Loss: 1.0934, Train Accuracy: 0.3827, Val Loss: 1.0913, Val Accuracy: 0.4000\n","===== Epoch 860/2000 =====\n","No improvement in Val ROC AUC for 819 epoch(s). Best is 0.5969. Train Loss: 1.0927, Train Accuracy: 0.3639, Val Loss: 1.0985, Val Accuracy: 0.3467\n","===== Epoch 861/2000 =====\n","No improvement in Val ROC AUC for 820 epoch(s). Best is 0.5969. Train Loss: 1.0952, Train Accuracy: 0.3663, Val Loss: 1.0902, Val Accuracy: 0.3511\n","===== Epoch 862/2000 =====\n","No improvement in Val ROC AUC for 821 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3655, Val Loss: 1.0972, Val Accuracy: 0.3333\n","===== Epoch 863/2000 =====\n","No improvement in Val ROC AUC for 822 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3796, Val Loss: 1.0991, Val Accuracy: 0.3244\n","===== Epoch 864/2000 =====\n","No improvement in Val ROC AUC for 823 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3718, Val Loss: 1.0912, Val Accuracy: 0.4000\n","===== Epoch 865/2000 =====\n","No improvement in Val ROC AUC for 824 epoch(s). Best is 0.5969. Train Loss: 1.0948, Train Accuracy: 0.3710, Val Loss: 1.1032, Val Accuracy: 0.3511\n","===== Epoch 866/2000 =====\n","No improvement in Val ROC AUC for 825 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3867, Val Loss: 1.0866, Val Accuracy: 0.4222\n","===== Epoch 867/2000 =====\n","No improvement in Val ROC AUC for 826 epoch(s). Best is 0.5969. Train Loss: 1.0904, Train Accuracy: 0.3827, Val Loss: 1.1010, Val Accuracy: 0.3689\n","===== Epoch 868/2000 =====\n","No improvement in Val ROC AUC for 827 epoch(s). Best is 0.5969. Train Loss: 1.0913, Train Accuracy: 0.3733, Val Loss: 1.0929, Val Accuracy: 0.3911\n","===== Epoch 869/2000 =====\n","No improvement in Val ROC AUC for 828 epoch(s). Best is 0.5969. Train Loss: 1.0897, Train Accuracy: 0.3820, Val Loss: 1.1054, Val Accuracy: 0.3200\n","===== Epoch 870/2000 =====\n","No improvement in Val ROC AUC for 829 epoch(s). Best is 0.5969. Train Loss: 1.0940, Train Accuracy: 0.3710, Val Loss: 1.0998, Val Accuracy: 0.3200\n","===== Epoch 871/2000 =====\n","No improvement in Val ROC AUC for 830 epoch(s). Best is 0.5969. Train Loss: 1.0936, Train Accuracy: 0.3843, Val Loss: 1.0924, Val Accuracy: 0.3822\n","===== Epoch 872/2000 =====\n","No improvement in Val ROC AUC for 831 epoch(s). Best is 0.5969. Train Loss: 1.0929, Train Accuracy: 0.3867, Val Loss: 1.0967, Val Accuracy: 0.3644\n","===== Epoch 873/2000 =====\n","No improvement in Val ROC AUC for 832 epoch(s). Best is 0.5969. Train Loss: 1.0888, Train Accuracy: 0.3757, Val Loss: 1.0986, Val Accuracy: 0.3244\n","===== Epoch 874/2000 =====\n","No improvement in Val ROC AUC for 833 epoch(s). Best is 0.5969. Train Loss: 1.0930, Train Accuracy: 0.3678, Val Loss: 1.0966, Val Accuracy: 0.3600\n","===== Epoch 875/2000 =====\n","No improvement in Val ROC AUC for 834 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3616, Val Loss: 1.1004, Val Accuracy: 0.3644\n","===== Epoch 876/2000 =====\n","No improvement in Val ROC AUC for 835 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3435, Val Loss: 1.0906, Val Accuracy: 0.3689\n","===== Epoch 877/2000 =====\n","No improvement in Val ROC AUC for 836 epoch(s). Best is 0.5969. Train Loss: 1.0892, Train Accuracy: 0.3929, Val Loss: 1.0942, Val Accuracy: 0.3733\n","===== Epoch 878/2000 =====\n","No improvement in Val ROC AUC for 837 epoch(s). Best is 0.5969. Train Loss: 1.0916, Train Accuracy: 0.3773, Val Loss: 1.0949, Val Accuracy: 0.3556\n","===== Epoch 879/2000 =====\n","No improvement in Val ROC AUC for 838 epoch(s). Best is 0.5969. Train Loss: 1.0899, Train Accuracy: 0.4008, Val Loss: 1.1052, Val Accuracy: 0.3467\n","===== Epoch 880/2000 =====\n","No improvement in Val ROC AUC for 839 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3710, Val Loss: 1.0971, Val Accuracy: 0.3644\n","===== Epoch 881/2000 =====\n","No improvement in Val ROC AUC for 840 epoch(s). Best is 0.5969. Train Loss: 1.0921, Train Accuracy: 0.3773, Val Loss: 1.0941, Val Accuracy: 0.3733\n","===== Epoch 882/2000 =====\n","No improvement in Val ROC AUC for 841 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3718, Val Loss: 1.0961, Val Accuracy: 0.3378\n","===== Epoch 883/2000 =====\n","No improvement in Val ROC AUC for 842 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3592, Val Loss: 1.0948, Val Accuracy: 0.3822\n","===== Epoch 884/2000 =====\n","No improvement in Val ROC AUC for 843 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3686, Val Loss: 1.0962, Val Accuracy: 0.3333\n","===== Epoch 885/2000 =====\n","No improvement in Val ROC AUC for 844 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3875, Val Loss: 1.0973, Val Accuracy: 0.3778\n","===== Epoch 886/2000 =====\n","No improvement in Val ROC AUC for 845 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3592, Val Loss: 1.1062, Val Accuracy: 0.3289\n","===== Epoch 887/2000 =====\n","No improvement in Val ROC AUC for 846 epoch(s). Best is 0.5969. Train Loss: 1.0916, Train Accuracy: 0.3788, Val Loss: 1.0877, Val Accuracy: 0.3911\n","===== Epoch 888/2000 =====\n","No improvement in Val ROC AUC for 847 epoch(s). Best is 0.5969. Train Loss: 1.0961, Train Accuracy: 0.3694, Val Loss: 1.0982, Val Accuracy: 0.3422\n","===== Epoch 889/2000 =====\n","No improvement in Val ROC AUC for 848 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3710, Val Loss: 1.0992, Val Accuracy: 0.3467\n","===== Epoch 890/2000 =====\n","No improvement in Val ROC AUC for 849 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3702, Val Loss: 1.0985, Val Accuracy: 0.3422\n","===== Epoch 891/2000 =====\n","No improvement in Val ROC AUC for 850 epoch(s). Best is 0.5969. Train Loss: 1.0914, Train Accuracy: 0.3788, Val Loss: 1.1045, Val Accuracy: 0.3422\n","===== Epoch 892/2000 =====\n","No improvement in Val ROC AUC for 851 epoch(s). Best is 0.5969. Train Loss: 1.0924, Train Accuracy: 0.3757, Val Loss: 1.0994, Val Accuracy: 0.3689\n","===== Epoch 893/2000 =====\n","No improvement in Val ROC AUC for 852 epoch(s). Best is 0.5969. Train Loss: 1.0900, Train Accuracy: 0.3984, Val Loss: 1.0867, Val Accuracy: 0.3867\n","===== Epoch 894/2000 =====\n","No improvement in Val ROC AUC for 853 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3890, Val Loss: 1.0869, Val Accuracy: 0.3867\n","===== Epoch 895/2000 =====\n","No improvement in Val ROC AUC for 854 epoch(s). Best is 0.5969. Train Loss: 1.0930, Train Accuracy: 0.3639, Val Loss: 1.1030, Val Accuracy: 0.3467\n","===== Epoch 896/2000 =====\n","No improvement in Val ROC AUC for 855 epoch(s). Best is 0.5969. Train Loss: 1.0941, Train Accuracy: 0.3749, Val Loss: 1.0957, Val Accuracy: 0.3778\n","===== Epoch 897/2000 =====\n","No improvement in Val ROC AUC for 856 epoch(s). Best is 0.5969. Train Loss: 1.0931, Train Accuracy: 0.3843, Val Loss: 1.0967, Val Accuracy: 0.3422\n","===== Epoch 898/2000 =====\n","New best model saved with Val ROC AUC: 0.5977, Train Loss: 1.0913, Train Accuracy: 0.3890, Val Loss: 1.0861, Val Accuracy: 0.4133\n","===== Epoch 899/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5977. Train Loss: 1.0882, Train Accuracy: 0.3820, Val Loss: 1.0857, Val Accuracy: 0.3822\n","===== Epoch 900/2000 =====\n","New best model saved with Val ROC AUC: 0.6004, Train Loss: 1.0920, Train Accuracy: 0.3725, Val Loss: 1.0868, Val Accuracy: 0.4311\n","===== Epoch 901/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6004. Train Loss: 1.0928, Train Accuracy: 0.3655, Val Loss: 1.1003, Val Accuracy: 0.3556\n","===== Epoch 902/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6004. Train Loss: 1.0926, Train Accuracy: 0.3765, Val Loss: 1.1023, Val Accuracy: 0.3333\n","===== Epoch 903/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6004. Train Loss: 1.0950, Train Accuracy: 0.3718, Val Loss: 1.0892, Val Accuracy: 0.4000\n","===== Epoch 904/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6004. Train Loss: 1.0907, Train Accuracy: 0.3937, Val Loss: 1.0883, Val Accuracy: 0.3867\n","===== Epoch 905/2000 =====\n","New best model saved with Val ROC AUC: 0.6088, Train Loss: 1.0877, Train Accuracy: 0.3945, Val Loss: 1.0785, Val Accuracy: 0.4311\n","===== Epoch 906/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6088. Train Loss: 1.0890, Train Accuracy: 0.3969, Val Loss: 1.0869, Val Accuracy: 0.3867\n","===== Epoch 907/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6088. Train Loss: 1.0879, Train Accuracy: 0.3937, Val Loss: 1.0924, Val Accuracy: 0.3778\n","===== Epoch 908/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6088. Train Loss: 1.0875, Train Accuracy: 0.3929, Val Loss: 1.0966, Val Accuracy: 0.3600\n","===== Epoch 909/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6088. Train Loss: 1.0860, Train Accuracy: 0.4063, Val Loss: 1.0850, Val Accuracy: 0.4267\n","===== Epoch 910/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6088. Train Loss: 1.0829, Train Accuracy: 0.4055, Val Loss: 1.0867, Val Accuracy: 0.3644\n","===== Epoch 911/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6088. Train Loss: 1.0858, Train Accuracy: 0.4031, Val Loss: 1.0786, Val Accuracy: 0.3956\n","===== Epoch 912/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6088. Train Loss: 1.0883, Train Accuracy: 0.3788, Val Loss: 1.0749, Val Accuracy: 0.4089\n","===== Epoch 913/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6088. Train Loss: 1.0846, Train Accuracy: 0.4071, Val Loss: 1.0892, Val Accuracy: 0.3556\n","===== Epoch 914/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6088. Train Loss: 1.0925, Train Accuracy: 0.3796, Val Loss: 1.0950, Val Accuracy: 0.3378\n","===== Epoch 915/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6088. Train Loss: 1.0853, Train Accuracy: 0.3929, Val Loss: 1.0921, Val Accuracy: 0.3333\n","===== Epoch 916/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6088. Train Loss: 1.0878, Train Accuracy: 0.4047, Val Loss: 1.0852, Val Accuracy: 0.4089\n","===== Epoch 917/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4149, Val Loss: 1.0946, Val Accuracy: 0.3822\n","===== Epoch 918/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6088. Train Loss: 1.0897, Train Accuracy: 0.3851, Val Loss: 1.0914, Val Accuracy: 0.3422\n","===== Epoch 919/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6088. Train Loss: 1.0826, Train Accuracy: 0.4047, Val Loss: 1.0778, Val Accuracy: 0.4089\n","===== Epoch 920/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6088. Train Loss: 1.0830, Train Accuracy: 0.4243, Val Loss: 1.1010, Val Accuracy: 0.3556\n","===== Epoch 921/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6088. Train Loss: 1.0900, Train Accuracy: 0.3710, Val Loss: 1.0893, Val Accuracy: 0.4133\n","===== Epoch 922/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6088. Train Loss: 1.0804, Train Accuracy: 0.4055, Val Loss: 1.0775, Val Accuracy: 0.4044\n","===== Epoch 923/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6088. Train Loss: 1.0826, Train Accuracy: 0.4055, Val Loss: 1.0889, Val Accuracy: 0.3644\n","===== Epoch 924/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6088. Train Loss: 1.0870, Train Accuracy: 0.3984, Val Loss: 1.0739, Val Accuracy: 0.4400\n","===== Epoch 925/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4055, Val Loss: 1.0974, Val Accuracy: 0.3733\n","===== Epoch 926/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6088. Train Loss: 1.0832, Train Accuracy: 0.3969, Val Loss: 1.0772, Val Accuracy: 0.3867\n","===== Epoch 927/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6088. Train Loss: 1.0837, Train Accuracy: 0.4149, Val Loss: 1.0944, Val Accuracy: 0.3733\n","===== Epoch 928/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6088. Train Loss: 1.0792, Train Accuracy: 0.4024, Val Loss: 1.0933, Val Accuracy: 0.3644\n","===== Epoch 929/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6088. Train Loss: 1.0847, Train Accuracy: 0.3984, Val Loss: 1.0856, Val Accuracy: 0.4133\n","===== Epoch 930/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6088. Train Loss: 1.0794, Train Accuracy: 0.4220, Val Loss: 1.0805, Val Accuracy: 0.4133\n","===== Epoch 931/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6088. Train Loss: 1.0860, Train Accuracy: 0.3875, Val Loss: 1.0857, Val Accuracy: 0.3911\n","===== Epoch 932/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6088. Train Loss: 1.0758, Train Accuracy: 0.4157, Val Loss: 1.0762, Val Accuracy: 0.4222\n","===== Epoch 933/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6088. Train Loss: 1.0834, Train Accuracy: 0.3929, Val Loss: 1.0884, Val Accuracy: 0.4089\n","===== Epoch 934/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6088. Train Loss: 1.0870, Train Accuracy: 0.3898, Val Loss: 1.0808, Val Accuracy: 0.3867\n","===== Epoch 935/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4133, Val Loss: 1.0929, Val Accuracy: 0.3911\n","===== Epoch 936/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6088. Train Loss: 1.0783, Train Accuracy: 0.4110, Val Loss: 1.0767, Val Accuracy: 0.4089\n","===== Epoch 937/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6088. Train Loss: 1.0763, Train Accuracy: 0.4235, Val Loss: 1.0837, Val Accuracy: 0.4000\n","===== Epoch 938/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6088. Train Loss: 1.0835, Train Accuracy: 0.3984, Val Loss: 1.0842, Val Accuracy: 0.4044\n","===== Epoch 939/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6088. Train Loss: 1.0794, Train Accuracy: 0.4102, Val Loss: 1.0832, Val Accuracy: 0.3911\n","===== Epoch 940/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6088. Train Loss: 1.0832, Train Accuracy: 0.3976, Val Loss: 1.0848, Val Accuracy: 0.4089\n","===== Epoch 941/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6088. Train Loss: 1.0827, Train Accuracy: 0.4055, Val Loss: 1.0729, Val Accuracy: 0.4356\n","===== Epoch 942/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6088. Train Loss: 1.0874, Train Accuracy: 0.3835, Val Loss: 1.0749, Val Accuracy: 0.4267\n","===== Epoch 943/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6088. Train Loss: 1.0813, Train Accuracy: 0.3961, Val Loss: 1.0807, Val Accuracy: 0.4178\n","===== Epoch 944/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6088. Train Loss: 1.0824, Train Accuracy: 0.4133, Val Loss: 1.0780, Val Accuracy: 0.4178\n","===== Epoch 945/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6088. Train Loss: 1.0779, Train Accuracy: 0.4204, Val Loss: 1.0851, Val Accuracy: 0.4089\n","===== Epoch 946/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6088. Train Loss: 1.0784, Train Accuracy: 0.4180, Val Loss: 1.0824, Val Accuracy: 0.4178\n","===== Epoch 947/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6088. Train Loss: 1.0775, Train Accuracy: 0.4149, Val Loss: 1.0800, Val Accuracy: 0.4044\n","===== Epoch 948/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6088. Train Loss: 1.0723, Train Accuracy: 0.4290, Val Loss: 1.0782, Val Accuracy: 0.4000\n","===== Epoch 949/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6088. Train Loss: 1.0867, Train Accuracy: 0.3835, Val Loss: 1.0787, Val Accuracy: 0.4133\n","===== Epoch 950/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6088. Train Loss: 1.0749, Train Accuracy: 0.4235, Val Loss: 1.0824, Val Accuracy: 0.3911\n","===== Epoch 951/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6088. Train Loss: 1.0792, Train Accuracy: 0.4055, Val Loss: 1.0809, Val Accuracy: 0.4044\n","===== Epoch 952/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6088. Train Loss: 1.0828, Train Accuracy: 0.4039, Val Loss: 1.0739, Val Accuracy: 0.4000\n","===== Epoch 953/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4071, Val Loss: 1.0858, Val Accuracy: 0.3600\n","===== Epoch 954/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6088. Train Loss: 1.0809, Train Accuracy: 0.4086, Val Loss: 1.0849, Val Accuracy: 0.4044\n","===== Epoch 955/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4157, Val Loss: 1.0778, Val Accuracy: 0.4133\n","===== Epoch 956/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.6088. Train Loss: 1.0841, Train Accuracy: 0.3922, Val Loss: 1.0833, Val Accuracy: 0.4000\n","===== Epoch 957/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.6088. Train Loss: 1.0770, Train Accuracy: 0.4086, Val Loss: 1.0867, Val Accuracy: 0.3467\n","===== Epoch 958/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.6088. Train Loss: 1.0790, Train Accuracy: 0.4102, Val Loss: 1.0799, Val Accuracy: 0.4044\n","===== Epoch 959/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.6088. Train Loss: 1.0779, Train Accuracy: 0.4024, Val Loss: 1.0836, Val Accuracy: 0.3911\n","===== Epoch 960/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4094, Val Loss: 1.0849, Val Accuracy: 0.3867\n","===== Epoch 961/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4008, Val Loss: 1.0945, Val Accuracy: 0.3511\n","===== Epoch 962/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.6088. Train Loss: 1.0812, Train Accuracy: 0.3984, Val Loss: 1.0812, Val Accuracy: 0.4000\n","===== Epoch 963/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.6088. Train Loss: 1.0769, Train Accuracy: 0.4031, Val Loss: 1.0807, Val Accuracy: 0.4089\n","===== Epoch 964/2000 =====\n","New best model saved with Val ROC AUC: 0.6132, Train Loss: 1.0724, Train Accuracy: 0.4118, Val Loss: 1.0708, Val Accuracy: 0.4444\n","===== Epoch 965/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6132. Train Loss: 1.0782, Train Accuracy: 0.4204, Val Loss: 1.0912, Val Accuracy: 0.3822\n","===== Epoch 966/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6132. Train Loss: 1.0823, Train Accuracy: 0.3937, Val Loss: 1.0872, Val Accuracy: 0.3956\n","===== Epoch 967/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6132. Train Loss: 1.0748, Train Accuracy: 0.4180, Val Loss: 1.0794, Val Accuracy: 0.4311\n","===== Epoch 968/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6132. Train Loss: 1.0786, Train Accuracy: 0.4188, Val Loss: 1.1023, Val Accuracy: 0.3778\n","===== Epoch 969/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6132. Train Loss: 1.0742, Train Accuracy: 0.4204, Val Loss: 1.0890, Val Accuracy: 0.3644\n","===== Epoch 970/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6132. Train Loss: 1.0763, Train Accuracy: 0.4133, Val Loss: 1.0833, Val Accuracy: 0.3956\n","===== Epoch 971/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6132. Train Loss: 1.0817, Train Accuracy: 0.4000, Val Loss: 1.0943, Val Accuracy: 0.3600\n","===== Epoch 972/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6132. Train Loss: 1.0739, Train Accuracy: 0.4180, Val Loss: 1.0763, Val Accuracy: 0.4356\n","===== Epoch 973/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6132. Train Loss: 1.0780, Train Accuracy: 0.4078, Val Loss: 1.0725, Val Accuracy: 0.4178\n","===== Epoch 974/2000 =====\n","New best model saved with Val ROC AUC: 0.6184, Train Loss: 1.0705, Train Accuracy: 0.4384, Val Loss: 1.0782, Val Accuracy: 0.3956\n","===== Epoch 975/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6184. Train Loss: 1.0783, Train Accuracy: 0.4227, Val Loss: 1.1000, Val Accuracy: 0.3333\n","===== Epoch 976/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6184. Train Loss: 1.0752, Train Accuracy: 0.4039, Val Loss: 1.0871, Val Accuracy: 0.4267\n","===== Epoch 977/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6184. Train Loss: 1.0813, Train Accuracy: 0.3992, Val Loss: 1.0766, Val Accuracy: 0.4222\n","===== Epoch 978/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6184. Train Loss: 1.0711, Train Accuracy: 0.4086, Val Loss: 1.0726, Val Accuracy: 0.4356\n","===== Epoch 979/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6184. Train Loss: 1.0826, Train Accuracy: 0.3812, Val Loss: 1.0752, Val Accuracy: 0.4222\n","===== Epoch 980/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6184. Train Loss: 1.0720, Train Accuracy: 0.4086, Val Loss: 1.1013, Val Accuracy: 0.3467\n","===== Epoch 981/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6184. Train Loss: 1.0785, Train Accuracy: 0.4063, Val Loss: 1.0740, Val Accuracy: 0.3867\n","===== Epoch 982/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6184. Train Loss: 1.0769, Train Accuracy: 0.4227, Val Loss: 1.0634, Val Accuracy: 0.4178\n","===== Epoch 983/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6184. Train Loss: 1.0769, Train Accuracy: 0.4204, Val Loss: 1.1043, Val Accuracy: 0.3200\n","===== Epoch 984/2000 =====\n","New best model saved with Val ROC AUC: 0.6365, Train Loss: 1.0769, Train Accuracy: 0.4039, Val Loss: 1.0717, Val Accuracy: 0.4178\n","===== Epoch 985/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6365. Train Loss: 1.0762, Train Accuracy: 0.4133, Val Loss: 1.0962, Val Accuracy: 0.3644\n","===== Epoch 986/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6365. Train Loss: 1.0822, Train Accuracy: 0.4086, Val Loss: 1.0631, Val Accuracy: 0.4444\n","===== Epoch 987/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6365. Train Loss: 1.0737, Train Accuracy: 0.4149, Val Loss: 1.0715, Val Accuracy: 0.4178\n","===== Epoch 988/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6365. Train Loss: 1.0717, Train Accuracy: 0.4173, Val Loss: 1.0927, Val Accuracy: 0.3600\n","===== Epoch 989/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6365. Train Loss: 1.0709, Train Accuracy: 0.4298, Val Loss: 1.0661, Val Accuracy: 0.4800\n","===== Epoch 990/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6365. Train Loss: 1.0735, Train Accuracy: 0.4314, Val Loss: 1.0650, Val Accuracy: 0.4356\n","===== Epoch 991/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6365. Train Loss: 1.0785, Train Accuracy: 0.4110, Val Loss: 1.0706, Val Accuracy: 0.4133\n","===== Epoch 992/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6365. Train Loss: 1.0750, Train Accuracy: 0.4063, Val Loss: 1.0642, Val Accuracy: 0.4444\n","===== Epoch 993/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6365. Train Loss: 1.0700, Train Accuracy: 0.4329, Val Loss: 1.0789, Val Accuracy: 0.4000\n","===== Epoch 994/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6365. Train Loss: 1.0736, Train Accuracy: 0.4196, Val Loss: 1.0716, Val Accuracy: 0.4178\n","===== Epoch 995/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6365. Train Loss: 1.0753, Train Accuracy: 0.4071, Val Loss: 1.0667, Val Accuracy: 0.4133\n","===== Epoch 996/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6365. Train Loss: 1.0656, Train Accuracy: 0.4220, Val Loss: 1.0870, Val Accuracy: 0.3911\n","===== Epoch 997/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6365. Train Loss: 1.0712, Train Accuracy: 0.4016, Val Loss: 1.0680, Val Accuracy: 0.4133\n","===== Epoch 998/2000 =====\n","New best model saved with Val ROC AUC: 0.6464, Train Loss: 1.0715, Train Accuracy: 0.4314, Val Loss: 1.0591, Val Accuracy: 0.4533\n","===== Epoch 999/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6464. Train Loss: 1.0705, Train Accuracy: 0.4180, Val Loss: 1.0641, Val Accuracy: 0.4489\n","===== Epoch 1000/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6464. Train Loss: 1.0630, Train Accuracy: 0.4369, Val Loss: 1.1075, Val Accuracy: 0.3822\n","===== Epoch 1001/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6464. Train Loss: 1.0628, Train Accuracy: 0.4290, Val Loss: 1.0811, Val Accuracy: 0.4133\n","===== Epoch 1002/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6464. Train Loss: 1.0637, Train Accuracy: 0.4306, Val Loss: 1.0521, Val Accuracy: 0.4711\n","===== Epoch 1003/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6464. Train Loss: 1.0626, Train Accuracy: 0.4227, Val Loss: 1.0708, Val Accuracy: 0.4222\n","===== Epoch 1004/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6464. Train Loss: 1.0592, Train Accuracy: 0.4376, Val Loss: 1.0528, Val Accuracy: 0.4444\n","===== Epoch 1005/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6464. Train Loss: 1.0834, Train Accuracy: 0.4071, Val Loss: 1.0554, Val Accuracy: 0.4578\n","===== Epoch 1006/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6464. Train Loss: 1.0523, Train Accuracy: 0.4518, Val Loss: 1.0538, Val Accuracy: 0.4578\n","===== Epoch 1007/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6464. Train Loss: 1.0687, Train Accuracy: 0.4125, Val Loss: 1.0781, Val Accuracy: 0.3956\n","===== Epoch 1008/2000 =====\n","New best model saved with Val ROC AUC: 0.6526, Train Loss: 1.0644, Train Accuracy: 0.4400, Val Loss: 1.0403, Val Accuracy: 0.4933\n","===== Epoch 1009/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6526. Train Loss: 1.0649, Train Accuracy: 0.4118, Val Loss: 1.0541, Val Accuracy: 0.4444\n","===== Epoch 1010/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6526. Train Loss: 1.0674, Train Accuracy: 0.4220, Val Loss: 1.0647, Val Accuracy: 0.4133\n","===== Epoch 1011/2000 =====\n","New best model saved with Val ROC AUC: 0.6750, Train Loss: 1.0540, Train Accuracy: 0.4337, Val Loss: 1.0707, Val Accuracy: 0.4133\n","===== Epoch 1012/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6750. Train Loss: 1.0566, Train Accuracy: 0.4494, Val Loss: 1.0740, Val Accuracy: 0.4267\n","===== Epoch 1013/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6750. Train Loss: 1.0480, Train Accuracy: 0.4502, Val Loss: 1.0557, Val Accuracy: 0.4356\n","===== Epoch 1014/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6750. Train Loss: 1.0507, Train Accuracy: 0.4580, Val Loss: 1.0470, Val Accuracy: 0.4533\n","===== Epoch 1015/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6750. Train Loss: 1.0620, Train Accuracy: 0.4243, Val Loss: 1.0309, Val Accuracy: 0.4444\n","===== Epoch 1016/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6750. Train Loss: 1.0557, Train Accuracy: 0.4439, Val Loss: 1.0431, Val Accuracy: 0.4578\n","===== Epoch 1017/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6750. Train Loss: 1.0499, Train Accuracy: 0.4345, Val Loss: 1.0741, Val Accuracy: 0.4178\n","===== Epoch 1018/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6750. Train Loss: 1.0322, Train Accuracy: 0.4698, Val Loss: 1.0455, Val Accuracy: 0.4356\n","===== Epoch 1019/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6750. Train Loss: 1.0467, Train Accuracy: 0.4620, Val Loss: 1.0541, Val Accuracy: 0.4089\n","===== Epoch 1020/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6750. Train Loss: 1.0540, Train Accuracy: 0.4400, Val Loss: 1.0356, Val Accuracy: 0.4533\n","===== Epoch 1021/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6750. Train Loss: 1.0589, Train Accuracy: 0.4259, Val Loss: 1.0314, Val Accuracy: 0.4844\n","===== Epoch 1022/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6750. Train Loss: 1.0500, Train Accuracy: 0.4424, Val Loss: 1.0514, Val Accuracy: 0.4178\n","===== Epoch 1023/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6750. Train Loss: 1.0581, Train Accuracy: 0.4298, Val Loss: 1.0337, Val Accuracy: 0.5067\n","===== Epoch 1024/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6750. Train Loss: 1.0490, Train Accuracy: 0.4463, Val Loss: 1.0342, Val Accuracy: 0.4622\n","===== Epoch 1025/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6750. Train Loss: 1.0516, Train Accuracy: 0.4314, Val Loss: 1.0254, Val Accuracy: 0.4889\n","===== Epoch 1026/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6750. Train Loss: 1.0505, Train Accuracy: 0.4384, Val Loss: 1.0282, Val Accuracy: 0.4533\n","===== Epoch 1027/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6750. Train Loss: 1.0429, Train Accuracy: 0.4620, Val Loss: 1.0176, Val Accuracy: 0.4800\n","===== Epoch 1028/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6750. Train Loss: 1.0512, Train Accuracy: 0.4478, Val Loss: 1.0483, Val Accuracy: 0.4400\n","===== Epoch 1029/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6750. Train Loss: 1.0431, Train Accuracy: 0.4573, Val Loss: 1.0377, Val Accuracy: 0.4578\n","===== Epoch 1030/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6750. Train Loss: 1.0424, Train Accuracy: 0.4494, Val Loss: 1.0414, Val Accuracy: 0.4444\n","===== Epoch 1031/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6750. Train Loss: 1.0445, Train Accuracy: 0.4557, Val Loss: 1.0527, Val Accuracy: 0.4489\n","===== Epoch 1032/2000 =====\n","New best model saved with Val ROC AUC: 0.7015, Train Loss: 1.0401, Train Accuracy: 0.4533, Val Loss: 1.0182, Val Accuracy: 0.4533\n","===== Epoch 1033/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7015. Train Loss: 1.0360, Train Accuracy: 0.4682, Val Loss: 1.0387, Val Accuracy: 0.4489\n","===== Epoch 1034/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7015. Train Loss: 1.0377, Train Accuracy: 0.4659, Val Loss: 1.0348, Val Accuracy: 0.5200\n","===== Epoch 1035/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7015. Train Loss: 1.0465, Train Accuracy: 0.4439, Val Loss: 1.0508, Val Accuracy: 0.4578\n","===== Epoch 1036/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7015. Train Loss: 1.0506, Train Accuracy: 0.4478, Val Loss: 1.0294, Val Accuracy: 0.4311\n","===== Epoch 1037/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7015. Train Loss: 1.0551, Train Accuracy: 0.4486, Val Loss: 1.0244, Val Accuracy: 0.4711\n","===== Epoch 1038/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7015. Train Loss: 1.0524, Train Accuracy: 0.4471, Val Loss: 1.0380, Val Accuracy: 0.4622\n","===== Epoch 1039/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7015. Train Loss: 1.0409, Train Accuracy: 0.4580, Val Loss: 1.0490, Val Accuracy: 0.4667\n","===== Epoch 1040/2000 =====\n","New best model saved with Val ROC AUC: 0.7016, Train Loss: 1.0394, Train Accuracy: 0.4580, Val Loss: 1.0140, Val Accuracy: 0.4933\n","===== Epoch 1041/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7016. Train Loss: 1.0404, Train Accuracy: 0.4698, Val Loss: 1.0507, Val Accuracy: 0.4178\n","===== Epoch 1042/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7016. Train Loss: 1.0432, Train Accuracy: 0.4690, Val Loss: 1.0521, Val Accuracy: 0.4400\n","===== Epoch 1043/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7016. Train Loss: 1.0325, Train Accuracy: 0.4588, Val Loss: 1.0207, Val Accuracy: 0.5022\n","===== Epoch 1044/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7016. Train Loss: 1.0473, Train Accuracy: 0.4533, Val Loss: 1.0257, Val Accuracy: 0.4978\n","===== Epoch 1045/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7016. Train Loss: 1.0379, Train Accuracy: 0.4549, Val Loss: 1.0370, Val Accuracy: 0.4756\n","===== Epoch 1046/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7016. Train Loss: 1.0372, Train Accuracy: 0.4573, Val Loss: 1.0687, Val Accuracy: 0.3956\n","===== Epoch 1047/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7016. Train Loss: 1.0506, Train Accuracy: 0.4439, Val Loss: 1.0088, Val Accuracy: 0.4978\n","===== Epoch 1048/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7016. Train Loss: 1.0499, Train Accuracy: 0.4486, Val Loss: 1.0361, Val Accuracy: 0.4533\n","===== Epoch 1049/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7016. Train Loss: 1.0565, Train Accuracy: 0.4431, Val Loss: 1.0266, Val Accuracy: 0.4533\n","===== Epoch 1050/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7016. Train Loss: 1.0388, Train Accuracy: 0.4463, Val Loss: 1.0557, Val Accuracy: 0.4178\n","===== Epoch 1051/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7016. Train Loss: 1.0468, Train Accuracy: 0.4510, Val Loss: 1.0540, Val Accuracy: 0.4267\n","===== Epoch 1052/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7016. Train Loss: 1.0418, Train Accuracy: 0.4525, Val Loss: 1.0399, Val Accuracy: 0.4800\n","===== Epoch 1053/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7016. Train Loss: 1.0397, Train Accuracy: 0.4604, Val Loss: 1.0458, Val Accuracy: 0.4178\n","===== Epoch 1054/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7016. Train Loss: 1.0388, Train Accuracy: 0.4525, Val Loss: 1.0468, Val Accuracy: 0.4489\n","===== Epoch 1055/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7016. Train Loss: 1.0416, Train Accuracy: 0.4604, Val Loss: 1.0280, Val Accuracy: 0.4933\n","===== Epoch 1056/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7016. Train Loss: 1.0485, Train Accuracy: 0.4392, Val Loss: 1.0162, Val Accuracy: 0.4578\n","===== Epoch 1057/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7016. Train Loss: 1.0494, Train Accuracy: 0.4212, Val Loss: 1.0474, Val Accuracy: 0.4844\n","===== Epoch 1058/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7016. Train Loss: 1.0455, Train Accuracy: 0.4573, Val Loss: 1.0407, Val Accuracy: 0.4622\n","===== Epoch 1059/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7016. Train Loss: 1.0386, Train Accuracy: 0.4722, Val Loss: 1.0322, Val Accuracy: 0.4400\n","===== Epoch 1060/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7016. Train Loss: 1.0360, Train Accuracy: 0.4431, Val Loss: 1.0459, Val Accuracy: 0.4400\n","===== Epoch 1061/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7016. Train Loss: 1.0468, Train Accuracy: 0.4541, Val Loss: 1.0084, Val Accuracy: 0.5067\n","===== Epoch 1062/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7016. Train Loss: 1.0359, Train Accuracy: 0.4761, Val Loss: 1.0315, Val Accuracy: 0.5022\n","===== Epoch 1063/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7016. Train Loss: 1.0307, Train Accuracy: 0.4816, Val Loss: 1.0190, Val Accuracy: 0.5111\n","===== Epoch 1064/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7016. Train Loss: 1.0561, Train Accuracy: 0.4486, Val Loss: 1.0420, Val Accuracy: 0.4267\n","===== Epoch 1065/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7016. Train Loss: 1.0453, Train Accuracy: 0.4471, Val Loss: 1.0327, Val Accuracy: 0.4178\n","===== Epoch 1066/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7016. Train Loss: 1.0265, Train Accuracy: 0.4745, Val Loss: 1.0388, Val Accuracy: 0.4222\n","===== Epoch 1067/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7016. Train Loss: 1.0438, Train Accuracy: 0.4596, Val Loss: 1.0290, Val Accuracy: 0.4578\n","===== Epoch 1068/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7016. Train Loss: 1.0527, Train Accuracy: 0.4369, Val Loss: 1.0475, Val Accuracy: 0.4356\n","===== Epoch 1069/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7016. Train Loss: 1.0305, Train Accuracy: 0.4667, Val Loss: 1.0490, Val Accuracy: 0.4444\n","===== Epoch 1070/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7016. Train Loss: 1.0539, Train Accuracy: 0.4533, Val Loss: 1.0312, Val Accuracy: 0.4756\n","===== Epoch 1071/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7016. Train Loss: 1.0324, Train Accuracy: 0.4706, Val Loss: 1.0320, Val Accuracy: 0.4889\n","===== Epoch 1072/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7016. Train Loss: 1.0378, Train Accuracy: 0.4769, Val Loss: 1.0407, Val Accuracy: 0.4444\n","===== Epoch 1073/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7016. Train Loss: 1.0530, Train Accuracy: 0.4392, Val Loss: 1.0434, Val Accuracy: 0.4533\n","===== Epoch 1074/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7016. Train Loss: 1.0387, Train Accuracy: 0.4533, Val Loss: 1.0498, Val Accuracy: 0.4267\n","===== Epoch 1075/2000 =====\n","New best model saved with Val ROC AUC: 0.7066, Train Loss: 1.0332, Train Accuracy: 0.4565, Val Loss: 0.9992, Val Accuracy: 0.5778\n","===== Epoch 1076/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7066. Train Loss: 1.0428, Train Accuracy: 0.4384, Val Loss: 1.0530, Val Accuracy: 0.4133\n","===== Epoch 1077/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7066. Train Loss: 1.0310, Train Accuracy: 0.4706, Val Loss: 1.0184, Val Accuracy: 0.4844\n","===== Epoch 1078/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7066. Train Loss: 1.0348, Train Accuracy: 0.4635, Val Loss: 1.0149, Val Accuracy: 0.4622\n","===== Epoch 1079/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7066. Train Loss: 1.0278, Train Accuracy: 0.4588, Val Loss: 1.0091, Val Accuracy: 0.5022\n","===== Epoch 1080/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7066. Train Loss: 1.0519, Train Accuracy: 0.4463, Val Loss: 1.0264, Val Accuracy: 0.4267\n","===== Epoch 1081/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7066. Train Loss: 1.0385, Train Accuracy: 0.4651, Val Loss: 1.0306, Val Accuracy: 0.4533\n","===== Epoch 1082/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7066. Train Loss: 1.0424, Train Accuracy: 0.4518, Val Loss: 1.0311, Val Accuracy: 0.4444\n","===== Epoch 1083/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7066. Train Loss: 1.0312, Train Accuracy: 0.4706, Val Loss: 1.0300, Val Accuracy: 0.4356\n","===== Epoch 1084/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7066. Train Loss: 1.0348, Train Accuracy: 0.4604, Val Loss: 1.0489, Val Accuracy: 0.4089\n","===== Epoch 1085/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7066. Train Loss: 1.0322, Train Accuracy: 0.4643, Val Loss: 1.0258, Val Accuracy: 0.4356\n","===== Epoch 1086/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7066. Train Loss: 1.0410, Train Accuracy: 0.4627, Val Loss: 1.0153, Val Accuracy: 0.4578\n","===== Epoch 1087/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7066. Train Loss: 1.0338, Train Accuracy: 0.4620, Val Loss: 1.0156, Val Accuracy: 0.4578\n","===== Epoch 1088/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7066. Train Loss: 1.0478, Train Accuracy: 0.4439, Val Loss: 1.0399, Val Accuracy: 0.4222\n","===== Epoch 1089/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7066. Train Loss: 1.0403, Train Accuracy: 0.4714, Val Loss: 1.0348, Val Accuracy: 0.4578\n","===== Epoch 1090/2000 =====\n","New best model saved with Val ROC AUC: 0.7204, Train Loss: 1.0500, Train Accuracy: 0.4573, Val Loss: 1.0082, Val Accuracy: 0.4933\n","===== Epoch 1091/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7204. Train Loss: 1.0277, Train Accuracy: 0.4627, Val Loss: 1.0193, Val Accuracy: 0.4533\n","===== Epoch 1092/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7204. Train Loss: 1.0243, Train Accuracy: 0.4800, Val Loss: 1.0175, Val Accuracy: 0.4667\n","===== Epoch 1093/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7204. Train Loss: 1.0431, Train Accuracy: 0.4886, Val Loss: 0.9945, Val Accuracy: 0.4844\n","===== Epoch 1094/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7204. Train Loss: 1.0345, Train Accuracy: 0.4620, Val Loss: 1.0187, Val Accuracy: 0.4800\n","===== Epoch 1095/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7204. Train Loss: 1.0416, Train Accuracy: 0.4565, Val Loss: 1.0158, Val Accuracy: 0.4978\n","===== Epoch 1096/2000 =====\n","New best model saved with Val ROC AUC: 0.7255, Train Loss: 1.0278, Train Accuracy: 0.4729, Val Loss: 0.9820, Val Accuracy: 0.5156\n","===== Epoch 1097/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7255. Train Loss: 1.0225, Train Accuracy: 0.4753, Val Loss: 0.9916, Val Accuracy: 0.5200\n","===== Epoch 1098/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7255. Train Loss: 1.0196, Train Accuracy: 0.4753, Val Loss: 1.0052, Val Accuracy: 0.4933\n","===== Epoch 1099/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7255. Train Loss: 1.0412, Train Accuracy: 0.4541, Val Loss: 1.0324, Val Accuracy: 0.4356\n","===== Epoch 1100/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7255. Train Loss: 1.0207, Train Accuracy: 0.4769, Val Loss: 1.0028, Val Accuracy: 0.4933\n","===== Epoch 1101/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7255. Train Loss: 1.0174, Train Accuracy: 0.4824, Val Loss: 1.0529, Val Accuracy: 0.4133\n","===== Epoch 1102/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7255. Train Loss: 1.0248, Train Accuracy: 0.4792, Val Loss: 1.0735, Val Accuracy: 0.4267\n","===== Epoch 1103/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7255. Train Loss: 1.0378, Train Accuracy: 0.4698, Val Loss: 1.0002, Val Accuracy: 0.4978\n","===== Epoch 1104/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7255. Train Loss: 1.0205, Train Accuracy: 0.4784, Val Loss: 1.0001, Val Accuracy: 0.4889\n","===== Epoch 1105/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7255. Train Loss: 1.0274, Train Accuracy: 0.4863, Val Loss: 0.9907, Val Accuracy: 0.5067\n","===== Epoch 1106/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7255. Train Loss: 1.0142, Train Accuracy: 0.4933, Val Loss: 0.9986, Val Accuracy: 0.5244\n","===== Epoch 1107/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7255. Train Loss: 1.0183, Train Accuracy: 0.4941, Val Loss: 0.9969, Val Accuracy: 0.5644\n","===== Epoch 1108/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7255. Train Loss: 1.0158, Train Accuracy: 0.4886, Val Loss: 0.9735, Val Accuracy: 0.5200\n","===== Epoch 1109/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7255. Train Loss: 1.0141, Train Accuracy: 0.4863, Val Loss: 0.9951, Val Accuracy: 0.5067\n","===== Epoch 1110/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7255. Train Loss: 1.0136, Train Accuracy: 0.4949, Val Loss: 0.9691, Val Accuracy: 0.5022\n","===== Epoch 1111/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7255. Train Loss: 1.0136, Train Accuracy: 0.4839, Val Loss: 1.0241, Val Accuracy: 0.4533\n","===== Epoch 1112/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7255. Train Loss: 1.0087, Train Accuracy: 0.4949, Val Loss: 1.0163, Val Accuracy: 0.4622\n","===== Epoch 1113/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7255. Train Loss: 1.0218, Train Accuracy: 0.4706, Val Loss: 1.0498, Val Accuracy: 0.3911\n","===== Epoch 1114/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7255. Train Loss: 1.0072, Train Accuracy: 0.4878, Val Loss: 0.9653, Val Accuracy: 0.5156\n","===== Epoch 1115/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7255. Train Loss: 1.0098, Train Accuracy: 0.4902, Val Loss: 0.9772, Val Accuracy: 0.5289\n","===== Epoch 1116/2000 =====\n","New best model saved with Val ROC AUC: 0.7304, Train Loss: 1.0044, Train Accuracy: 0.5098, Val Loss: 0.9652, Val Accuracy: 0.5200\n","===== Epoch 1117/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7304. Train Loss: 1.0054, Train Accuracy: 0.5020, Val Loss: 0.9951, Val Accuracy: 0.4933\n","===== Epoch 1118/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7304. Train Loss: 1.0073, Train Accuracy: 0.4918, Val Loss: 0.9873, Val Accuracy: 0.5156\n","===== Epoch 1119/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7304. Train Loss: 1.0026, Train Accuracy: 0.4925, Val Loss: 0.9864, Val Accuracy: 0.5600\n","===== Epoch 1120/2000 =====\n","New best model saved with Val ROC AUC: 0.7593, Train Loss: 1.0045, Train Accuracy: 0.5106, Val Loss: 0.9478, Val Accuracy: 0.5733\n","===== Epoch 1121/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7593. Train Loss: 1.0022, Train Accuracy: 0.5035, Val Loss: 0.9926, Val Accuracy: 0.5156\n","===== Epoch 1122/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7593. Train Loss: 0.9962, Train Accuracy: 0.5075, Val Loss: 0.9590, Val Accuracy: 0.5289\n","===== Epoch 1123/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7593. Train Loss: 1.0006, Train Accuracy: 0.4831, Val Loss: 0.9796, Val Accuracy: 0.5378\n","===== Epoch 1124/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7593. Train Loss: 1.0020, Train Accuracy: 0.4871, Val Loss: 0.9804, Val Accuracy: 0.4889\n","===== Epoch 1125/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7593. Train Loss: 1.0044, Train Accuracy: 0.4973, Val Loss: 0.9547, Val Accuracy: 0.5333\n","===== Epoch 1126/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7593. Train Loss: 0.9972, Train Accuracy: 0.5027, Val Loss: 0.9761, Val Accuracy: 0.5467\n","===== Epoch 1127/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7593. Train Loss: 0.9861, Train Accuracy: 0.5122, Val Loss: 0.9493, Val Accuracy: 0.5378\n","===== Epoch 1128/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7593. Train Loss: 0.9995, Train Accuracy: 0.5004, Val Loss: 0.9489, Val Accuracy: 0.5778\n","===== Epoch 1129/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7593. Train Loss: 0.9846, Train Accuracy: 0.5106, Val Loss: 0.9460, Val Accuracy: 0.5333\n","===== Epoch 1130/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7593. Train Loss: 0.9877, Train Accuracy: 0.4957, Val Loss: 0.9757, Val Accuracy: 0.4844\n","===== Epoch 1131/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7593. Train Loss: 0.9948, Train Accuracy: 0.5051, Val Loss: 0.9482, Val Accuracy: 0.5467\n","===== Epoch 1132/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7593. Train Loss: 0.9898, Train Accuracy: 0.5098, Val Loss: 0.9733, Val Accuracy: 0.4933\n","===== Epoch 1133/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7593. Train Loss: 0.9766, Train Accuracy: 0.5098, Val Loss: 0.9704, Val Accuracy: 0.5022\n","===== Epoch 1134/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7593. Train Loss: 0.9995, Train Accuracy: 0.4965, Val Loss: 0.9569, Val Accuracy: 0.5467\n","===== Epoch 1135/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7593. Train Loss: 0.9851, Train Accuracy: 0.5161, Val Loss: 0.9598, Val Accuracy: 0.5556\n","===== Epoch 1136/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7593. Train Loss: 0.9848, Train Accuracy: 0.5294, Val Loss: 0.9575, Val Accuracy: 0.5200\n","===== Epoch 1137/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7593. Train Loss: 0.9882, Train Accuracy: 0.5075, Val Loss: 0.9482, Val Accuracy: 0.5378\n","===== Epoch 1138/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7593. Train Loss: 0.9956, Train Accuracy: 0.5098, Val Loss: 0.9505, Val Accuracy: 0.5378\n","===== Epoch 1139/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7593. Train Loss: 0.9903, Train Accuracy: 0.5271, Val Loss: 0.9812, Val Accuracy: 0.5556\n","===== Epoch 1140/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7593. Train Loss: 0.9814, Train Accuracy: 0.5075, Val Loss: 0.9539, Val Accuracy: 0.5467\n","===== Epoch 1141/2000 =====\n","New best model saved with Val ROC AUC: 0.7601, Train Loss: 0.9850, Train Accuracy: 0.5067, Val Loss: 0.9301, Val Accuracy: 0.5289\n","===== Epoch 1142/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7601. Train Loss: 0.9774, Train Accuracy: 0.5106, Val Loss: 0.9680, Val Accuracy: 0.5333\n","===== Epoch 1143/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7601. Train Loss: 0.9764, Train Accuracy: 0.5161, Val Loss: 0.9903, Val Accuracy: 0.5022\n","===== Epoch 1144/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7601. Train Loss: 0.9843, Train Accuracy: 0.5278, Val Loss: 0.9445, Val Accuracy: 0.5556\n","===== Epoch 1145/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7601. Train Loss: 0.9858, Train Accuracy: 0.5184, Val Loss: 0.9658, Val Accuracy: 0.4978\n","===== Epoch 1146/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7601. Train Loss: 0.9826, Train Accuracy: 0.5067, Val Loss: 0.9604, Val Accuracy: 0.5422\n","===== Epoch 1147/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7601. Train Loss: 0.9796, Train Accuracy: 0.5231, Val Loss: 0.9516, Val Accuracy: 0.5111\n","===== Epoch 1148/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7601. Train Loss: 0.9934, Train Accuracy: 0.5051, Val Loss: 0.9844, Val Accuracy: 0.5111\n","===== Epoch 1149/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7601. Train Loss: 0.9879, Train Accuracy: 0.4957, Val Loss: 0.9313, Val Accuracy: 0.5511\n","===== Epoch 1150/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7601. Train Loss: 0.9900, Train Accuracy: 0.5090, Val Loss: 0.9786, Val Accuracy: 0.5244\n","===== Epoch 1151/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7601. Train Loss: 0.9919, Train Accuracy: 0.5090, Val Loss: 0.9578, Val Accuracy: 0.5422\n","===== Epoch 1152/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7601. Train Loss: 0.9828, Train Accuracy: 0.5176, Val Loss: 0.9673, Val Accuracy: 0.5111\n","===== Epoch 1153/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7601. Train Loss: 0.9873, Train Accuracy: 0.5059, Val Loss: 0.9856, Val Accuracy: 0.5022\n","===== Epoch 1154/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7601. Train Loss: 0.9779, Train Accuracy: 0.5255, Val Loss: 0.9546, Val Accuracy: 0.5111\n","===== Epoch 1155/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7601. Train Loss: 0.9679, Train Accuracy: 0.5357, Val Loss: 0.9783, Val Accuracy: 0.5022\n","===== Epoch 1156/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7601. Train Loss: 0.9864, Train Accuracy: 0.5027, Val Loss: 0.9942, Val Accuracy: 0.4844\n","===== Epoch 1157/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7601. Train Loss: 0.9884, Train Accuracy: 0.5027, Val Loss: 0.9684, Val Accuracy: 0.5333\n","===== Epoch 1158/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7601. Train Loss: 0.9922, Train Accuracy: 0.5106, Val Loss: 0.9765, Val Accuracy: 0.5511\n","===== Epoch 1159/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7601. Train Loss: 0.9828, Train Accuracy: 0.5161, Val Loss: 0.9922, Val Accuracy: 0.4756\n","===== Epoch 1160/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7601. Train Loss: 0.9939, Train Accuracy: 0.4894, Val Loss: 0.9279, Val Accuracy: 0.5689\n","===== Epoch 1161/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7601. Train Loss: 0.9877, Train Accuracy: 0.4980, Val Loss: 0.9369, Val Accuracy: 0.5644\n","===== Epoch 1162/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7601. Train Loss: 0.9969, Train Accuracy: 0.4949, Val Loss: 0.9547, Val Accuracy: 0.5378\n","===== Epoch 1163/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7601. Train Loss: 0.9601, Train Accuracy: 0.5325, Val Loss: 0.9454, Val Accuracy: 0.5422\n","===== Epoch 1164/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7601. Train Loss: 0.9713, Train Accuracy: 0.5380, Val Loss: 0.9310, Val Accuracy: 0.5600\n","===== Epoch 1165/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7601. Train Loss: 0.9839, Train Accuracy: 0.5153, Val Loss: 0.9478, Val Accuracy: 0.5111\n","===== Epoch 1166/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7601. Train Loss: 0.9865, Train Accuracy: 0.5137, Val Loss: 0.9310, Val Accuracy: 0.5600\n","===== Epoch 1167/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7601. Train Loss: 0.9915, Train Accuracy: 0.5122, Val Loss: 0.9506, Val Accuracy: 0.5244\n","===== Epoch 1168/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7601. Train Loss: 0.9905, Train Accuracy: 0.5082, Val Loss: 0.9388, Val Accuracy: 0.5467\n","===== Epoch 1169/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7601. Train Loss: 0.9721, Train Accuracy: 0.5176, Val Loss: 0.9766, Val Accuracy: 0.5244\n","===== Epoch 1170/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7601. Train Loss: 0.9786, Train Accuracy: 0.5082, Val Loss: 0.9547, Val Accuracy: 0.5467\n","===== Epoch 1171/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7601. Train Loss: 0.9822, Train Accuracy: 0.5286, Val Loss: 0.9475, Val Accuracy: 0.5378\n","===== Epoch 1172/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7601. Train Loss: 0.9741, Train Accuracy: 0.5137, Val Loss: 0.9524, Val Accuracy: 0.5556\n","===== Epoch 1173/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7601. Train Loss: 0.9852, Train Accuracy: 0.4933, Val Loss: 0.9448, Val Accuracy: 0.5422\n","===== Epoch 1174/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7601. Train Loss: 0.9837, Train Accuracy: 0.5082, Val Loss: 0.9527, Val Accuracy: 0.5511\n","===== Epoch 1175/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7601. Train Loss: 0.9805, Train Accuracy: 0.5082, Val Loss: 0.9854, Val Accuracy: 0.5378\n","===== Epoch 1176/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7601. Train Loss: 0.9806, Train Accuracy: 0.5263, Val Loss: 0.9220, Val Accuracy: 0.5733\n","===== Epoch 1177/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7601. Train Loss: 0.9961, Train Accuracy: 0.4824, Val Loss: 0.9574, Val Accuracy: 0.5333\n","===== Epoch 1178/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7601. Train Loss: 0.9775, Train Accuracy: 0.5278, Val Loss: 0.9379, Val Accuracy: 0.5556\n","===== Epoch 1179/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7601. Train Loss: 0.9821, Train Accuracy: 0.5278, Val Loss: 0.9845, Val Accuracy: 0.4889\n","===== Epoch 1180/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7601. Train Loss: 0.9727, Train Accuracy: 0.5294, Val Loss: 0.9495, Val Accuracy: 0.5467\n","===== Epoch 1181/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7601. Train Loss: 1.0134, Train Accuracy: 0.4933, Val Loss: 0.9401, Val Accuracy: 0.5422\n","===== Epoch 1182/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7601. Train Loss: 0.9898, Train Accuracy: 0.5035, Val Loss: 0.9703, Val Accuracy: 0.4844\n","===== Epoch 1183/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.7601. Train Loss: 0.9848, Train Accuracy: 0.5216, Val Loss: 0.9606, Val Accuracy: 0.5467\n","===== Epoch 1184/2000 =====\n","New best model saved with Val ROC AUC: 0.7607, Train Loss: 0.9838, Train Accuracy: 0.5145, Val Loss: 0.9348, Val Accuracy: 0.5556\n","===== Epoch 1185/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7607. Train Loss: 0.9885, Train Accuracy: 0.5216, Val Loss: 0.9582, Val Accuracy: 0.5600\n","===== Epoch 1186/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7607. Train Loss: 0.9818, Train Accuracy: 0.5192, Val Loss: 0.9465, Val Accuracy: 0.5556\n","===== Epoch 1187/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7607. Train Loss: 0.9824, Train Accuracy: 0.5169, Val Loss: 0.9574, Val Accuracy: 0.5422\n","===== Epoch 1188/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7607. Train Loss: 0.9645, Train Accuracy: 0.5310, Val Loss: 0.9601, Val Accuracy: 0.5333\n","===== Epoch 1189/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7607. Train Loss: 0.9612, Train Accuracy: 0.5255, Val Loss: 0.9265, Val Accuracy: 0.5600\n","===== Epoch 1190/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7607. Train Loss: 0.9767, Train Accuracy: 0.5522, Val Loss: 0.9645, Val Accuracy: 0.5378\n","===== Epoch 1191/2000 =====\n","New best model saved with Val ROC AUC: 0.7609, Train Loss: 0.9820, Train Accuracy: 0.5302, Val Loss: 0.9222, Val Accuracy: 0.5956\n","===== Epoch 1192/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7609. Train Loss: 0.9690, Train Accuracy: 0.5286, Val Loss: 0.9323, Val Accuracy: 0.5511\n","===== Epoch 1193/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7609. Train Loss: 0.9581, Train Accuracy: 0.5373, Val Loss: 0.9350, Val Accuracy: 0.5156\n","===== Epoch 1194/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7609. Train Loss: 0.9755, Train Accuracy: 0.5231, Val Loss: 0.9578, Val Accuracy: 0.5022\n","===== Epoch 1195/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7609. Train Loss: 0.9689, Train Accuracy: 0.5325, Val Loss: 0.9269, Val Accuracy: 0.5822\n","===== Epoch 1196/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7609. Train Loss: 0.9873, Train Accuracy: 0.5106, Val Loss: 0.9144, Val Accuracy: 0.5511\n","===== Epoch 1197/2000 =====\n","New best model saved with Val ROC AUC: 0.7730, Train Loss: 0.9640, Train Accuracy: 0.5373, Val Loss: 0.9181, Val Accuracy: 0.5822\n","===== Epoch 1198/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7730. Train Loss: 0.9837, Train Accuracy: 0.5067, Val Loss: 1.0241, Val Accuracy: 0.4578\n","===== Epoch 1199/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7730. Train Loss: 0.9653, Train Accuracy: 0.5380, Val Loss: 0.9193, Val Accuracy: 0.5467\n","===== Epoch 1200/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7730. Train Loss: 0.9506, Train Accuracy: 0.5529, Val Loss: 0.9214, Val Accuracy: 0.5333\n","===== Epoch 1201/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7730. Train Loss: 0.9436, Train Accuracy: 0.5522, Val Loss: 0.9528, Val Accuracy: 0.4800\n","===== Epoch 1202/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7730. Train Loss: 0.9533, Train Accuracy: 0.5412, Val Loss: 0.9773, Val Accuracy: 0.5111\n","===== Epoch 1203/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7730. Train Loss: 0.9498, Train Accuracy: 0.5498, Val Loss: 0.8958, Val Accuracy: 0.5778\n","===== Epoch 1204/2000 =====\n","New best model saved with Val ROC AUC: 0.7792, Train Loss: 0.9502, Train Accuracy: 0.5388, Val Loss: 0.9013, Val Accuracy: 0.5733\n","===== Epoch 1205/2000 =====\n","New best model saved with Val ROC AUC: 0.7932, Train Loss: 0.9588, Train Accuracy: 0.5349, Val Loss: 0.8931, Val Accuracy: 0.5689\n","===== Epoch 1206/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7932. Train Loss: 0.9471, Train Accuracy: 0.5318, Val Loss: 0.9514, Val Accuracy: 0.5333\n","===== Epoch 1207/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7932. Train Loss: 0.9702, Train Accuracy: 0.5278, Val Loss: 0.9480, Val Accuracy: 0.5022\n","===== Epoch 1208/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7932. Train Loss: 0.9651, Train Accuracy: 0.5310, Val Loss: 0.9180, Val Accuracy: 0.5111\n","===== Epoch 1209/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7932. Train Loss: 0.9563, Train Accuracy: 0.5318, Val Loss: 0.9223, Val Accuracy: 0.5511\n","===== Epoch 1210/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7932. Train Loss: 0.9541, Train Accuracy: 0.5506, Val Loss: 0.9038, Val Accuracy: 0.5644\n","===== Epoch 1211/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7932. Train Loss: 0.9425, Train Accuracy: 0.5490, Val Loss: 0.8930, Val Accuracy: 0.6000\n","===== Epoch 1212/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7932. Train Loss: 0.9330, Train Accuracy: 0.5373, Val Loss: 0.9168, Val Accuracy: 0.5244\n","===== Epoch 1213/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7932. Train Loss: 0.9256, Train Accuracy: 0.5639, Val Loss: 0.8973, Val Accuracy: 0.5911\n","===== Epoch 1214/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7932. Train Loss: 0.9409, Train Accuracy: 0.5537, Val Loss: 0.9304, Val Accuracy: 0.5644\n","===== Epoch 1215/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7932. Train Loss: 0.9661, Train Accuracy: 0.5427, Val Loss: 0.9187, Val Accuracy: 0.5778\n","===== Epoch 1216/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7932. Train Loss: 0.9534, Train Accuracy: 0.5318, Val Loss: 0.8952, Val Accuracy: 0.6178\n","===== Epoch 1217/2000 =====\n","New best model saved with Val ROC AUC: 0.8120, Train Loss: 0.9431, Train Accuracy: 0.5357, Val Loss: 0.8625, Val Accuracy: 0.6489\n","===== Epoch 1218/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8120. Train Loss: 0.9245, Train Accuracy: 0.5616, Val Loss: 0.9087, Val Accuracy: 0.5556\n","===== Epoch 1219/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8120. Train Loss: 0.9324, Train Accuracy: 0.5561, Val Loss: 0.9006, Val Accuracy: 0.5467\n","===== Epoch 1220/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8120. Train Loss: 0.9437, Train Accuracy: 0.5341, Val Loss: 0.9200, Val Accuracy: 0.5600\n","===== Epoch 1221/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8120. Train Loss: 0.9409, Train Accuracy: 0.5694, Val Loss: 0.9206, Val Accuracy: 0.5689\n","===== Epoch 1222/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8120. Train Loss: 0.9223, Train Accuracy: 0.5631, Val Loss: 0.8664, Val Accuracy: 0.6533\n","===== Epoch 1223/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8120. Train Loss: 0.9342, Train Accuracy: 0.5553, Val Loss: 0.8965, Val Accuracy: 0.5733\n","===== Epoch 1224/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8120. Train Loss: 0.9313, Train Accuracy: 0.5647, Val Loss: 0.8980, Val Accuracy: 0.5867\n","===== Epoch 1225/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8120. Train Loss: 0.9021, Train Accuracy: 0.5976, Val Loss: 0.8880, Val Accuracy: 0.5822\n","===== Epoch 1226/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8120. Train Loss: 0.9323, Train Accuracy: 0.5467, Val Loss: 0.9079, Val Accuracy: 0.5956\n","===== Epoch 1227/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8120. Train Loss: 0.9374, Train Accuracy: 0.5475, Val Loss: 0.8903, Val Accuracy: 0.5644\n","===== Epoch 1228/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8120. Train Loss: 0.9262, Train Accuracy: 0.5733, Val Loss: 0.9092, Val Accuracy: 0.5689\n","===== Epoch 1229/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8120. Train Loss: 0.9263, Train Accuracy: 0.5796, Val Loss: 0.8687, Val Accuracy: 0.6133\n","===== Epoch 1230/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8120. Train Loss: 0.9081, Train Accuracy: 0.5843, Val Loss: 0.8819, Val Accuracy: 0.5778\n","===== Epoch 1231/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8120. Train Loss: 0.9268, Train Accuracy: 0.5710, Val Loss: 0.8778, Val Accuracy: 0.5867\n","===== Epoch 1232/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8120. Train Loss: 0.9180, Train Accuracy: 0.5655, Val Loss: 0.8938, Val Accuracy: 0.5689\n","===== Epoch 1233/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8120. Train Loss: 0.9200, Train Accuracy: 0.5600, Val Loss: 0.9057, Val Accuracy: 0.6044\n","===== Epoch 1234/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8120. Train Loss: 0.9125, Train Accuracy: 0.5820, Val Loss: 0.8817, Val Accuracy: 0.5689\n","===== Epoch 1235/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8120. Train Loss: 0.9069, Train Accuracy: 0.5686, Val Loss: 0.8547, Val Accuracy: 0.6089\n","===== Epoch 1236/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8120. Train Loss: 0.9226, Train Accuracy: 0.5631, Val Loss: 0.9226, Val Accuracy: 0.5778\n","===== Epoch 1237/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8120. Train Loss: 0.9049, Train Accuracy: 0.5875, Val Loss: 0.9010, Val Accuracy: 0.5689\n","===== Epoch 1238/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8120. Train Loss: 0.9181, Train Accuracy: 0.5647, Val Loss: 0.8777, Val Accuracy: 0.5867\n","===== Epoch 1239/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8120. Train Loss: 0.9046, Train Accuracy: 0.5788, Val Loss: 0.8587, Val Accuracy: 0.6133\n","===== Epoch 1240/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8120. Train Loss: 0.9050, Train Accuracy: 0.6008, Val Loss: 0.8748, Val Accuracy: 0.5689\n","===== Epoch 1241/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8120. Train Loss: 0.9254, Train Accuracy: 0.5482, Val Loss: 0.8742, Val Accuracy: 0.6267\n","===== Epoch 1242/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8120. Train Loss: 0.9100, Train Accuracy: 0.5757, Val Loss: 0.8572, Val Accuracy: 0.6311\n","===== Epoch 1243/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8120. Train Loss: 0.9152, Train Accuracy: 0.5678, Val Loss: 0.8696, Val Accuracy: 0.6089\n","===== Epoch 1244/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8120. Train Loss: 0.9203, Train Accuracy: 0.5616, Val Loss: 0.8558, Val Accuracy: 0.6578\n","===== Epoch 1245/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8120. Train Loss: 0.9247, Train Accuracy: 0.5624, Val Loss: 0.8793, Val Accuracy: 0.6222\n","===== Epoch 1246/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8120. Train Loss: 0.9170, Train Accuracy: 0.5686, Val Loss: 0.8542, Val Accuracy: 0.6133\n","===== Epoch 1247/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8120. Train Loss: 0.9194, Train Accuracy: 0.5765, Val Loss: 0.8945, Val Accuracy: 0.6267\n","===== Epoch 1248/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8120. Train Loss: 0.9114, Train Accuracy: 0.5765, Val Loss: 0.8632, Val Accuracy: 0.5778\n","===== Epoch 1249/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8120. Train Loss: 0.9121, Train Accuracy: 0.5914, Val Loss: 0.9160, Val Accuracy: 0.5422\n","===== Epoch 1250/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8120. Train Loss: 0.9140, Train Accuracy: 0.5725, Val Loss: 0.9142, Val Accuracy: 0.5778\n","===== Epoch 1251/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8120. Train Loss: 0.9292, Train Accuracy: 0.5388, Val Loss: 0.9089, Val Accuracy: 0.6267\n","===== Epoch 1252/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8120. Train Loss: 0.9173, Train Accuracy: 0.5671, Val Loss: 0.8695, Val Accuracy: 0.6000\n","===== Epoch 1253/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8120. Train Loss: 0.9110, Train Accuracy: 0.5678, Val Loss: 0.8590, Val Accuracy: 0.5911\n","===== Epoch 1254/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8120. Train Loss: 0.9295, Train Accuracy: 0.5592, Val Loss: 0.8747, Val Accuracy: 0.5867\n","===== Epoch 1255/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8120. Train Loss: 0.9245, Train Accuracy: 0.5608, Val Loss: 0.8556, Val Accuracy: 0.6311\n","===== Epoch 1256/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8120. Train Loss: 0.8961, Train Accuracy: 0.5812, Val Loss: 0.8841, Val Accuracy: 0.6044\n","===== Epoch 1257/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8120. Train Loss: 0.9117, Train Accuracy: 0.5882, Val Loss: 0.8634, Val Accuracy: 0.6178\n","===== Epoch 1258/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8120. Train Loss: 0.9158, Train Accuracy: 0.5576, Val Loss: 0.8816, Val Accuracy: 0.5911\n","===== Epoch 1259/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8120. Train Loss: 0.9090, Train Accuracy: 0.5765, Val Loss: 0.8579, Val Accuracy: 0.6000\n","===== Epoch 1260/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8120. Train Loss: 0.9151, Train Accuracy: 0.5788, Val Loss: 0.8745, Val Accuracy: 0.5911\n","===== Epoch 1261/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8120. Train Loss: 0.9127, Train Accuracy: 0.5780, Val Loss: 0.8718, Val Accuracy: 0.6267\n","===== Epoch 1262/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8120. Train Loss: 0.9213, Train Accuracy: 0.5584, Val Loss: 0.8855, Val Accuracy: 0.5733\n","===== Epoch 1263/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8120. Train Loss: 0.9128, Train Accuracy: 0.5812, Val Loss: 0.8519, Val Accuracy: 0.6044\n","===== Epoch 1264/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8120. Train Loss: 0.9225, Train Accuracy: 0.5545, Val Loss: 0.8675, Val Accuracy: 0.6044\n","===== Epoch 1265/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8120. Train Loss: 0.9071, Train Accuracy: 0.5827, Val Loss: 0.8667, Val Accuracy: 0.5867\n","===== Epoch 1266/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8120. Train Loss: 0.9140, Train Accuracy: 0.5835, Val Loss: 0.8686, Val Accuracy: 0.6044\n","===== Epoch 1267/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8120. Train Loss: 0.9179, Train Accuracy: 0.5671, Val Loss: 0.8980, Val Accuracy: 0.5333\n","===== Epoch 1268/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8120. Train Loss: 0.9054, Train Accuracy: 0.5686, Val Loss: 0.8684, Val Accuracy: 0.6089\n","===== Epoch 1269/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8120. Train Loss: 0.9251, Train Accuracy: 0.5631, Val Loss: 0.8898, Val Accuracy: 0.5689\n","===== Epoch 1270/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8120. Train Loss: 0.9267, Train Accuracy: 0.5624, Val Loss: 0.9012, Val Accuracy: 0.5644\n","===== Epoch 1271/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8120. Train Loss: 0.9214, Train Accuracy: 0.5514, Val Loss: 0.8655, Val Accuracy: 0.6133\n","===== Epoch 1272/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8120. Train Loss: 0.9096, Train Accuracy: 0.5867, Val Loss: 0.9032, Val Accuracy: 0.5644\n","===== Epoch 1273/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8120. Train Loss: 0.9258, Train Accuracy: 0.5490, Val Loss: 0.8713, Val Accuracy: 0.6222\n","===== Epoch 1274/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8120. Train Loss: 0.9280, Train Accuracy: 0.5702, Val Loss: 0.9945, Val Accuracy: 0.5333\n","===== Epoch 1275/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8120. Train Loss: 0.9132, Train Accuracy: 0.5686, Val Loss: 0.9273, Val Accuracy: 0.5378\n","===== Epoch 1276/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8120. Train Loss: 0.9244, Train Accuracy: 0.5631, Val Loss: 0.8616, Val Accuracy: 0.6400\n","===== Epoch 1277/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8120. Train Loss: 0.9251, Train Accuracy: 0.5663, Val Loss: 0.9335, Val Accuracy: 0.5378\n","===== Epoch 1278/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8120. Train Loss: 0.9191, Train Accuracy: 0.5624, Val Loss: 0.8614, Val Accuracy: 0.5556\n","===== Epoch 1279/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8120. Train Loss: 0.9200, Train Accuracy: 0.5569, Val Loss: 0.8727, Val Accuracy: 0.5644\n","===== Epoch 1280/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8120. Train Loss: 0.9206, Train Accuracy: 0.5906, Val Loss: 0.8918, Val Accuracy: 0.5956\n","===== Epoch 1281/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8120. Train Loss: 0.9010, Train Accuracy: 0.5859, Val Loss: 0.8571, Val Accuracy: 0.6044\n","===== Epoch 1282/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8120. Train Loss: 0.9294, Train Accuracy: 0.5647, Val Loss: 0.8744, Val Accuracy: 0.6222\n","===== Epoch 1283/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8120. Train Loss: 0.9147, Train Accuracy: 0.5694, Val Loss: 0.8979, Val Accuracy: 0.5600\n","===== Epoch 1284/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8120. Train Loss: 0.8971, Train Accuracy: 0.5859, Val Loss: 0.9151, Val Accuracy: 0.6044\n","===== Epoch 1285/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8120. Train Loss: 0.9370, Train Accuracy: 0.5380, Val Loss: 0.8778, Val Accuracy: 0.5778\n","===== Epoch 1286/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8120. Train Loss: 0.9068, Train Accuracy: 0.5788, Val Loss: 0.8969, Val Accuracy: 0.5200\n","===== Epoch 1287/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8120. Train Loss: 0.9222, Train Accuracy: 0.5725, Val Loss: 0.8739, Val Accuracy: 0.5822\n","===== Epoch 1288/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8120. Train Loss: 0.9203, Train Accuracy: 0.5749, Val Loss: 0.8704, Val Accuracy: 0.5556\n","===== Epoch 1289/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8120. Train Loss: 0.9281, Train Accuracy: 0.5490, Val Loss: 0.8747, Val Accuracy: 0.5911\n","===== Epoch 1290/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8120. Train Loss: 0.9065, Train Accuracy: 0.5882, Val Loss: 0.9035, Val Accuracy: 0.5867\n","===== Epoch 1291/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8120. Train Loss: 0.9149, Train Accuracy: 0.5686, Val Loss: 0.8714, Val Accuracy: 0.6444\n","===== Epoch 1292/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8120. Train Loss: 0.9253, Train Accuracy: 0.5576, Val Loss: 0.8821, Val Accuracy: 0.5911\n","===== Epoch 1293/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8120. Train Loss: 0.9187, Train Accuracy: 0.5647, Val Loss: 0.8686, Val Accuracy: 0.6489\n","===== Epoch 1294/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8120. Train Loss: 0.9149, Train Accuracy: 0.5671, Val Loss: 0.8500, Val Accuracy: 0.6178\n","===== Epoch 1295/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8120. Train Loss: 0.9326, Train Accuracy: 0.5529, Val Loss: 0.9200, Val Accuracy: 0.5467\n","===== Epoch 1296/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8120. Train Loss: 0.9097, Train Accuracy: 0.5788, Val Loss: 0.8865, Val Accuracy: 0.5289\n","===== Epoch 1297/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8120. Train Loss: 0.9092, Train Accuracy: 0.5678, Val Loss: 0.9222, Val Accuracy: 0.5422\n","===== Epoch 1298/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8120. Train Loss: 0.9511, Train Accuracy: 0.5396, Val Loss: 0.8725, Val Accuracy: 0.6133\n","===== Epoch 1299/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8120. Train Loss: 0.9000, Train Accuracy: 0.5678, Val Loss: 0.8755, Val Accuracy: 0.5644\n","===== Epoch 1300/2000 =====\n","New best model saved with Val ROC AUC: 0.8178, Train Loss: 0.9247, Train Accuracy: 0.5608, Val Loss: 0.8335, Val Accuracy: 0.6533\n","===== Epoch 1301/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8178. Train Loss: 0.9149, Train Accuracy: 0.5773, Val Loss: 0.8861, Val Accuracy: 0.5644\n","===== Epoch 1302/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8178. Train Loss: 0.9212, Train Accuracy: 0.5710, Val Loss: 0.8855, Val Accuracy: 0.6044\n","===== Epoch 1303/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8178. Train Loss: 0.9085, Train Accuracy: 0.5827, Val Loss: 0.8520, Val Accuracy: 0.6178\n","===== Epoch 1304/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8178. Train Loss: 0.9114, Train Accuracy: 0.5733, Val Loss: 0.8757, Val Accuracy: 0.6489\n","===== Epoch 1305/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8178. Train Loss: 0.9083, Train Accuracy: 0.5733, Val Loss: 0.8750, Val Accuracy: 0.6178\n","===== Epoch 1306/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8178. Train Loss: 0.9270, Train Accuracy: 0.5576, Val Loss: 0.8729, Val Accuracy: 0.5911\n","===== Epoch 1307/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8178. Train Loss: 0.8796, Train Accuracy: 0.6157, Val Loss: 0.8720, Val Accuracy: 0.6000\n","===== Epoch 1308/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8178. Train Loss: 0.8808, Train Accuracy: 0.6008, Val Loss: 0.8573, Val Accuracy: 0.6044\n","===== Epoch 1309/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8178. Train Loss: 0.8958, Train Accuracy: 0.6000, Val Loss: 0.8561, Val Accuracy: 0.6089\n","===== Epoch 1310/2000 =====\n","New best model saved with Val ROC AUC: 0.8344, Train Loss: 0.9059, Train Accuracy: 0.5773, Val Loss: 0.8042, Val Accuracy: 0.6756\n","===== Epoch 1311/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8344. Train Loss: 0.8996, Train Accuracy: 0.5875, Val Loss: 0.8822, Val Accuracy: 0.6089\n","===== Epoch 1312/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8344. Train Loss: 0.8879, Train Accuracy: 0.6000, Val Loss: 0.8376, Val Accuracy: 0.6533\n","===== Epoch 1313/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8344. Train Loss: 0.8957, Train Accuracy: 0.6024, Val Loss: 0.8401, Val Accuracy: 0.6222\n","===== Epoch 1314/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8344. Train Loss: 0.8718, Train Accuracy: 0.6000, Val Loss: 0.8737, Val Accuracy: 0.6089\n","===== Epoch 1315/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8344. Train Loss: 0.9011, Train Accuracy: 0.5757, Val Loss: 0.8337, Val Accuracy: 0.6356\n","===== Epoch 1316/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8344. Train Loss: 0.8997, Train Accuracy: 0.5992, Val Loss: 0.8803, Val Accuracy: 0.5733\n","===== Epoch 1317/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8344. Train Loss: 0.9017, Train Accuracy: 0.5741, Val Loss: 0.8963, Val Accuracy: 0.5733\n","===== Epoch 1318/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8344. Train Loss: 0.8804, Train Accuracy: 0.6149, Val Loss: 0.8479, Val Accuracy: 0.6089\n","===== Epoch 1319/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8344. Train Loss: 0.8802, Train Accuracy: 0.5992, Val Loss: 0.8381, Val Accuracy: 0.5867\n","===== Epoch 1320/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8344. Train Loss: 0.8876, Train Accuracy: 0.6047, Val Loss: 0.8439, Val Accuracy: 0.6044\n","===== Epoch 1321/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8344. Train Loss: 0.8764, Train Accuracy: 0.5937, Val Loss: 0.8243, Val Accuracy: 0.6356\n","===== Epoch 1322/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8344. Train Loss: 0.8896, Train Accuracy: 0.5898, Val Loss: 0.8023, Val Accuracy: 0.6756\n","===== Epoch 1323/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8344. Train Loss: 0.8932, Train Accuracy: 0.5914, Val Loss: 0.8637, Val Accuracy: 0.6311\n","===== Epoch 1324/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8344. Train Loss: 0.8841, Train Accuracy: 0.6031, Val Loss: 0.8559, Val Accuracy: 0.6133\n","===== Epoch 1325/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8344. Train Loss: 0.9060, Train Accuracy: 0.5937, Val Loss: 0.8327, Val Accuracy: 0.6444\n","===== Epoch 1326/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8344. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8413, Val Accuracy: 0.6489\n","===== Epoch 1327/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8344. Train Loss: 0.8698, Train Accuracy: 0.6094, Val Loss: 0.8343, Val Accuracy: 0.6533\n","===== Epoch 1328/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8344. Train Loss: 0.8815, Train Accuracy: 0.5969, Val Loss: 0.8661, Val Accuracy: 0.6311\n","===== Epoch 1329/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8344. Train Loss: 0.8785, Train Accuracy: 0.5906, Val Loss: 0.8425, Val Accuracy: 0.6089\n","===== Epoch 1330/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8344. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8435, Val Accuracy: 0.6000\n","===== Epoch 1331/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8344. Train Loss: 0.8895, Train Accuracy: 0.6000, Val Loss: 0.8214, Val Accuracy: 0.6356\n","===== Epoch 1332/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8344. Train Loss: 0.8634, Train Accuracy: 0.6039, Val Loss: 0.8447, Val Accuracy: 0.6133\n","===== Epoch 1333/2000 =====\n","New best model saved with Val ROC AUC: 0.8352, Train Loss: 0.8801, Train Accuracy: 0.5859, Val Loss: 0.7928, Val Accuracy: 0.6756\n","===== Epoch 1334/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8352. Train Loss: 0.8863, Train Accuracy: 0.6031, Val Loss: 0.8200, Val Accuracy: 0.6622\n","===== Epoch 1335/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8352. Train Loss: 0.8763, Train Accuracy: 0.6063, Val Loss: 0.8043, Val Accuracy: 0.6444\n","===== Epoch 1336/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8352. Train Loss: 0.8851, Train Accuracy: 0.6071, Val Loss: 0.8198, Val Accuracy: 0.6222\n","===== Epoch 1337/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8352. Train Loss: 0.8713, Train Accuracy: 0.6157, Val Loss: 0.8238, Val Accuracy: 0.6178\n","===== Epoch 1338/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8352. Train Loss: 0.8726, Train Accuracy: 0.6196, Val Loss: 0.8437, Val Accuracy: 0.5822\n","===== Epoch 1339/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8352. Train Loss: 0.8648, Train Accuracy: 0.6094, Val Loss: 0.8031, Val Accuracy: 0.6267\n","===== Epoch 1340/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8352. Train Loss: 0.8655, Train Accuracy: 0.6180, Val Loss: 0.8438, Val Accuracy: 0.6044\n","===== Epoch 1341/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8352. Train Loss: 0.8613, Train Accuracy: 0.6227, Val Loss: 0.8105, Val Accuracy: 0.6400\n","===== Epoch 1342/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8352. Train Loss: 0.8868, Train Accuracy: 0.5929, Val Loss: 0.8490, Val Accuracy: 0.6356\n","===== Epoch 1343/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8352. Train Loss: 0.8657, Train Accuracy: 0.6118, Val Loss: 0.8164, Val Accuracy: 0.6444\n","===== Epoch 1344/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8352. Train Loss: 0.8806, Train Accuracy: 0.5976, Val Loss: 0.8568, Val Accuracy: 0.6356\n","===== Epoch 1345/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8352. Train Loss: 0.8694, Train Accuracy: 0.6063, Val Loss: 0.8350, Val Accuracy: 0.6178\n","===== Epoch 1346/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8352. Train Loss: 0.8750, Train Accuracy: 0.5992, Val Loss: 0.8263, Val Accuracy: 0.6356\n","===== Epoch 1347/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8352. Train Loss: 0.8776, Train Accuracy: 0.6047, Val Loss: 0.8206, Val Accuracy: 0.6356\n","===== Epoch 1348/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8352. Train Loss: 0.8719, Train Accuracy: 0.5976, Val Loss: 0.8255, Val Accuracy: 0.6444\n","===== Epoch 1349/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8352. Train Loss: 0.8644, Train Accuracy: 0.6141, Val Loss: 0.8189, Val Accuracy: 0.6356\n","===== Epoch 1350/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8352. Train Loss: 0.8779, Train Accuracy: 0.5976, Val Loss: 0.8513, Val Accuracy: 0.6044\n","===== Epoch 1351/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8352. Train Loss: 0.8636, Train Accuracy: 0.6306, Val Loss: 0.8218, Val Accuracy: 0.6533\n","===== Epoch 1352/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8352. Train Loss: 0.8697, Train Accuracy: 0.6039, Val Loss: 0.8387, Val Accuracy: 0.6578\n","===== Epoch 1353/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8352. Train Loss: 0.8880, Train Accuracy: 0.6008, Val Loss: 0.8434, Val Accuracy: 0.6222\n","===== Epoch 1354/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8352. Train Loss: 0.8587, Train Accuracy: 0.6110, Val Loss: 0.8282, Val Accuracy: 0.6400\n","===== Epoch 1355/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8352. Train Loss: 0.8704, Train Accuracy: 0.6118, Val Loss: 0.8297, Val Accuracy: 0.6356\n","===== Epoch 1356/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8352. Train Loss: 0.8709, Train Accuracy: 0.6141, Val Loss: 0.8308, Val Accuracy: 0.6444\n","===== Epoch 1357/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8352. Train Loss: 0.8674, Train Accuracy: 0.6118, Val Loss: 0.8331, Val Accuracy: 0.6578\n","===== Epoch 1358/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8352. Train Loss: 0.8808, Train Accuracy: 0.6086, Val Loss: 0.8365, Val Accuracy: 0.6311\n","===== Epoch 1359/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8352. Train Loss: 0.8789, Train Accuracy: 0.6078, Val Loss: 0.8375, Val Accuracy: 0.6622\n","===== Epoch 1360/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8352. Train Loss: 0.8788, Train Accuracy: 0.6102, Val Loss: 0.7996, Val Accuracy: 0.6400\n","===== Epoch 1361/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8352. Train Loss: 0.8685, Train Accuracy: 0.6031, Val Loss: 0.8082, Val Accuracy: 0.6578\n","===== Epoch 1362/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8352. Train Loss: 0.8734, Train Accuracy: 0.5969, Val Loss: 0.8221, Val Accuracy: 0.6311\n","===== Epoch 1363/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8352. Train Loss: 0.8676, Train Accuracy: 0.6118, Val Loss: 0.8325, Val Accuracy: 0.6489\n","===== Epoch 1364/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8352. Train Loss: 0.8905, Train Accuracy: 0.6024, Val Loss: 0.8479, Val Accuracy: 0.6400\n","===== Epoch 1365/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8352. Train Loss: 0.8862, Train Accuracy: 0.5969, Val Loss: 0.8195, Val Accuracy: 0.6267\n","===== Epoch 1366/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8352. Train Loss: 0.8784, Train Accuracy: 0.5953, Val Loss: 0.8246, Val Accuracy: 0.6667\n","===== Epoch 1367/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8352. Train Loss: 0.8757, Train Accuracy: 0.5976, Val Loss: 0.8552, Val Accuracy: 0.5644\n","===== Epoch 1368/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8352. Train Loss: 0.8816, Train Accuracy: 0.5804, Val Loss: 0.8295, Val Accuracy: 0.6044\n","===== Epoch 1369/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8352. Train Loss: 0.8843, Train Accuracy: 0.5969, Val Loss: 0.8320, Val Accuracy: 0.6311\n","===== Epoch 1370/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8352. Train Loss: 0.8901, Train Accuracy: 0.5961, Val Loss: 0.8409, Val Accuracy: 0.6000\n","===== Epoch 1371/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8352. Train Loss: 0.8720, Train Accuracy: 0.5976, Val Loss: 0.7886, Val Accuracy: 0.6711\n","===== Epoch 1372/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8352. Train Loss: 0.8566, Train Accuracy: 0.6110, Val Loss: 0.8761, Val Accuracy: 0.5778\n","===== Epoch 1373/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8352. Train Loss: 0.8879, Train Accuracy: 0.6063, Val Loss: 0.8152, Val Accuracy: 0.6444\n","===== Epoch 1374/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8352. Train Loss: 0.8714, Train Accuracy: 0.6094, Val Loss: 0.8604, Val Accuracy: 0.6000\n","===== Epoch 1375/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8352. Train Loss: 0.8871, Train Accuracy: 0.5867, Val Loss: 0.8101, Val Accuracy: 0.6756\n","===== Epoch 1376/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8352. Train Loss: 0.8748, Train Accuracy: 0.5992, Val Loss: 0.8250, Val Accuracy: 0.6889\n","===== Epoch 1377/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8352. Train Loss: 0.8792, Train Accuracy: 0.5961, Val Loss: 0.8294, Val Accuracy: 0.6444\n","===== Epoch 1378/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8352. Train Loss: 0.8830, Train Accuracy: 0.5969, Val Loss: 0.8164, Val Accuracy: 0.6578\n","===== Epoch 1379/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8352. Train Loss: 0.8833, Train Accuracy: 0.5827, Val Loss: 0.8109, Val Accuracy: 0.6533\n","===== Epoch 1380/2000 =====\n","New best model saved with Val ROC AUC: 0.8364, Train Loss: 0.8997, Train Accuracy: 0.5914, Val Loss: 0.8140, Val Accuracy: 0.6533\n","===== Epoch 1381/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8364. Train Loss: 0.8828, Train Accuracy: 0.5922, Val Loss: 0.8745, Val Accuracy: 0.5956\n","===== Epoch 1382/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8364. Train Loss: 0.8877, Train Accuracy: 0.6016, Val Loss: 0.8385, Val Accuracy: 0.6533\n","===== Epoch 1383/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8364. Train Loss: 0.8899, Train Accuracy: 0.5914, Val Loss: 0.8289, Val Accuracy: 0.6533\n","===== Epoch 1384/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8364. Train Loss: 0.8972, Train Accuracy: 0.5890, Val Loss: 0.8515, Val Accuracy: 0.6222\n","===== Epoch 1385/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8364. Train Loss: 0.8715, Train Accuracy: 0.5961, Val Loss: 0.8342, Val Accuracy: 0.6444\n","===== Epoch 1386/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8364. Train Loss: 0.8786, Train Accuracy: 0.6031, Val Loss: 0.8071, Val Accuracy: 0.6711\n","===== Epoch 1387/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8364. Train Loss: 0.8915, Train Accuracy: 0.5976, Val Loss: 0.8941, Val Accuracy: 0.5556\n","===== Epoch 1388/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8364. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8151, Val Accuracy: 0.6444\n","===== Epoch 1389/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8364. Train Loss: 0.8753, Train Accuracy: 0.5976, Val Loss: 0.9151, Val Accuracy: 0.5511\n","===== Epoch 1390/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8364. Train Loss: 0.9144, Train Accuracy: 0.5733, Val Loss: 0.8469, Val Accuracy: 0.6400\n","===== Epoch 1391/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8364. Train Loss: 0.8753, Train Accuracy: 0.5875, Val Loss: 0.8138, Val Accuracy: 0.6800\n","===== Epoch 1392/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8364. Train Loss: 0.8779, Train Accuracy: 0.6008, Val Loss: 0.8090, Val Accuracy: 0.6533\n","===== Epoch 1393/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8364. Train Loss: 0.8861, Train Accuracy: 0.5984, Val Loss: 0.8405, Val Accuracy: 0.6667\n","===== Epoch 1394/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8364. Train Loss: 0.8699, Train Accuracy: 0.6149, Val Loss: 0.8132, Val Accuracy: 0.6444\n","===== Epoch 1395/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8364. Train Loss: 0.8635, Train Accuracy: 0.6157, Val Loss: 0.8976, Val Accuracy: 0.5289\n","===== Epoch 1396/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8364. Train Loss: 0.8816, Train Accuracy: 0.6016, Val Loss: 0.8123, Val Accuracy: 0.6667\n","===== Epoch 1397/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8364. Train Loss: 0.9133, Train Accuracy: 0.5796, Val Loss: 0.8257, Val Accuracy: 0.6356\n","===== Epoch 1398/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8364. Train Loss: 0.8910, Train Accuracy: 0.5929, Val Loss: 0.8595, Val Accuracy: 0.6133\n","===== Epoch 1399/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8364. Train Loss: 0.8861, Train Accuracy: 0.5843, Val Loss: 0.8804, Val Accuracy: 0.5422\n","===== Epoch 1400/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8364. Train Loss: 0.8955, Train Accuracy: 0.5953, Val Loss: 0.8482, Val Accuracy: 0.5867\n","===== Epoch 1401/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8364. Train Loss: 0.8694, Train Accuracy: 0.6110, Val Loss: 0.8273, Val Accuracy: 0.6711\n","===== Epoch 1402/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8364. Train Loss: 0.8705, Train Accuracy: 0.6039, Val Loss: 0.8056, Val Accuracy: 0.6800\n","===== Epoch 1403/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8364. Train Loss: 0.8632, Train Accuracy: 0.6149, Val Loss: 0.8364, Val Accuracy: 0.6400\n","===== Epoch 1404/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8364. Train Loss: 0.8779, Train Accuracy: 0.5992, Val Loss: 0.8569, Val Accuracy: 0.5733\n","===== Epoch 1405/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8364. Train Loss: 0.8867, Train Accuracy: 0.6031, Val Loss: 0.8398, Val Accuracy: 0.6133\n","===== Epoch 1406/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8364. Train Loss: 0.8815, Train Accuracy: 0.6016, Val Loss: 0.8186, Val Accuracy: 0.6533\n","===== Epoch 1407/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8364. Train Loss: 0.8545, Train Accuracy: 0.6298, Val Loss: 0.8087, Val Accuracy: 0.7022\n","===== Epoch 1408/2000 =====\n","New best model saved with Val ROC AUC: 0.8400, Train Loss: 0.8570, Train Accuracy: 0.6118, Val Loss: 0.7925, Val Accuracy: 0.6889\n","===== Epoch 1409/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8400. Train Loss: 0.8687, Train Accuracy: 0.6298, Val Loss: 0.8350, Val Accuracy: 0.6000\n","===== Epoch 1410/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8400. Train Loss: 0.8623, Train Accuracy: 0.6188, Val Loss: 0.8265, Val Accuracy: 0.6089\n","===== Epoch 1411/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8400. Train Loss: 0.8584, Train Accuracy: 0.6141, Val Loss: 0.8146, Val Accuracy: 0.6711\n","===== Epoch 1412/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8400. Train Loss: 0.8617, Train Accuracy: 0.6204, Val Loss: 0.8240, Val Accuracy: 0.6178\n","===== Epoch 1413/2000 =====\n","New best model saved with Val ROC AUC: 0.8603, Train Loss: 0.8704, Train Accuracy: 0.6204, Val Loss: 0.7658, Val Accuracy: 0.7111\n","===== Epoch 1414/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8603. Train Loss: 0.8686, Train Accuracy: 0.6024, Val Loss: 0.8100, Val Accuracy: 0.6533\n","===== Epoch 1415/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8603. Train Loss: 0.8645, Train Accuracy: 0.6141, Val Loss: 0.8210, Val Accuracy: 0.6667\n","===== Epoch 1416/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8603. Train Loss: 0.8542, Train Accuracy: 0.6204, Val Loss: 0.8300, Val Accuracy: 0.6533\n","===== Epoch 1417/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8603. Train Loss: 0.8442, Train Accuracy: 0.6353, Val Loss: 0.8292, Val Accuracy: 0.6089\n","===== Epoch 1418/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8603. Train Loss: 0.8432, Train Accuracy: 0.6259, Val Loss: 0.8098, Val Accuracy: 0.6400\n","===== Epoch 1419/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8603. Train Loss: 0.8754, Train Accuracy: 0.6188, Val Loss: 0.8402, Val Accuracy: 0.6533\n","===== Epoch 1420/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8603. Train Loss: 0.8391, Train Accuracy: 0.6408, Val Loss: 0.7986, Val Accuracy: 0.6267\n","===== Epoch 1421/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8603. Train Loss: 0.8550, Train Accuracy: 0.6290, Val Loss: 0.7926, Val Accuracy: 0.6800\n","===== Epoch 1422/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8603. Train Loss: 0.8470, Train Accuracy: 0.6243, Val Loss: 0.8000, Val Accuracy: 0.6844\n","===== Epoch 1423/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8603. Train Loss: 0.8481, Train Accuracy: 0.6149, Val Loss: 0.8311, Val Accuracy: 0.6311\n","===== Epoch 1424/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8603. Train Loss: 0.8508, Train Accuracy: 0.6235, Val Loss: 0.8650, Val Accuracy: 0.6444\n","===== Epoch 1425/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8603. Train Loss: 0.8551, Train Accuracy: 0.6353, Val Loss: 0.8034, Val Accuracy: 0.6711\n","===== Epoch 1426/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8603. Train Loss: 0.8410, Train Accuracy: 0.6416, Val Loss: 0.7870, Val Accuracy: 0.6667\n","===== Epoch 1427/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8603. Train Loss: 0.8521, Train Accuracy: 0.6086, Val Loss: 0.8272, Val Accuracy: 0.6444\n","===== Epoch 1428/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8603. Train Loss: 0.8439, Train Accuracy: 0.6125, Val Loss: 0.8289, Val Accuracy: 0.6089\n","===== Epoch 1429/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8603. Train Loss: 0.8601, Train Accuracy: 0.6086, Val Loss: 0.8050, Val Accuracy: 0.6311\n","===== Epoch 1430/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8603. Train Loss: 0.8283, Train Accuracy: 0.6392, Val Loss: 0.8000, Val Accuracy: 0.6667\n","===== Epoch 1431/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8603. Train Loss: 0.8478, Train Accuracy: 0.6290, Val Loss: 0.8072, Val Accuracy: 0.6756\n","===== Epoch 1432/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8603. Train Loss: 0.8602, Train Accuracy: 0.6118, Val Loss: 0.8429, Val Accuracy: 0.6444\n","===== Epoch 1433/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8603. Train Loss: 0.8550, Train Accuracy: 0.6188, Val Loss: 0.8232, Val Accuracy: 0.6311\n","===== Epoch 1434/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8603. Train Loss: 0.8374, Train Accuracy: 0.6447, Val Loss: 0.7877, Val Accuracy: 0.6711\n","===== Epoch 1435/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8603. Train Loss: 0.8328, Train Accuracy: 0.6322, Val Loss: 0.8026, Val Accuracy: 0.6400\n","===== Epoch 1436/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8603. Train Loss: 0.8440, Train Accuracy: 0.6173, Val Loss: 0.8023, Val Accuracy: 0.7067\n","===== Epoch 1437/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8603. Train Loss: 0.8335, Train Accuracy: 0.6337, Val Loss: 0.8189, Val Accuracy: 0.6356\n","===== Epoch 1438/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8603. Train Loss: 0.8314, Train Accuracy: 0.6212, Val Loss: 0.7936, Val Accuracy: 0.6978\n","===== Epoch 1439/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8603. Train Loss: 0.8368, Train Accuracy: 0.6376, Val Loss: 0.7944, Val Accuracy: 0.6578\n","===== Epoch 1440/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8603. Train Loss: 0.8252, Train Accuracy: 0.6376, Val Loss: 0.8189, Val Accuracy: 0.6533\n","===== Epoch 1441/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8603. Train Loss: 0.8492, Train Accuracy: 0.6267, Val Loss: 0.8103, Val Accuracy: 0.6667\n","===== Epoch 1442/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8603. Train Loss: 0.8320, Train Accuracy: 0.6376, Val Loss: 0.8183, Val Accuracy: 0.6489\n","===== Epoch 1443/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8603. Train Loss: 0.8335, Train Accuracy: 0.6243, Val Loss: 0.7993, Val Accuracy: 0.6578\n","===== Epoch 1444/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8603. Train Loss: 0.8276, Train Accuracy: 0.6486, Val Loss: 0.7921, Val Accuracy: 0.7022\n","===== Epoch 1445/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8603. Train Loss: 0.8509, Train Accuracy: 0.6204, Val Loss: 0.7904, Val Accuracy: 0.6844\n","===== Epoch 1446/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8603. Train Loss: 0.8382, Train Accuracy: 0.6180, Val Loss: 0.7863, Val Accuracy: 0.7067\n","===== Epoch 1447/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8603. Train Loss: 0.8264, Train Accuracy: 0.6314, Val Loss: 0.7949, Val Accuracy: 0.6667\n","===== Epoch 1448/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8603. Train Loss: 0.8293, Train Accuracy: 0.6235, Val Loss: 0.8125, Val Accuracy: 0.6489\n","===== Epoch 1449/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8603. Train Loss: 0.8463, Train Accuracy: 0.6204, Val Loss: 0.7817, Val Accuracy: 0.6933\n","===== Epoch 1450/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8603. Train Loss: 0.8338, Train Accuracy: 0.6392, Val Loss: 0.7815, Val Accuracy: 0.7022\n","===== Epoch 1451/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8603. Train Loss: 0.8491, Train Accuracy: 0.6290, Val Loss: 0.7890, Val Accuracy: 0.6356\n","===== Epoch 1452/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8603. Train Loss: 0.8424, Train Accuracy: 0.6337, Val Loss: 0.7977, Val Accuracy: 0.6400\n","===== Epoch 1453/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8603. Train Loss: 0.8348, Train Accuracy: 0.6322, Val Loss: 0.8116, Val Accuracy: 0.6756\n","===== Epoch 1454/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8603. Train Loss: 0.8309, Train Accuracy: 0.6314, Val Loss: 0.7897, Val Accuracy: 0.6578\n","===== Epoch 1455/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8603. Train Loss: 0.8467, Train Accuracy: 0.6220, Val Loss: 0.8327, Val Accuracy: 0.6622\n","===== Epoch 1456/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8603. Train Loss: 0.8424, Train Accuracy: 0.6369, Val Loss: 0.7881, Val Accuracy: 0.6489\n","===== Epoch 1457/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8603. Train Loss: 0.8336, Train Accuracy: 0.6345, Val Loss: 0.7739, Val Accuracy: 0.6978\n","===== Epoch 1458/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8603. Train Loss: 0.8333, Train Accuracy: 0.6510, Val Loss: 0.8254, Val Accuracy: 0.6667\n","===== Epoch 1459/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8603. Train Loss: 0.8501, Train Accuracy: 0.6141, Val Loss: 0.8271, Val Accuracy: 0.6533\n","===== Epoch 1460/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8603. Train Loss: 0.8455, Train Accuracy: 0.6314, Val Loss: 0.7928, Val Accuracy: 0.6800\n","===== Epoch 1461/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8603. Train Loss: 0.8290, Train Accuracy: 0.6510, Val Loss: 0.7535, Val Accuracy: 0.6844\n","===== Epoch 1462/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8603. Train Loss: 0.8543, Train Accuracy: 0.6125, Val Loss: 0.7917, Val Accuracy: 0.6756\n","===== Epoch 1463/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8603. Train Loss: 0.8398, Train Accuracy: 0.6541, Val Loss: 0.8121, Val Accuracy: 0.6622\n","===== Epoch 1464/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8603. Train Loss: 0.8599, Train Accuracy: 0.6322, Val Loss: 0.7970, Val Accuracy: 0.6267\n","===== Epoch 1465/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8603. Train Loss: 0.8358, Train Accuracy: 0.6361, Val Loss: 0.8072, Val Accuracy: 0.7067\n","===== Epoch 1466/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8603. Train Loss: 0.8422, Train Accuracy: 0.6157, Val Loss: 0.8003, Val Accuracy: 0.6400\n","===== Epoch 1467/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8603. Train Loss: 0.8474, Train Accuracy: 0.6204, Val Loss: 0.8199, Val Accuracy: 0.6311\n","===== Epoch 1468/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8603. Train Loss: 0.8312, Train Accuracy: 0.6369, Val Loss: 0.8420, Val Accuracy: 0.6044\n","===== Epoch 1469/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8603. Train Loss: 0.8527, Train Accuracy: 0.6157, Val Loss: 0.8082, Val Accuracy: 0.6444\n","===== Epoch 1470/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8603. Train Loss: 0.8500, Train Accuracy: 0.6314, Val Loss: 0.8156, Val Accuracy: 0.6444\n","===== Epoch 1471/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8603. Train Loss: 0.8580, Train Accuracy: 0.6055, Val Loss: 0.8081, Val Accuracy: 0.6844\n","===== Epoch 1472/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8603. Train Loss: 0.8689, Train Accuracy: 0.6078, Val Loss: 0.8109, Val Accuracy: 0.6400\n","===== Epoch 1473/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8603. Train Loss: 0.8409, Train Accuracy: 0.6275, Val Loss: 0.7937, Val Accuracy: 0.6889\n","===== Epoch 1474/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8603. Train Loss: 0.8507, Train Accuracy: 0.6227, Val Loss: 0.8086, Val Accuracy: 0.6533\n","===== Epoch 1475/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8603. Train Loss: 0.8440, Train Accuracy: 0.6275, Val Loss: 0.7740, Val Accuracy: 0.7111\n","===== Epoch 1476/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8603. Train Loss: 0.8393, Train Accuracy: 0.6149, Val Loss: 0.7976, Val Accuracy: 0.6489\n","===== Epoch 1477/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8603. Train Loss: 0.8606, Train Accuracy: 0.6094, Val Loss: 0.7912, Val Accuracy: 0.6889\n","===== Epoch 1478/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8603. Train Loss: 0.8460, Train Accuracy: 0.6094, Val Loss: 0.8608, Val Accuracy: 0.5733\n","===== Epoch 1479/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8603. Train Loss: 0.8487, Train Accuracy: 0.6165, Val Loss: 0.8078, Val Accuracy: 0.6533\n","===== Epoch 1480/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8603. Train Loss: 0.8676, Train Accuracy: 0.6110, Val Loss: 0.8384, Val Accuracy: 0.6444\n","===== Epoch 1481/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8603. Train Loss: 0.9027, Train Accuracy: 0.5710, Val Loss: 0.8090, Val Accuracy: 0.6533\n","===== Epoch 1482/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8603. Train Loss: 0.8543, Train Accuracy: 0.6165, Val Loss: 0.8412, Val Accuracy: 0.6533\n","===== Epoch 1483/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8603. Train Loss: 0.8558, Train Accuracy: 0.6314, Val Loss: 0.7858, Val Accuracy: 0.6933\n","===== Epoch 1484/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8603. Train Loss: 0.8513, Train Accuracy: 0.6141, Val Loss: 0.7886, Val Accuracy: 0.6711\n","===== Epoch 1485/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8603. Train Loss: 0.8560, Train Accuracy: 0.6235, Val Loss: 0.8057, Val Accuracy: 0.6889\n","===== Epoch 1486/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8603. Train Loss: 0.8420, Train Accuracy: 0.6384, Val Loss: 0.7847, Val Accuracy: 0.6889\n","===== Epoch 1487/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8603. Train Loss: 0.8566, Train Accuracy: 0.6141, Val Loss: 0.8644, Val Accuracy: 0.5511\n","===== Epoch 1488/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8603. Train Loss: 0.8461, Train Accuracy: 0.6102, Val Loss: 0.7970, Val Accuracy: 0.6844\n","===== Epoch 1489/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8603. Train Loss: 0.8410, Train Accuracy: 0.6306, Val Loss: 0.7933, Val Accuracy: 0.6800\n","===== Epoch 1490/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8603. Train Loss: 0.8601, Train Accuracy: 0.6204, Val Loss: 0.7957, Val Accuracy: 0.6489\n","===== Epoch 1491/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8603. Train Loss: 0.8468, Train Accuracy: 0.6400, Val Loss: 0.8239, Val Accuracy: 0.6622\n","===== Epoch 1492/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8603. Train Loss: 0.8297, Train Accuracy: 0.6392, Val Loss: 0.7992, Val Accuracy: 0.6711\n","===== Epoch 1493/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8603. Train Loss: 0.8333, Train Accuracy: 0.6259, Val Loss: 0.7853, Val Accuracy: 0.6978\n","===== Epoch 1494/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8603. Train Loss: 0.8579, Train Accuracy: 0.6259, Val Loss: 0.8078, Val Accuracy: 0.6889\n","===== Epoch 1495/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8603. Train Loss: 0.8375, Train Accuracy: 0.6400, Val Loss: 0.8223, Val Accuracy: 0.6489\n","===== Epoch 1496/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8603. Train Loss: 0.8418, Train Accuracy: 0.6408, Val Loss: 0.7785, Val Accuracy: 0.7022\n","===== Epoch 1497/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8603. Train Loss: 0.8338, Train Accuracy: 0.6188, Val Loss: 0.8169, Val Accuracy: 0.6489\n","===== Epoch 1498/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8603. Train Loss: 0.8225, Train Accuracy: 0.6345, Val Loss: 0.7849, Val Accuracy: 0.6756\n","===== Epoch 1499/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8603. Train Loss: 0.8646, Train Accuracy: 0.6102, Val Loss: 0.8029, Val Accuracy: 0.6844\n","===== Epoch 1500/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8603. Train Loss: 0.8361, Train Accuracy: 0.6337, Val Loss: 0.8124, Val Accuracy: 0.6356\n","===== Epoch 1501/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8603. Train Loss: 0.8427, Train Accuracy: 0.6322, Val Loss: 0.7959, Val Accuracy: 0.6800\n","===== Epoch 1502/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8603. Train Loss: 0.8389, Train Accuracy: 0.6180, Val Loss: 0.7708, Val Accuracy: 0.7022\n","===== Epoch 1503/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8603. Train Loss: 0.8360, Train Accuracy: 0.6196, Val Loss: 0.9634, Val Accuracy: 0.5244\n","===== Epoch 1504/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8603. Train Loss: 0.8665, Train Accuracy: 0.6039, Val Loss: 0.8473, Val Accuracy: 0.6089\n","===== Epoch 1505/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8603. Train Loss: 0.8490, Train Accuracy: 0.6110, Val Loss: 0.7645, Val Accuracy: 0.6978\n","===== Epoch 1506/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.8603. Train Loss: 0.8349, Train Accuracy: 0.6282, Val Loss: 0.8061, Val Accuracy: 0.6444\n","===== Epoch 1507/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.8603. Train Loss: 0.8540, Train Accuracy: 0.6196, Val Loss: 0.7870, Val Accuracy: 0.6800\n","===== Epoch 1508/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.8603. Train Loss: 0.8409, Train Accuracy: 0.6369, Val Loss: 0.7879, Val Accuracy: 0.6978\n","===== Epoch 1509/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.8603. Train Loss: 0.8510, Train Accuracy: 0.6275, Val Loss: 0.7869, Val Accuracy: 0.6622\n","===== Epoch 1510/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.8603. Train Loss: 0.8315, Train Accuracy: 0.6353, Val Loss: 0.7885, Val Accuracy: 0.6578\n","===== Epoch 1511/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.8603. Train Loss: 0.8417, Train Accuracy: 0.6298, Val Loss: 0.7682, Val Accuracy: 0.6933\n","===== Epoch 1512/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.8603. Train Loss: 0.8384, Train Accuracy: 0.6329, Val Loss: 0.8040, Val Accuracy: 0.6489\n","===== Epoch 1513/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.8603. Train Loss: 0.8394, Train Accuracy: 0.6243, Val Loss: 0.8962, Val Accuracy: 0.5644\n","===== Epoch 1514/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.8603. Train Loss: 0.8298, Train Accuracy: 0.6165, Val Loss: 0.7783, Val Accuracy: 0.6800\n","===== Epoch 1515/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.8603. Train Loss: 0.8430, Train Accuracy: 0.6471, Val Loss: 0.7794, Val Accuracy: 0.6800\n","===== Epoch 1516/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.8603. Train Loss: 0.8238, Train Accuracy: 0.6235, Val Loss: 0.7912, Val Accuracy: 0.6844\n","===== Epoch 1517/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.8603. Train Loss: 0.8192, Train Accuracy: 0.6424, Val Loss: 0.7751, Val Accuracy: 0.6756\n","===== Epoch 1518/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.8603. Train Loss: 0.8403, Train Accuracy: 0.6392, Val Loss: 0.7725, Val Accuracy: 0.6933\n","===== Epoch 1519/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.8603. Train Loss: 0.8268, Train Accuracy: 0.6431, Val Loss: 0.8272, Val Accuracy: 0.6489\n","===== Epoch 1520/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.8603. Train Loss: 0.8275, Train Accuracy: 0.6557, Val Loss: 0.7553, Val Accuracy: 0.7200\n","===== Epoch 1521/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.8603. Train Loss: 0.8295, Train Accuracy: 0.6227, Val Loss: 0.7730, Val Accuracy: 0.7333\n","===== Epoch 1522/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.8603. Train Loss: 0.8165, Train Accuracy: 0.6384, Val Loss: 0.7594, Val Accuracy: 0.7244\n","===== Epoch 1523/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.8603. Train Loss: 0.8282, Train Accuracy: 0.6424, Val Loss: 0.7772, Val Accuracy: 0.6667\n","===== Epoch 1524/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.8603. Train Loss: 0.8377, Train Accuracy: 0.6306, Val Loss: 0.7887, Val Accuracy: 0.6844\n","===== Epoch 1525/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.8603. Train Loss: 0.8125, Train Accuracy: 0.6439, Val Loss: 0.7736, Val Accuracy: 0.6933\n","===== Epoch 1526/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.8603. Train Loss: 0.8209, Train Accuracy: 0.6549, Val Loss: 0.7605, Val Accuracy: 0.7422\n","===== Epoch 1527/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.8603. Train Loss: 0.8174, Train Accuracy: 0.6408, Val Loss: 0.7573, Val Accuracy: 0.6889\n","===== Epoch 1528/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.8603. Train Loss: 0.8374, Train Accuracy: 0.6322, Val Loss: 0.8256, Val Accuracy: 0.6400\n","===== Epoch 1529/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.8603. Train Loss: 0.8102, Train Accuracy: 0.6722, Val Loss: 0.7783, Val Accuracy: 0.6933\n","===== Epoch 1530/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.8603. Train Loss: 0.8112, Train Accuracy: 0.6424, Val Loss: 0.7594, Val Accuracy: 0.6933\n","===== Epoch 1531/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.8603. Train Loss: 0.8241, Train Accuracy: 0.6400, Val Loss: 0.7602, Val Accuracy: 0.7200\n","===== Epoch 1532/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.8603. Train Loss: 0.8297, Train Accuracy: 0.6384, Val Loss: 0.7932, Val Accuracy: 0.6756\n","===== Epoch 1533/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.8603. Train Loss: 0.8196, Train Accuracy: 0.6518, Val Loss: 0.7527, Val Accuracy: 0.7067\n","===== Epoch 1534/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.8603. Train Loss: 0.8104, Train Accuracy: 0.6659, Val Loss: 0.7945, Val Accuracy: 0.6933\n","===== Epoch 1535/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.8603. Train Loss: 0.8184, Train Accuracy: 0.6431, Val Loss: 0.8053, Val Accuracy: 0.6356\n","===== Epoch 1536/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.8603. Train Loss: 0.8327, Train Accuracy: 0.6376, Val Loss: 0.7570, Val Accuracy: 0.6889\n","===== Epoch 1537/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.8603. Train Loss: 0.8081, Train Accuracy: 0.6322, Val Loss: 0.7820, Val Accuracy: 0.7067\n","===== Epoch 1538/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.8603. Train Loss: 0.8183, Train Accuracy: 0.6447, Val Loss: 0.7647, Val Accuracy: 0.6889\n","===== Epoch 1539/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.8603. Train Loss: 0.8169, Train Accuracy: 0.6486, Val Loss: 0.7636, Val Accuracy: 0.7022\n","===== Epoch 1540/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.8603. Train Loss: 0.8185, Train Accuracy: 0.6384, Val Loss: 0.7696, Val Accuracy: 0.7156\n","===== Epoch 1541/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.8603. Train Loss: 0.8160, Train Accuracy: 0.6518, Val Loss: 0.7548, Val Accuracy: 0.7244\n","===== Epoch 1542/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.8603. Train Loss: 0.8020, Train Accuracy: 0.6596, Val Loss: 0.7871, Val Accuracy: 0.6667\n","===== Epoch 1543/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.8603. Train Loss: 0.8137, Train Accuracy: 0.6455, Val Loss: 0.7579, Val Accuracy: 0.7067\n","===== Epoch 1544/2000 =====\n","New best model saved with Val ROC AUC: 0.8644, Train Loss: 0.8213, Train Accuracy: 0.6518, Val Loss: 0.7545, Val Accuracy: 0.7111\n","===== Epoch 1545/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8644. Train Loss: 0.8113, Train Accuracy: 0.6525, Val Loss: 0.7761, Val Accuracy: 0.6622\n","===== Epoch 1546/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8644. Train Loss: 0.8153, Train Accuracy: 0.6565, Val Loss: 0.7966, Val Accuracy: 0.6711\n","===== Epoch 1547/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8644. Train Loss: 0.8170, Train Accuracy: 0.6463, Val Loss: 0.7613, Val Accuracy: 0.6667\n","===== Epoch 1548/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8644. Train Loss: 0.8109, Train Accuracy: 0.6651, Val Loss: 0.7680, Val Accuracy: 0.6844\n","===== Epoch 1549/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8644. Train Loss: 0.8204, Train Accuracy: 0.6447, Val Loss: 0.7751, Val Accuracy: 0.7244\n","===== Epoch 1550/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8644. Train Loss: 0.8014, Train Accuracy: 0.6620, Val Loss: 0.7593, Val Accuracy: 0.6844\n","===== Epoch 1551/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8644. Train Loss: 0.8133, Train Accuracy: 0.6439, Val Loss: 0.7688, Val Accuracy: 0.6978\n","===== Epoch 1552/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8644. Train Loss: 0.8282, Train Accuracy: 0.6463, Val Loss: 0.7617, Val Accuracy: 0.7200\n","===== Epoch 1553/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8644. Train Loss: 0.8227, Train Accuracy: 0.6376, Val Loss: 0.7917, Val Accuracy: 0.6667\n","===== Epoch 1554/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8644. Train Loss: 0.8117, Train Accuracy: 0.6447, Val Loss: 0.8109, Val Accuracy: 0.6667\n","===== Epoch 1555/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8644. Train Loss: 0.8136, Train Accuracy: 0.6345, Val Loss: 0.7722, Val Accuracy: 0.6889\n","===== Epoch 1556/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8644. Train Loss: 0.8231, Train Accuracy: 0.6353, Val Loss: 0.7841, Val Accuracy: 0.6889\n","===== Epoch 1557/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8644. Train Loss: 0.8303, Train Accuracy: 0.6337, Val Loss: 0.7821, Val Accuracy: 0.6933\n","===== Epoch 1558/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8644. Train Loss: 0.8304, Train Accuracy: 0.6298, Val Loss: 0.7803, Val Accuracy: 0.6933\n","===== Epoch 1559/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8644. Train Loss: 0.8233, Train Accuracy: 0.6604, Val Loss: 0.7832, Val Accuracy: 0.6978\n","===== Epoch 1560/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8644. Train Loss: 0.8278, Train Accuracy: 0.6361, Val Loss: 0.7984, Val Accuracy: 0.6844\n","===== Epoch 1561/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8644. Train Loss: 0.8340, Train Accuracy: 0.6369, Val Loss: 0.7807, Val Accuracy: 0.6889\n","===== Epoch 1562/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8644. Train Loss: 0.8259, Train Accuracy: 0.6290, Val Loss: 0.7731, Val Accuracy: 0.6800\n","===== Epoch 1563/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8644. Train Loss: 0.8063, Train Accuracy: 0.6580, Val Loss: 0.7771, Val Accuracy: 0.6711\n","===== Epoch 1564/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8644. Train Loss: 0.8229, Train Accuracy: 0.6627, Val Loss: 0.7626, Val Accuracy: 0.7200\n","===== Epoch 1565/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8644. Train Loss: 0.8298, Train Accuracy: 0.6400, Val Loss: 0.7802, Val Accuracy: 0.6844\n","===== Epoch 1566/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8644. Train Loss: 0.8455, Train Accuracy: 0.6188, Val Loss: 0.7832, Val Accuracy: 0.6978\n","===== Epoch 1567/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8644. Train Loss: 0.8258, Train Accuracy: 0.6494, Val Loss: 0.7828, Val Accuracy: 0.6978\n","===== Epoch 1568/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8644. Train Loss: 0.8374, Train Accuracy: 0.6369, Val Loss: 0.8056, Val Accuracy: 0.6533\n","===== Epoch 1569/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8644. Train Loss: 0.8222, Train Accuracy: 0.6384, Val Loss: 0.7776, Val Accuracy: 0.7378\n","===== Epoch 1570/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8644. Train Loss: 0.8367, Train Accuracy: 0.6486, Val Loss: 0.7756, Val Accuracy: 0.7156\n","===== Epoch 1571/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8644. Train Loss: 0.8397, Train Accuracy: 0.6282, Val Loss: 0.8133, Val Accuracy: 0.6356\n","===== Epoch 1572/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8644. Train Loss: 0.8440, Train Accuracy: 0.6282, Val Loss: 0.7785, Val Accuracy: 0.6978\n","===== Epoch 1573/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8644. Train Loss: 0.8137, Train Accuracy: 0.6408, Val Loss: 0.8056, Val Accuracy: 0.6489\n","===== Epoch 1574/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8644. Train Loss: 0.8251, Train Accuracy: 0.6424, Val Loss: 0.7773, Val Accuracy: 0.6622\n","===== Epoch 1575/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8644. Train Loss: 0.8313, Train Accuracy: 0.6369, Val Loss: 0.8078, Val Accuracy: 0.6178\n","===== Epoch 1576/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8644. Train Loss: 0.8398, Train Accuracy: 0.6227, Val Loss: 0.7670, Val Accuracy: 0.7156\n","===== Epoch 1577/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8644. Train Loss: 0.8244, Train Accuracy: 0.6392, Val Loss: 0.7595, Val Accuracy: 0.6889\n","===== Epoch 1578/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8644. Train Loss: 0.8424, Train Accuracy: 0.6306, Val Loss: 0.7679, Val Accuracy: 0.7156\n","===== Epoch 1579/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8644. Train Loss: 0.8336, Train Accuracy: 0.6384, Val Loss: 0.7887, Val Accuracy: 0.6578\n","===== Epoch 1580/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8644. Train Loss: 0.8375, Train Accuracy: 0.6298, Val Loss: 0.8024, Val Accuracy: 0.6533\n","===== Epoch 1581/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8644. Train Loss: 0.8358, Train Accuracy: 0.6282, Val Loss: 0.7973, Val Accuracy: 0.6933\n","===== Epoch 1582/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8644. Train Loss: 0.8370, Train Accuracy: 0.6251, Val Loss: 0.7761, Val Accuracy: 0.6578\n","===== Epoch 1583/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8644. Train Loss: 0.8285, Train Accuracy: 0.6353, Val Loss: 0.8143, Val Accuracy: 0.6667\n","===== Epoch 1584/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8644. Train Loss: 0.8323, Train Accuracy: 0.6384, Val Loss: 0.8031, Val Accuracy: 0.6444\n","===== Epoch 1585/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8644. Train Loss: 0.8514, Train Accuracy: 0.6314, Val Loss: 0.7721, Val Accuracy: 0.6800\n","===== Epoch 1586/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8644. Train Loss: 0.8305, Train Accuracy: 0.6439, Val Loss: 0.7701, Val Accuracy: 0.6889\n","===== Epoch 1587/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8644. Train Loss: 0.8382, Train Accuracy: 0.6259, Val Loss: 0.8418, Val Accuracy: 0.6222\n","===== Epoch 1588/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8644. Train Loss: 0.8528, Train Accuracy: 0.6282, Val Loss: 0.8004, Val Accuracy: 0.6578\n","===== Epoch 1589/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8644. Train Loss: 0.8417, Train Accuracy: 0.6149, Val Loss: 0.7761, Val Accuracy: 0.6978\n","===== Epoch 1590/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8644. Train Loss: 0.8289, Train Accuracy: 0.6416, Val Loss: 0.8027, Val Accuracy: 0.6800\n","===== Epoch 1591/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8644. Train Loss: 0.8281, Train Accuracy: 0.6400, Val Loss: 0.7605, Val Accuracy: 0.6933\n","===== Epoch 1592/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8644. Train Loss: 0.8161, Train Accuracy: 0.6573, Val Loss: 0.7790, Val Accuracy: 0.6756\n","===== Epoch 1593/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8644. Train Loss: 0.8518, Train Accuracy: 0.6290, Val Loss: 0.7813, Val Accuracy: 0.6711\n","===== Epoch 1594/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8644. Train Loss: 0.8373, Train Accuracy: 0.6165, Val Loss: 0.7665, Val Accuracy: 0.7156\n","===== Epoch 1595/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8644. Train Loss: 0.8165, Train Accuracy: 0.6298, Val Loss: 0.7625, Val Accuracy: 0.7067\n","===== Epoch 1596/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8644. Train Loss: 0.8150, Train Accuracy: 0.6533, Val Loss: 0.7826, Val Accuracy: 0.6578\n","===== Epoch 1597/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8644. Train Loss: 0.8225, Train Accuracy: 0.6408, Val Loss: 0.8222, Val Accuracy: 0.6178\n","===== Epoch 1598/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8644. Train Loss: 0.8058, Train Accuracy: 0.6557, Val Loss: 0.8005, Val Accuracy: 0.6222\n","===== Epoch 1599/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8644. Train Loss: 0.8578, Train Accuracy: 0.6110, Val Loss: 0.8130, Val Accuracy: 0.6667\n","===== Epoch 1600/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8644. Train Loss: 0.8252, Train Accuracy: 0.6439, Val Loss: 0.7838, Val Accuracy: 0.6933\n","===== Epoch 1601/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8644. Train Loss: 0.8037, Train Accuracy: 0.6651, Val Loss: 0.8265, Val Accuracy: 0.6489\n","===== Epoch 1602/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8644. Train Loss: 0.8240, Train Accuracy: 0.6353, Val Loss: 0.7835, Val Accuracy: 0.6844\n","===== Epoch 1603/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8644. Train Loss: 0.8600, Train Accuracy: 0.6180, Val Loss: 0.7885, Val Accuracy: 0.6356\n","===== Epoch 1604/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8644. Train Loss: 0.8288, Train Accuracy: 0.6510, Val Loss: 0.7766, Val Accuracy: 0.6889\n","===== Epoch 1605/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8644. Train Loss: 0.8254, Train Accuracy: 0.6431, Val Loss: 0.7666, Val Accuracy: 0.7378\n","===== Epoch 1606/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8644. Train Loss: 0.8082, Train Accuracy: 0.6753, Val Loss: 0.7745, Val Accuracy: 0.6667\n","===== Epoch 1607/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8644. Train Loss: 0.8135, Train Accuracy: 0.6596, Val Loss: 0.7678, Val Accuracy: 0.7289\n","===== Epoch 1608/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8644. Train Loss: 0.8471, Train Accuracy: 0.6345, Val Loss: 0.7970, Val Accuracy: 0.6933\n","===== Epoch 1609/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8644. Train Loss: 0.8179, Train Accuracy: 0.6604, Val Loss: 0.7935, Val Accuracy: 0.6533\n","===== Epoch 1610/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8644. Train Loss: 0.8350, Train Accuracy: 0.6282, Val Loss: 0.7707, Val Accuracy: 0.6533\n","===== Epoch 1611/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8644. Train Loss: 0.8190, Train Accuracy: 0.6369, Val Loss: 0.7885, Val Accuracy: 0.6667\n","===== Epoch 1612/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8644. Train Loss: 0.8136, Train Accuracy: 0.6596, Val Loss: 0.7652, Val Accuracy: 0.6667\n","===== Epoch 1613/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8644. Train Loss: 0.8128, Train Accuracy: 0.6557, Val Loss: 0.7677, Val Accuracy: 0.6667\n","===== Epoch 1614/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8644. Train Loss: 0.8028, Train Accuracy: 0.6549, Val Loss: 0.7681, Val Accuracy: 0.6978\n","===== Epoch 1615/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8644. Train Loss: 0.8111, Train Accuracy: 0.6502, Val Loss: 0.7834, Val Accuracy: 0.6444\n","===== Epoch 1616/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8644. Train Loss: 0.7951, Train Accuracy: 0.6737, Val Loss: 0.7535, Val Accuracy: 0.7067\n","===== Epoch 1617/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8644. Train Loss: 0.8178, Train Accuracy: 0.6533, Val Loss: 0.7786, Val Accuracy: 0.6800\n","===== Epoch 1618/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8644. Train Loss: 0.8171, Train Accuracy: 0.6651, Val Loss: 0.7449, Val Accuracy: 0.7200\n","===== Epoch 1619/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8644. Train Loss: 0.8078, Train Accuracy: 0.6502, Val Loss: 0.7669, Val Accuracy: 0.6933\n","===== Epoch 1620/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8644. Train Loss: 0.8176, Train Accuracy: 0.6463, Val Loss: 0.7857, Val Accuracy: 0.6978\n","===== Epoch 1621/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8644. Train Loss: 0.8177, Train Accuracy: 0.6463, Val Loss: 0.7690, Val Accuracy: 0.6844\n","===== Epoch 1622/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8644. Train Loss: 0.7922, Train Accuracy: 0.6502, Val Loss: 0.7590, Val Accuracy: 0.6844\n","===== Epoch 1623/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8644. Train Loss: 0.8056, Train Accuracy: 0.6494, Val Loss: 0.7829, Val Accuracy: 0.6667\n","===== Epoch 1624/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8644. Train Loss: 0.8285, Train Accuracy: 0.6345, Val Loss: 0.7703, Val Accuracy: 0.7200\n","===== Epoch 1625/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8644. Train Loss: 0.8064, Train Accuracy: 0.6502, Val Loss: 0.7560, Val Accuracy: 0.7289\n","===== Epoch 1626/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8644. Train Loss: 0.8103, Train Accuracy: 0.6557, Val Loss: 0.7491, Val Accuracy: 0.6844\n","===== Epoch 1627/2000 =====\n","New best model saved with Val ROC AUC: 0.8709, Train Loss: 0.8183, Train Accuracy: 0.6306, Val Loss: 0.7393, Val Accuracy: 0.6933\n","===== Epoch 1628/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8709. Train Loss: 0.8061, Train Accuracy: 0.6682, Val Loss: 0.7969, Val Accuracy: 0.6444\n","===== Epoch 1629/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6675, Val Loss: 0.7514, Val Accuracy: 0.6978\n","===== Epoch 1630/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8709. Train Loss: 0.8053, Train Accuracy: 0.6698, Val Loss: 0.7718, Val Accuracy: 0.6933\n","===== Epoch 1631/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8709. Train Loss: 0.8072, Train Accuracy: 0.6651, Val Loss: 0.7908, Val Accuracy: 0.6667\n","===== Epoch 1632/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6533, Val Loss: 0.7830, Val Accuracy: 0.6800\n","===== Epoch 1633/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8709. Train Loss: 0.8081, Train Accuracy: 0.6424, Val Loss: 0.7926, Val Accuracy: 0.6889\n","===== Epoch 1634/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8709. Train Loss: 0.8159, Train Accuracy: 0.6376, Val Loss: 0.7703, Val Accuracy: 0.6889\n","===== Epoch 1635/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8709. Train Loss: 0.7886, Train Accuracy: 0.6722, Val Loss: 0.7730, Val Accuracy: 0.6844\n","===== Epoch 1636/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8709. Train Loss: 0.7934, Train Accuracy: 0.6580, Val Loss: 0.7681, Val Accuracy: 0.7067\n","===== Epoch 1637/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8709. Train Loss: 0.8059, Train Accuracy: 0.6651, Val Loss: 0.7981, Val Accuracy: 0.6844\n","===== Epoch 1638/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8709. Train Loss: 0.8134, Train Accuracy: 0.6510, Val Loss: 0.7684, Val Accuracy: 0.6667\n","===== Epoch 1639/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8709. Train Loss: 0.8132, Train Accuracy: 0.6612, Val Loss: 0.7440, Val Accuracy: 0.7333\n","===== Epoch 1640/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8709. Train Loss: 0.7930, Train Accuracy: 0.6651, Val Loss: 0.7670, Val Accuracy: 0.7333\n","===== Epoch 1641/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8709. Train Loss: 0.7963, Train Accuracy: 0.6667, Val Loss: 0.7778, Val Accuracy: 0.6756\n","===== Epoch 1642/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8709. Train Loss: 0.8148, Train Accuracy: 0.6690, Val Loss: 0.7472, Val Accuracy: 0.7244\n","===== Epoch 1643/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8709. Train Loss: 0.8018, Train Accuracy: 0.6565, Val Loss: 0.7596, Val Accuracy: 0.6933\n","===== Epoch 1644/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8709. Train Loss: 0.7945, Train Accuracy: 0.6690, Val Loss: 0.7787, Val Accuracy: 0.6800\n","===== Epoch 1645/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8709. Train Loss: 0.8090, Train Accuracy: 0.6525, Val Loss: 0.7489, Val Accuracy: 0.7111\n","===== Epoch 1646/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8709. Train Loss: 0.8020, Train Accuracy: 0.6447, Val Loss: 0.7530, Val Accuracy: 0.6978\n","===== Epoch 1647/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8709. Train Loss: 0.8060, Train Accuracy: 0.6604, Val Loss: 0.7582, Val Accuracy: 0.6978\n","===== Epoch 1648/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8709. Train Loss: 0.7970, Train Accuracy: 0.6784, Val Loss: 0.7359, Val Accuracy: 0.7422\n","===== Epoch 1649/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8709. Train Loss: 0.8086, Train Accuracy: 0.6478, Val Loss: 0.7687, Val Accuracy: 0.7067\n","===== Epoch 1650/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8709. Train Loss: 0.8065, Train Accuracy: 0.6604, Val Loss: 0.7985, Val Accuracy: 0.6800\n","===== Epoch 1651/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6698, Val Loss: 0.7603, Val Accuracy: 0.7289\n","===== Epoch 1652/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8709. Train Loss: 0.8112, Train Accuracy: 0.6510, Val Loss: 0.7802, Val Accuracy: 0.6444\n","===== Epoch 1653/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8709. Train Loss: 0.8136, Train Accuracy: 0.6447, Val Loss: 0.7460, Val Accuracy: 0.6933\n","===== Epoch 1654/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8709. Train Loss: 0.7959, Train Accuracy: 0.6510, Val Loss: 0.7745, Val Accuracy: 0.6889\n","===== Epoch 1655/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8709. Train Loss: 0.8072, Train Accuracy: 0.6510, Val Loss: 0.7848, Val Accuracy: 0.6667\n","===== Epoch 1656/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8709. Train Loss: 0.8014, Train Accuracy: 0.6651, Val Loss: 0.7609, Val Accuracy: 0.7067\n","===== Epoch 1657/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8709. Train Loss: 0.8121, Train Accuracy: 0.6659, Val Loss: 0.7691, Val Accuracy: 0.6844\n","===== Epoch 1658/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8709. Train Loss: 0.8094, Train Accuracy: 0.6620, Val Loss: 0.7898, Val Accuracy: 0.7022\n","===== Epoch 1659/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8709. Train Loss: 0.7994, Train Accuracy: 0.6706, Val Loss: 0.7727, Val Accuracy: 0.6889\n","===== Epoch 1660/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8709. Train Loss: 0.8047, Train Accuracy: 0.6580, Val Loss: 0.7794, Val Accuracy: 0.6756\n","===== Epoch 1661/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8709. Train Loss: 0.8085, Train Accuracy: 0.6502, Val Loss: 0.7829, Val Accuracy: 0.6844\n","===== Epoch 1662/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8709. Train Loss: 0.7973, Train Accuracy: 0.6761, Val Loss: 0.7640, Val Accuracy: 0.7111\n","===== Epoch 1663/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8709. Train Loss: 0.8018, Train Accuracy: 0.6541, Val Loss: 0.8068, Val Accuracy: 0.6844\n","===== Epoch 1664/2000 =====\n","New best model saved with Val ROC AUC: 0.8740, Train Loss: 0.7947, Train Accuracy: 0.6675, Val Loss: 0.7340, Val Accuracy: 0.7422\n","===== Epoch 1665/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8740. Train Loss: 0.7958, Train Accuracy: 0.6675, Val Loss: 0.7504, Val Accuracy: 0.7067\n","===== Epoch 1666/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8740. Train Loss: 0.8105, Train Accuracy: 0.6643, Val Loss: 0.7805, Val Accuracy: 0.6667\n","===== Epoch 1667/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8740. Train Loss: 0.7970, Train Accuracy: 0.6800, Val Loss: 0.7398, Val Accuracy: 0.7467\n","===== Epoch 1668/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8740. Train Loss: 0.8111, Train Accuracy: 0.6447, Val Loss: 0.7748, Val Accuracy: 0.6800\n","===== Epoch 1669/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8740. Train Loss: 0.8057, Train Accuracy: 0.6596, Val Loss: 0.7396, Val Accuracy: 0.6711\n","===== Epoch 1670/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8740. Train Loss: 0.8165, Train Accuracy: 0.6549, Val Loss: 0.7592, Val Accuracy: 0.7111\n","===== Epoch 1671/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8740. Train Loss: 0.8333, Train Accuracy: 0.6369, Val Loss: 0.8013, Val Accuracy: 0.6933\n","===== Epoch 1672/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8740. Train Loss: 0.8060, Train Accuracy: 0.6604, Val Loss: 0.7633, Val Accuracy: 0.6711\n","===== Epoch 1673/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8740. Train Loss: 0.8181, Train Accuracy: 0.6541, Val Loss: 0.8368, Val Accuracy: 0.6311\n","===== Epoch 1674/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8740. Train Loss: 0.8109, Train Accuracy: 0.6714, Val Loss: 0.7802, Val Accuracy: 0.6889\n","===== Epoch 1675/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8740. Train Loss: 0.8099, Train Accuracy: 0.6635, Val Loss: 0.7916, Val Accuracy: 0.6756\n","===== Epoch 1676/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8740. Train Loss: 0.8156, Train Accuracy: 0.6635, Val Loss: 0.7648, Val Accuracy: 0.6933\n","===== Epoch 1677/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8740. Train Loss: 0.8367, Train Accuracy: 0.6267, Val Loss: 0.7703, Val Accuracy: 0.6800\n","===== Epoch 1678/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8740. Train Loss: 0.8282, Train Accuracy: 0.6392, Val Loss: 0.7835, Val Accuracy: 0.6622\n","===== Epoch 1679/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8740. Train Loss: 0.8118, Train Accuracy: 0.6525, Val Loss: 0.7845, Val Accuracy: 0.6933\n","===== Epoch 1680/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8740. Train Loss: 0.7994, Train Accuracy: 0.6510, Val Loss: 0.7826, Val Accuracy: 0.6800\n","===== Epoch 1681/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8740. Train Loss: 0.8114, Train Accuracy: 0.6580, Val Loss: 0.7675, Val Accuracy: 0.6711\n","===== Epoch 1682/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8740. Train Loss: 0.8313, Train Accuracy: 0.6416, Val Loss: 0.7944, Val Accuracy: 0.6800\n","===== Epoch 1683/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8740. Train Loss: 0.8082, Train Accuracy: 0.6659, Val Loss: 0.7650, Val Accuracy: 0.6800\n","===== Epoch 1684/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8740. Train Loss: 0.8742, Train Accuracy: 0.6000, Val Loss: 0.7877, Val Accuracy: 0.6533\n","===== Epoch 1685/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8740. Train Loss: 0.8277, Train Accuracy: 0.6275, Val Loss: 0.8018, Val Accuracy: 0.6222\n","===== Epoch 1686/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8740. Train Loss: 0.8116, Train Accuracy: 0.6651, Val Loss: 0.7750, Val Accuracy: 0.6978\n","===== Epoch 1687/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8740. Train Loss: 0.8189, Train Accuracy: 0.6471, Val Loss: 0.7955, Val Accuracy: 0.6356\n","===== Epoch 1688/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8740. Train Loss: 0.8217, Train Accuracy: 0.6557, Val Loss: 0.7818, Val Accuracy: 0.6400\n","===== Epoch 1689/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8740. Train Loss: 0.8160, Train Accuracy: 0.6620, Val Loss: 0.7740, Val Accuracy: 0.7111\n","===== Epoch 1690/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8740. Train Loss: 0.8163, Train Accuracy: 0.6463, Val Loss: 0.7560, Val Accuracy: 0.6933\n","===== Epoch 1691/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8740. Train Loss: 0.8022, Train Accuracy: 0.6643, Val Loss: 0.7553, Val Accuracy: 0.6711\n","===== Epoch 1692/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8740. Train Loss: 0.8270, Train Accuracy: 0.6424, Val Loss: 0.7709, Val Accuracy: 0.6933\n","===== Epoch 1693/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8740. Train Loss: 0.8271, Train Accuracy: 0.6322, Val Loss: 0.8005, Val Accuracy: 0.6444\n","===== Epoch 1694/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8740. Train Loss: 0.8230, Train Accuracy: 0.6612, Val Loss: 0.7596, Val Accuracy: 0.6933\n","===== Epoch 1695/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8740. Train Loss: 0.8043, Train Accuracy: 0.6620, Val Loss: 0.7667, Val Accuracy: 0.7022\n","===== Epoch 1696/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8740. Train Loss: 0.8198, Train Accuracy: 0.6502, Val Loss: 0.7884, Val Accuracy: 0.6800\n","===== Epoch 1697/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8740. Train Loss: 0.8211, Train Accuracy: 0.6408, Val Loss: 0.7902, Val Accuracy: 0.6756\n","===== Epoch 1698/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8740. Train Loss: 0.8192, Train Accuracy: 0.6541, Val Loss: 0.8055, Val Accuracy: 0.6622\n","===== Epoch 1699/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8740. Train Loss: 0.8217, Train Accuracy: 0.6502, Val Loss: 0.7623, Val Accuracy: 0.7200\n","===== Epoch 1700/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8740. Train Loss: 0.8157, Train Accuracy: 0.6573, Val Loss: 0.7672, Val Accuracy: 0.6978\n","===== Epoch 1701/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8740. Train Loss: 0.8134, Train Accuracy: 0.6573, Val Loss: 0.7840, Val Accuracy: 0.6889\n","===== Epoch 1702/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8740. Train Loss: 0.7926, Train Accuracy: 0.6580, Val Loss: 0.7866, Val Accuracy: 0.6756\n","===== Epoch 1703/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8740. Train Loss: 0.8197, Train Accuracy: 0.6502, Val Loss: 0.7768, Val Accuracy: 0.6933\n","===== Epoch 1704/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8740. Train Loss: 0.8230, Train Accuracy: 0.6549, Val Loss: 0.7645, Val Accuracy: 0.6889\n","===== Epoch 1705/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8740. Train Loss: 0.8162, Train Accuracy: 0.6392, Val Loss: 0.7448, Val Accuracy: 0.7244\n","===== Epoch 1706/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8740. Train Loss: 0.8057, Train Accuracy: 0.6502, Val Loss: 0.7637, Val Accuracy: 0.7333\n","===== Epoch 1707/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8740. Train Loss: 0.8072, Train Accuracy: 0.6620, Val Loss: 0.7637, Val Accuracy: 0.7200\n","===== Epoch 1708/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8740. Train Loss: 0.8097, Train Accuracy: 0.6447, Val Loss: 0.7519, Val Accuracy: 0.7200\n","===== Epoch 1709/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8740. Train Loss: 0.7967, Train Accuracy: 0.6627, Val Loss: 0.7536, Val Accuracy: 0.7333\n","===== Epoch 1710/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8740. Train Loss: 0.8093, Train Accuracy: 0.6612, Val Loss: 0.7542, Val Accuracy: 0.7289\n","===== Epoch 1711/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8740. Train Loss: 0.8045, Train Accuracy: 0.6745, Val Loss: 0.7533, Val Accuracy: 0.6889\n","===== Epoch 1712/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8740. Train Loss: 0.7852, Train Accuracy: 0.6737, Val Loss: 0.7767, Val Accuracy: 0.6622\n","===== Epoch 1713/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8740. Train Loss: 0.8135, Train Accuracy: 0.6557, Val Loss: 0.7683, Val Accuracy: 0.7022\n","===== Epoch 1714/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8740. Train Loss: 0.7932, Train Accuracy: 0.6729, Val Loss: 0.7552, Val Accuracy: 0.6889\n","===== Epoch 1715/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8740. Train Loss: 0.8132, Train Accuracy: 0.6494, Val Loss: 0.7958, Val Accuracy: 0.6711\n","===== Epoch 1716/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8740. Train Loss: 0.8141, Train Accuracy: 0.6525, Val Loss: 0.7810, Val Accuracy: 0.6756\n","===== Epoch 1717/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8740. Train Loss: 0.8185, Train Accuracy: 0.6502, Val Loss: 0.7788, Val Accuracy: 0.6933\n","===== Epoch 1718/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8740. Train Loss: 0.7994, Train Accuracy: 0.6722, Val Loss: 0.7777, Val Accuracy: 0.6533\n","===== Epoch 1719/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8740. Train Loss: 0.8047, Train Accuracy: 0.6729, Val Loss: 0.7317, Val Accuracy: 0.7289\n","===== Epoch 1720/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8740. Train Loss: 0.7930, Train Accuracy: 0.6761, Val Loss: 0.7593, Val Accuracy: 0.7156\n","===== Epoch 1721/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8740. Train Loss: 0.7915, Train Accuracy: 0.6761, Val Loss: 0.7665, Val Accuracy: 0.7022\n","===== Epoch 1722/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8740. Train Loss: 0.7906, Train Accuracy: 0.6839, Val Loss: 0.7572, Val Accuracy: 0.6889\n","===== Epoch 1723/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8740. Train Loss: 0.7995, Train Accuracy: 0.6753, Val Loss: 0.7792, Val Accuracy: 0.6622\n","===== Epoch 1724/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8740. Train Loss: 0.7943, Train Accuracy: 0.6596, Val Loss: 0.7302, Val Accuracy: 0.7244\n","===== Epoch 1725/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8740. Train Loss: 0.7947, Train Accuracy: 0.6682, Val Loss: 0.7621, Val Accuracy: 0.6933\n","===== Epoch 1726/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8740. Train Loss: 0.7950, Train Accuracy: 0.6894, Val Loss: 0.7432, Val Accuracy: 0.6889\n","===== Epoch 1727/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8740. Train Loss: 0.7970, Train Accuracy: 0.6690, Val Loss: 0.7403, Val Accuracy: 0.7111\n","===== Epoch 1728/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8740. Train Loss: 0.7999, Train Accuracy: 0.6690, Val Loss: 0.7635, Val Accuracy: 0.7200\n","===== Epoch 1729/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8740. Train Loss: 0.7936, Train Accuracy: 0.6737, Val Loss: 0.7813, Val Accuracy: 0.6978\n","===== Epoch 1730/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8740. Train Loss: 0.7995, Train Accuracy: 0.6753, Val Loss: 0.7358, Val Accuracy: 0.7244\n","===== Epoch 1731/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8740. Train Loss: 0.7924, Train Accuracy: 0.6722, Val Loss: 0.7480, Val Accuracy: 0.6978\n","===== Epoch 1732/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8740. Train Loss: 0.7969, Train Accuracy: 0.6573, Val Loss: 0.7580, Val Accuracy: 0.7111\n","===== Epoch 1733/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8740. Train Loss: 0.7967, Train Accuracy: 0.6565, Val Loss: 0.7340, Val Accuracy: 0.7378\n","===== Epoch 1734/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8740. Train Loss: 0.7900, Train Accuracy: 0.6714, Val Loss: 0.7604, Val Accuracy: 0.6889\n","===== Epoch 1735/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8740. Train Loss: 0.7883, Train Accuracy: 0.6784, Val Loss: 0.7436, Val Accuracy: 0.7067\n","===== Epoch 1736/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8740. Train Loss: 0.7866, Train Accuracy: 0.6659, Val Loss: 0.7595, Val Accuracy: 0.6978\n","===== Epoch 1737/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8740. Train Loss: 0.7838, Train Accuracy: 0.6761, Val Loss: 0.7522, Val Accuracy: 0.6844\n","===== Epoch 1738/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8740. Train Loss: 0.7917, Train Accuracy: 0.6753, Val Loss: 0.7438, Val Accuracy: 0.7378\n","===== Epoch 1739/2000 =====\n","New best model saved with Val ROC AUC: 0.8851, Train Loss: 0.7880, Train Accuracy: 0.6863, Val Loss: 0.7180, Val Accuracy: 0.7689\n","===== Epoch 1740/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8851. Train Loss: 0.7803, Train Accuracy: 0.6871, Val Loss: 0.7411, Val Accuracy: 0.7156\n","===== Epoch 1741/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8851. Train Loss: 0.7688, Train Accuracy: 0.6800, Val Loss: 0.7447, Val Accuracy: 0.7244\n","===== Epoch 1742/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8851. Train Loss: 0.7874, Train Accuracy: 0.6690, Val Loss: 0.7828, Val Accuracy: 0.6889\n","===== Epoch 1743/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8851. Train Loss: 0.8007, Train Accuracy: 0.6580, Val Loss: 0.7574, Val Accuracy: 0.7111\n","===== Epoch 1744/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8851. Train Loss: 0.7742, Train Accuracy: 0.6933, Val Loss: 0.7546, Val Accuracy: 0.7244\n","===== Epoch 1745/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8851. Train Loss: 0.7767, Train Accuracy: 0.6847, Val Loss: 0.7668, Val Accuracy: 0.6933\n","===== Epoch 1746/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8851. Train Loss: 0.7963, Train Accuracy: 0.6596, Val Loss: 0.7552, Val Accuracy: 0.6889\n","===== Epoch 1747/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8851. Train Loss: 0.7717, Train Accuracy: 0.6941, Val Loss: 0.7679, Val Accuracy: 0.7067\n","===== Epoch 1748/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8851. Train Loss: 0.7715, Train Accuracy: 0.6996, Val Loss: 0.7681, Val Accuracy: 0.7200\n","===== Epoch 1749/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8851. Train Loss: 0.7920, Train Accuracy: 0.6776, Val Loss: 0.7218, Val Accuracy: 0.7067\n","===== Epoch 1750/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8851. Train Loss: 0.8039, Train Accuracy: 0.6627, Val Loss: 0.7551, Val Accuracy: 0.7022\n","===== Epoch 1751/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8851. Train Loss: 0.7913, Train Accuracy: 0.6729, Val Loss: 0.7476, Val Accuracy: 0.6978\n","===== Epoch 1752/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8851. Train Loss: 0.7915, Train Accuracy: 0.6659, Val Loss: 0.7617, Val Accuracy: 0.6800\n","===== Epoch 1753/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8851. Train Loss: 0.7890, Train Accuracy: 0.6816, Val Loss: 0.7556, Val Accuracy: 0.7156\n","===== Epoch 1754/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8851. Train Loss: 0.7892, Train Accuracy: 0.6557, Val Loss: 0.7536, Val Accuracy: 0.7022\n","===== Epoch 1755/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8851. Train Loss: 0.8108, Train Accuracy: 0.6439, Val Loss: 0.7517, Val Accuracy: 0.7200\n","===== Epoch 1756/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8851. Train Loss: 0.7847, Train Accuracy: 0.6831, Val Loss: 0.7534, Val Accuracy: 0.6978\n","===== Epoch 1757/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8851. Train Loss: 0.8010, Train Accuracy: 0.6392, Val Loss: 0.7728, Val Accuracy: 0.6756\n","===== Epoch 1758/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8851. Train Loss: 0.8012, Train Accuracy: 0.6635, Val Loss: 0.7442, Val Accuracy: 0.7378\n","===== Epoch 1759/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8851. Train Loss: 0.7861, Train Accuracy: 0.6706, Val Loss: 0.7752, Val Accuracy: 0.6711\n","===== Epoch 1760/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8851. Train Loss: 0.8010, Train Accuracy: 0.6620, Val Loss: 0.7520, Val Accuracy: 0.6933\n","===== Epoch 1761/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8851. Train Loss: 0.7915, Train Accuracy: 0.6596, Val Loss: 0.7683, Val Accuracy: 0.7111\n","===== Epoch 1762/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8851. Train Loss: 0.8049, Train Accuracy: 0.6533, Val Loss: 0.7881, Val Accuracy: 0.6711\n","===== Epoch 1763/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8851. Train Loss: 0.7914, Train Accuracy: 0.6737, Val Loss: 0.7725, Val Accuracy: 0.6889\n","===== Epoch 1764/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8851. Train Loss: 0.7993, Train Accuracy: 0.6643, Val Loss: 0.8583, Val Accuracy: 0.5956\n","===== Epoch 1765/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8851. Train Loss: 0.8228, Train Accuracy: 0.6384, Val Loss: 0.7468, Val Accuracy: 0.7156\n","===== Epoch 1766/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8851. Train Loss: 0.7774, Train Accuracy: 0.6949, Val Loss: 0.7789, Val Accuracy: 0.6756\n","===== Epoch 1767/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8851. Train Loss: 0.8108, Train Accuracy: 0.6400, Val Loss: 0.7691, Val Accuracy: 0.6711\n","===== Epoch 1768/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8851. Train Loss: 0.7907, Train Accuracy: 0.6824, Val Loss: 0.8223, Val Accuracy: 0.6089\n","===== Epoch 1769/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8851. Train Loss: 0.7942, Train Accuracy: 0.6722, Val Loss: 0.7433, Val Accuracy: 0.7333\n","===== Epoch 1770/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8851. Train Loss: 0.7977, Train Accuracy: 0.6761, Val Loss: 0.8172, Val Accuracy: 0.6800\n","===== Epoch 1771/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8851. Train Loss: 0.8057, Train Accuracy: 0.6533, Val Loss: 0.7646, Val Accuracy: 0.6978\n","===== Epoch 1772/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8851. Train Loss: 0.8042, Train Accuracy: 0.6675, Val Loss: 0.7791, Val Accuracy: 0.6756\n","===== Epoch 1773/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8851. Train Loss: 0.8130, Train Accuracy: 0.6502, Val Loss: 0.7777, Val Accuracy: 0.6711\n","===== Epoch 1774/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8851. Train Loss: 0.7892, Train Accuracy: 0.6643, Val Loss: 0.7539, Val Accuracy: 0.6978\n","===== Epoch 1775/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8851. Train Loss: 0.7937, Train Accuracy: 0.6565, Val Loss: 0.7962, Val Accuracy: 0.6622\n","===== Epoch 1776/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8851. Train Loss: 0.8204, Train Accuracy: 0.6486, Val Loss: 0.7699, Val Accuracy: 0.6844\n","===== Epoch 1777/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8851. Train Loss: 0.8098, Train Accuracy: 0.6541, Val Loss: 0.7624, Val Accuracy: 0.6844\n","===== Epoch 1778/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8851. Train Loss: 0.7931, Train Accuracy: 0.6745, Val Loss: 0.8054, Val Accuracy: 0.6711\n","===== Epoch 1779/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8851. Train Loss: 0.8026, Train Accuracy: 0.6651, Val Loss: 0.7442, Val Accuracy: 0.6933\n","===== Epoch 1780/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8851. Train Loss: 0.7897, Train Accuracy: 0.6698, Val Loss: 0.7820, Val Accuracy: 0.6667\n","===== Epoch 1781/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8851. Train Loss: 0.7924, Train Accuracy: 0.6635, Val Loss: 0.7513, Val Accuracy: 0.7067\n","===== Epoch 1782/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8851. Train Loss: 0.7968, Train Accuracy: 0.6722, Val Loss: 0.7322, Val Accuracy: 0.7422\n","===== Epoch 1783/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8851. Train Loss: 0.7946, Train Accuracy: 0.6839, Val Loss: 0.7844, Val Accuracy: 0.6800\n","===== Epoch 1784/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8851. Train Loss: 0.7960, Train Accuracy: 0.6620, Val Loss: 0.7545, Val Accuracy: 0.7156\n","===== Epoch 1785/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8851. Train Loss: 0.8089, Train Accuracy: 0.6549, Val Loss: 0.7498, Val Accuracy: 0.6889\n","===== Epoch 1786/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8851. Train Loss: 0.8039, Train Accuracy: 0.6557, Val Loss: 0.7349, Val Accuracy: 0.7156\n","===== Epoch 1787/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8851. Train Loss: 0.8040, Train Accuracy: 0.6690, Val Loss: 0.7397, Val Accuracy: 0.7467\n","===== Epoch 1788/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8851. Train Loss: 0.8011, Train Accuracy: 0.6549, Val Loss: 0.7774, Val Accuracy: 0.6800\n","===== Epoch 1789/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8851. Train Loss: 0.8105, Train Accuracy: 0.6627, Val Loss: 0.7445, Val Accuracy: 0.6933\n","===== Epoch 1790/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8851. Train Loss: 0.7988, Train Accuracy: 0.6502, Val Loss: 0.7740, Val Accuracy: 0.7244\n","===== Epoch 1791/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8851. Train Loss: 0.7987, Train Accuracy: 0.6682, Val Loss: 0.7482, Val Accuracy: 0.7156\n","===== Epoch 1792/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8851. Train Loss: 0.7952, Train Accuracy: 0.6698, Val Loss: 0.7744, Val Accuracy: 0.6978\n","===== Epoch 1793/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8851. Train Loss: 0.8032, Train Accuracy: 0.6533, Val Loss: 0.7614, Val Accuracy: 0.7156\n","===== Epoch 1794/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8851. Train Loss: 0.7896, Train Accuracy: 0.6737, Val Loss: 0.7602, Val Accuracy: 0.7022\n","===== Epoch 1795/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8851. Train Loss: 0.8199, Train Accuracy: 0.6541, Val Loss: 0.7581, Val Accuracy: 0.7022\n","===== Epoch 1796/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8851. Train Loss: 0.8098, Train Accuracy: 0.6627, Val Loss: 0.7444, Val Accuracy: 0.7378\n","===== Epoch 1797/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8851. Train Loss: 0.8043, Train Accuracy: 0.6541, Val Loss: 0.7480, Val Accuracy: 0.7333\n","===== Epoch 1798/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8851. Train Loss: 0.7885, Train Accuracy: 0.6604, Val Loss: 0.7712, Val Accuracy: 0.7156\n","===== Epoch 1799/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8851. Train Loss: 0.8064, Train Accuracy: 0.6573, Val Loss: 0.7846, Val Accuracy: 0.6089\n","===== Epoch 1800/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8851. Train Loss: 0.7972, Train Accuracy: 0.6690, Val Loss: 0.7408, Val Accuracy: 0.7289\n","===== Epoch 1801/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8851. Train Loss: 0.7940, Train Accuracy: 0.6737, Val Loss: 0.7951, Val Accuracy: 0.6578\n","===== Epoch 1802/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8851. Train Loss: 0.7980, Train Accuracy: 0.6722, Val Loss: 0.7688, Val Accuracy: 0.6844\n","===== Epoch 1803/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8851. Train Loss: 0.8069, Train Accuracy: 0.6667, Val Loss: 0.7442, Val Accuracy: 0.7200\n","===== Epoch 1804/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8851. Train Loss: 0.8009, Train Accuracy: 0.6635, Val Loss: 0.7624, Val Accuracy: 0.7289\n","===== Epoch 1805/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8851. Train Loss: 0.8040, Train Accuracy: 0.6502, Val Loss: 0.7492, Val Accuracy: 0.7378\n","===== Epoch 1806/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8851. Train Loss: 0.7918, Train Accuracy: 0.6714, Val Loss: 0.7905, Val Accuracy: 0.6978\n","===== Epoch 1807/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8851. Train Loss: 0.8015, Train Accuracy: 0.6690, Val Loss: 0.7514, Val Accuracy: 0.6889\n","===== Epoch 1808/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8851. Train Loss: 0.7884, Train Accuracy: 0.6627, Val Loss: 0.7651, Val Accuracy: 0.6533\n","===== Epoch 1809/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8851. Train Loss: 0.7866, Train Accuracy: 0.6729, Val Loss: 0.7363, Val Accuracy: 0.6933\n","===== Epoch 1810/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8851. Train Loss: 0.8011, Train Accuracy: 0.6604, Val Loss: 0.7259, Val Accuracy: 0.7200\n","===== Epoch 1811/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8851. Train Loss: 0.7827, Train Accuracy: 0.6784, Val Loss: 0.7561, Val Accuracy: 0.7022\n","===== Epoch 1812/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8851. Train Loss: 0.7818, Train Accuracy: 0.6714, Val Loss: 0.7642, Val Accuracy: 0.6711\n","===== Epoch 1813/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8851. Train Loss: 0.7828, Train Accuracy: 0.6698, Val Loss: 0.7260, Val Accuracy: 0.7156\n","===== Epoch 1814/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8851. Train Loss: 0.7798, Train Accuracy: 0.6784, Val Loss: 0.8096, Val Accuracy: 0.6356\n","===== Epoch 1815/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8851. Train Loss: 0.7813, Train Accuracy: 0.6918, Val Loss: 0.7437, Val Accuracy: 0.6933\n","===== Epoch 1816/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8851. Train Loss: 0.7839, Train Accuracy: 0.6816, Val Loss: 0.7424, Val Accuracy: 0.6933\n","===== Epoch 1817/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8851. Train Loss: 0.7822, Train Accuracy: 0.6839, Val Loss: 0.7840, Val Accuracy: 0.6889\n","===== Epoch 1818/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8851. Train Loss: 0.7933, Train Accuracy: 0.6847, Val Loss: 0.7382, Val Accuracy: 0.7156\n","===== Epoch 1819/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8851. Train Loss: 0.7764, Train Accuracy: 0.6769, Val Loss: 0.7279, Val Accuracy: 0.7244\n","===== Epoch 1820/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8851. Train Loss: 0.7700, Train Accuracy: 0.6996, Val Loss: 0.7350, Val Accuracy: 0.7244\n","===== Epoch 1821/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8851. Train Loss: 0.7710, Train Accuracy: 0.6878, Val Loss: 0.7404, Val Accuracy: 0.7156\n","===== Epoch 1822/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8851. Train Loss: 0.7864, Train Accuracy: 0.6667, Val Loss: 0.7197, Val Accuracy: 0.7289\n","===== Epoch 1823/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8851. Train Loss: 0.7902, Train Accuracy: 0.6533, Val Loss: 0.7451, Val Accuracy: 0.6978\n","===== Epoch 1824/2000 =====\n","New best model saved with Val ROC AUC: 0.8853, Train Loss: 0.7825, Train Accuracy: 0.6800, Val Loss: 0.7099, Val Accuracy: 0.7733\n","===== Epoch 1825/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8853. Train Loss: 0.7737, Train Accuracy: 0.6863, Val Loss: 0.7594, Val Accuracy: 0.7022\n","===== Epoch 1826/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8853. Train Loss: 0.7838, Train Accuracy: 0.6894, Val Loss: 0.7417, Val Accuracy: 0.7067\n","===== Epoch 1827/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8853. Train Loss: 0.7683, Train Accuracy: 0.6996, Val Loss: 0.7290, Val Accuracy: 0.7378\n","===== Epoch 1828/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8853. Train Loss: 0.7866, Train Accuracy: 0.6722, Val Loss: 0.7564, Val Accuracy: 0.6756\n","===== Epoch 1829/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8853. Train Loss: 0.7731, Train Accuracy: 0.6753, Val Loss: 0.7664, Val Accuracy: 0.6756\n","===== Epoch 1830/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8853. Train Loss: 0.7678, Train Accuracy: 0.6996, Val Loss: 0.7751, Val Accuracy: 0.6711\n","===== Epoch 1831/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8853. Train Loss: 0.7845, Train Accuracy: 0.6682, Val Loss: 0.7134, Val Accuracy: 0.7244\n","===== Epoch 1832/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8853. Train Loss: 0.7809, Train Accuracy: 0.6784, Val Loss: 0.7283, Val Accuracy: 0.7422\n","===== Epoch 1833/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8853. Train Loss: 0.7767, Train Accuracy: 0.6714, Val Loss: 0.7513, Val Accuracy: 0.7022\n","===== Epoch 1834/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8853. Train Loss: 0.7859, Train Accuracy: 0.6784, Val Loss: 0.7554, Val Accuracy: 0.7111\n","===== Epoch 1835/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8853. Train Loss: 0.7740, Train Accuracy: 0.6878, Val Loss: 0.7414, Val Accuracy: 0.7289\n","===== Epoch 1836/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8853. Train Loss: 0.7736, Train Accuracy: 0.6816, Val Loss: 0.7467, Val Accuracy: 0.7200\n","===== Epoch 1837/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8853. Train Loss: 0.7769, Train Accuracy: 0.6988, Val Loss: 0.7243, Val Accuracy: 0.7511\n","===== Epoch 1838/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8853. Train Loss: 0.7781, Train Accuracy: 0.6918, Val Loss: 0.7367, Val Accuracy: 0.7289\n","===== Epoch 1839/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8853. Train Loss: 0.7779, Train Accuracy: 0.6831, Val Loss: 0.7510, Val Accuracy: 0.6933\n","===== Epoch 1840/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8853. Train Loss: 0.7668, Train Accuracy: 0.6894, Val Loss: 0.7576, Val Accuracy: 0.7200\n","===== Epoch 1841/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8853. Train Loss: 0.7650, Train Accuracy: 0.6965, Val Loss: 0.7278, Val Accuracy: 0.7422\n","===== Epoch 1842/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8853. Train Loss: 0.7547, Train Accuracy: 0.7169, Val Loss: 0.7164, Val Accuracy: 0.7600\n","===== Epoch 1843/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8853. Train Loss: 0.7813, Train Accuracy: 0.6878, Val Loss: 0.7432, Val Accuracy: 0.6756\n","===== Epoch 1844/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8853. Train Loss: 0.7823, Train Accuracy: 0.6776, Val Loss: 0.7498, Val Accuracy: 0.6978\n","===== Epoch 1845/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8853. Train Loss: 0.7768, Train Accuracy: 0.6910, Val Loss: 0.7841, Val Accuracy: 0.6533\n","===== Epoch 1846/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8853. Train Loss: 0.7815, Train Accuracy: 0.6831, Val Loss: 0.7558, Val Accuracy: 0.7111\n","===== Epoch 1847/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8853. Train Loss: 0.7853, Train Accuracy: 0.6855, Val Loss: 0.7510, Val Accuracy: 0.7067\n","===== Epoch 1848/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8853. Train Loss: 0.7700, Train Accuracy: 0.6871, Val Loss: 0.7395, Val Accuracy: 0.7244\n","===== Epoch 1849/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8853. Train Loss: 0.7794, Train Accuracy: 0.6675, Val Loss: 0.7642, Val Accuracy: 0.7244\n","===== Epoch 1850/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8853. Train Loss: 0.7710, Train Accuracy: 0.6949, Val Loss: 0.7469, Val Accuracy: 0.7289\n","===== Epoch 1851/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8853. Train Loss: 0.7664, Train Accuracy: 0.6996, Val Loss: 0.7726, Val Accuracy: 0.6978\n","===== Epoch 1852/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8853. Train Loss: 0.7860, Train Accuracy: 0.6800, Val Loss: 0.7444, Val Accuracy: 0.6889\n","===== Epoch 1853/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8853. Train Loss: 0.7701, Train Accuracy: 0.6824, Val Loss: 0.7322, Val Accuracy: 0.7467\n","===== Epoch 1854/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8853. Train Loss: 0.7640, Train Accuracy: 0.6918, Val Loss: 0.7377, Val Accuracy: 0.7467\n","===== Epoch 1855/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8853. Train Loss: 0.7724, Train Accuracy: 0.7027, Val Loss: 0.7715, Val Accuracy: 0.7111\n","===== Epoch 1856/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8853. Train Loss: 0.7706, Train Accuracy: 0.6816, Val Loss: 0.7562, Val Accuracy: 0.7200\n","===== Epoch 1857/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8853. Train Loss: 0.7880, Train Accuracy: 0.6824, Val Loss: 0.7471, Val Accuracy: 0.7289\n","===== Epoch 1858/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8853. Train Loss: 0.7822, Train Accuracy: 0.6792, Val Loss: 0.7264, Val Accuracy: 0.7244\n","===== Epoch 1859/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6776, Val Loss: 0.7646, Val Accuracy: 0.6711\n","===== Epoch 1860/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8853. Train Loss: 0.7861, Train Accuracy: 0.6635, Val Loss: 0.7527, Val Accuracy: 0.7244\n","===== Epoch 1861/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8853. Train Loss: 0.7685, Train Accuracy: 0.6761, Val Loss: 0.7448, Val Accuracy: 0.7067\n","===== Epoch 1862/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8853. Train Loss: 0.7982, Train Accuracy: 0.6729, Val Loss: 0.7592, Val Accuracy: 0.7022\n","===== Epoch 1863/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8853. Train Loss: 0.7663, Train Accuracy: 0.7059, Val Loss: 0.7345, Val Accuracy: 0.7200\n","===== Epoch 1864/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8853. Train Loss: 0.7863, Train Accuracy: 0.6651, Val Loss: 0.7591, Val Accuracy: 0.7111\n","===== Epoch 1865/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8853. Train Loss: 0.7843, Train Accuracy: 0.6682, Val Loss: 0.7474, Val Accuracy: 0.7200\n","===== Epoch 1866/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8853. Train Loss: 0.7715, Train Accuracy: 0.6871, Val Loss: 0.7278, Val Accuracy: 0.7289\n","===== Epoch 1867/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8853. Train Loss: 0.7796, Train Accuracy: 0.6910, Val Loss: 0.7658, Val Accuracy: 0.7200\n","===== Epoch 1868/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8853. Train Loss: 0.7690, Train Accuracy: 0.6894, Val Loss: 0.7582, Val Accuracy: 0.6756\n","===== Epoch 1869/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8853. Train Loss: 0.7888, Train Accuracy: 0.6706, Val Loss: 0.7345, Val Accuracy: 0.7244\n","===== Epoch 1870/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8853. Train Loss: 0.7806, Train Accuracy: 0.6722, Val Loss: 0.7582, Val Accuracy: 0.6844\n","===== Epoch 1871/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6910, Val Loss: 0.7805, Val Accuracy: 0.6889\n","===== Epoch 1872/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8853. Train Loss: 0.7834, Train Accuracy: 0.6776, Val Loss: 0.7497, Val Accuracy: 0.7156\n","===== Epoch 1873/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6753, Val Loss: 0.7530, Val Accuracy: 0.7067\n","===== Epoch 1874/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8853. Train Loss: 0.7943, Train Accuracy: 0.6714, Val Loss: 0.7369, Val Accuracy: 0.7289\n","===== Epoch 1875/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8853. Train Loss: 0.7985, Train Accuracy: 0.6651, Val Loss: 0.7323, Val Accuracy: 0.7067\n","===== Epoch 1876/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8853. Train Loss: 0.7889, Train Accuracy: 0.6729, Val Loss: 0.8122, Val Accuracy: 0.6044\n","===== Epoch 1877/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8853. Train Loss: 0.8085, Train Accuracy: 0.6573, Val Loss: 0.7454, Val Accuracy: 0.7111\n","===== Epoch 1878/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8853. Train Loss: 0.7751, Train Accuracy: 0.6792, Val Loss: 0.7407, Val Accuracy: 0.7378\n","===== Epoch 1879/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8853. Train Loss: 0.8014, Train Accuracy: 0.6635, Val Loss: 0.7886, Val Accuracy: 0.6444\n","===== Epoch 1880/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8853. Train Loss: 0.7827, Train Accuracy: 0.6776, Val Loss: 0.7296, Val Accuracy: 0.7200\n","===== Epoch 1881/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8853. Train Loss: 0.7985, Train Accuracy: 0.6831, Val Loss: 0.7886, Val Accuracy: 0.6533\n","===== Epoch 1882/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8853. Train Loss: 0.8038, Train Accuracy: 0.6643, Val Loss: 0.7169, Val Accuracy: 0.7111\n","===== Epoch 1883/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8853. Train Loss: 0.7862, Train Accuracy: 0.6698, Val Loss: 0.7581, Val Accuracy: 0.6889\n","===== Epoch 1884/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8853. Train Loss: 0.7802, Train Accuracy: 0.6863, Val Loss: 0.7594, Val Accuracy: 0.6933\n","===== Epoch 1885/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8853. Train Loss: 0.8190, Train Accuracy: 0.6447, Val Loss: 0.7742, Val Accuracy: 0.6711\n","===== Epoch 1886/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8853. Train Loss: 0.7921, Train Accuracy: 0.6588, Val Loss: 0.7335, Val Accuracy: 0.7289\n","===== Epoch 1887/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8853. Train Loss: 0.7963, Train Accuracy: 0.6604, Val Loss: 0.7433, Val Accuracy: 0.7022\n","===== Epoch 1888/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8853. Train Loss: 0.7958, Train Accuracy: 0.6596, Val Loss: 0.7448, Val Accuracy: 0.7111\n","===== Epoch 1889/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8853. Train Loss: 0.7908, Train Accuracy: 0.6737, Val Loss: 0.7679, Val Accuracy: 0.7244\n","===== Epoch 1890/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8853. Train Loss: 0.7929, Train Accuracy: 0.6729, Val Loss: 0.7750, Val Accuracy: 0.7067\n","===== Epoch 1891/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8853. Train Loss: 0.8141, Train Accuracy: 0.6408, Val Loss: 0.7525, Val Accuracy: 0.7111\n","===== Epoch 1892/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8853. Train Loss: 0.8086, Train Accuracy: 0.6494, Val Loss: 0.7640, Val Accuracy: 0.7156\n","===== Epoch 1893/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8853. Train Loss: 0.7877, Train Accuracy: 0.6533, Val Loss: 0.7319, Val Accuracy: 0.7067\n","===== Epoch 1894/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8853. Train Loss: 0.7793, Train Accuracy: 0.6988, Val Loss: 0.7278, Val Accuracy: 0.7067\n","===== Epoch 1895/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8853. Train Loss: 0.7846, Train Accuracy: 0.6651, Val Loss: 0.8018, Val Accuracy: 0.6222\n","===== Epoch 1896/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8853. Train Loss: 0.8248, Train Accuracy: 0.6627, Val Loss: 0.8082, Val Accuracy: 0.6756\n","===== Epoch 1897/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8853. Train Loss: 0.7732, Train Accuracy: 0.6816, Val Loss: 0.7445, Val Accuracy: 0.6800\n","===== Epoch 1898/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8853. Train Loss: 0.7964, Train Accuracy: 0.6667, Val Loss: 0.7432, Val Accuracy: 0.7333\n","===== Epoch 1899/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8853. Train Loss: 0.8010, Train Accuracy: 0.6698, Val Loss: 0.7557, Val Accuracy: 0.7556\n","===== Epoch 1900/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8853. Train Loss: 0.7795, Train Accuracy: 0.6776, Val Loss: 0.7695, Val Accuracy: 0.6711\n","===== Epoch 1901/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8853. Train Loss: 0.7728, Train Accuracy: 0.6800, Val Loss: 0.7494, Val Accuracy: 0.6889\n","===== Epoch 1902/2000 =====\n","New best model saved with Val ROC AUC: 0.8904, Train Loss: 0.7732, Train Accuracy: 0.6910, Val Loss: 0.7104, Val Accuracy: 0.7378\n","===== Epoch 1903/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8904. Train Loss: 0.7754, Train Accuracy: 0.6918, Val Loss: 0.8251, Val Accuracy: 0.6489\n","===== Epoch 1904/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8904. Train Loss: 0.7941, Train Accuracy: 0.6776, Val Loss: 0.7909, Val Accuracy: 0.6978\n","===== Epoch 1905/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8904. Train Loss: 0.7875, Train Accuracy: 0.6776, Val Loss: 0.7425, Val Accuracy: 0.6844\n","===== Epoch 1906/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8904. Train Loss: 0.7741, Train Accuracy: 0.6855, Val Loss: 0.7430, Val Accuracy: 0.7022\n","===== Epoch 1907/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8904. Train Loss: 0.7779, Train Accuracy: 0.6753, Val Loss: 0.7235, Val Accuracy: 0.7467\n","===== Epoch 1908/2000 =====\n","New best model saved with Val ROC AUC: 0.8908, Train Loss: 0.7871, Train Accuracy: 0.6596, Val Loss: 0.7074, Val Accuracy: 0.7600\n","===== Epoch 1909/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8908. Train Loss: 0.7692, Train Accuracy: 0.6831, Val Loss: 0.8017, Val Accuracy: 0.6844\n","===== Epoch 1910/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8908. Train Loss: 0.7939, Train Accuracy: 0.6831, Val Loss: 0.7449, Val Accuracy: 0.7378\n","===== Epoch 1911/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8908. Train Loss: 0.7904, Train Accuracy: 0.6714, Val Loss: 0.7579, Val Accuracy: 0.6889\n","===== Epoch 1912/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8908. Train Loss: 0.7698, Train Accuracy: 0.6910, Val Loss: 0.7425, Val Accuracy: 0.6978\n","===== Epoch 1913/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8908. Train Loss: 0.7714, Train Accuracy: 0.7004, Val Loss: 0.7805, Val Accuracy: 0.6844\n","===== Epoch 1914/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8908. Train Loss: 0.7760, Train Accuracy: 0.6761, Val Loss: 0.7542, Val Accuracy: 0.6756\n","===== Epoch 1915/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8908. Train Loss: 0.7749, Train Accuracy: 0.6745, Val Loss: 0.7446, Val Accuracy: 0.7022\n","===== Epoch 1916/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8908. Train Loss: 0.7597, Train Accuracy: 0.6980, Val Loss: 0.7383, Val Accuracy: 0.7378\n","===== Epoch 1917/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8908. Train Loss: 0.7739, Train Accuracy: 0.6792, Val Loss: 0.7245, Val Accuracy: 0.7333\n","===== Epoch 1918/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8908. Train Loss: 0.7762, Train Accuracy: 0.6761, Val Loss: 0.7231, Val Accuracy: 0.7378\n","===== Epoch 1919/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8908. Train Loss: 0.7613, Train Accuracy: 0.6855, Val Loss: 0.7679, Val Accuracy: 0.6800\n","===== Epoch 1920/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8908. Train Loss: 0.7622, Train Accuracy: 0.6933, Val Loss: 0.7371, Val Accuracy: 0.6978\n","===== Epoch 1921/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8908. Train Loss: 0.7629, Train Accuracy: 0.6973, Val Loss: 0.7294, Val Accuracy: 0.7244\n","===== Epoch 1922/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8908. Train Loss: 0.7567, Train Accuracy: 0.7020, Val Loss: 0.7225, Val Accuracy: 0.7156\n","===== Epoch 1923/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8908. Train Loss: 0.7605, Train Accuracy: 0.7075, Val Loss: 0.7289, Val Accuracy: 0.7378\n","===== Epoch 1924/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8908. Train Loss: 0.7677, Train Accuracy: 0.6871, Val Loss: 0.7348, Val Accuracy: 0.7200\n","===== Epoch 1925/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8908. Train Loss: 0.7790, Train Accuracy: 0.6761, Val Loss: 0.7453, Val Accuracy: 0.7022\n","===== Epoch 1926/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8908. Train Loss: 0.7634, Train Accuracy: 0.6863, Val Loss: 0.7275, Val Accuracy: 0.7111\n","===== Epoch 1927/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8908. Train Loss: 0.7709, Train Accuracy: 0.6816, Val Loss: 0.7235, Val Accuracy: 0.7556\n","===== Epoch 1928/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8908. Train Loss: 0.7695, Train Accuracy: 0.6988, Val Loss: 0.7559, Val Accuracy: 0.6978\n","===== Epoch 1929/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8908. Train Loss: 0.7674, Train Accuracy: 0.6933, Val Loss: 0.7363, Val Accuracy: 0.6978\n","===== Epoch 1930/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8908. Train Loss: 0.7611, Train Accuracy: 0.6776, Val Loss: 0.7476, Val Accuracy: 0.6978\n","===== Epoch 1931/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8908. Train Loss: 0.7690, Train Accuracy: 0.6878, Val Loss: 0.7259, Val Accuracy: 0.7156\n","===== Epoch 1932/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8908. Train Loss: 0.7645, Train Accuracy: 0.7004, Val Loss: 0.7226, Val Accuracy: 0.7333\n","===== Epoch 1933/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8908. Train Loss: 0.7609, Train Accuracy: 0.7098, Val Loss: 0.7506, Val Accuracy: 0.7022\n","===== Epoch 1934/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8908. Train Loss: 0.7694, Train Accuracy: 0.6949, Val Loss: 0.7362, Val Accuracy: 0.7289\n","===== Epoch 1935/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8908. Train Loss: 0.7598, Train Accuracy: 0.6941, Val Loss: 0.7469, Val Accuracy: 0.7244\n","===== Epoch 1936/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8908. Train Loss: 0.7545, Train Accuracy: 0.7114, Val Loss: 0.7252, Val Accuracy: 0.7244\n","===== Epoch 1937/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8908. Train Loss: 0.7644, Train Accuracy: 0.7012, Val Loss: 0.7196, Val Accuracy: 0.7556\n","===== Epoch 1938/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8908. Train Loss: 0.7665, Train Accuracy: 0.6847, Val Loss: 0.7609, Val Accuracy: 0.6667\n","===== Epoch 1939/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8908. Train Loss: 0.7756, Train Accuracy: 0.6965, Val Loss: 0.7255, Val Accuracy: 0.7200\n","===== Epoch 1940/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8908. Train Loss: 0.7642, Train Accuracy: 0.6996, Val Loss: 0.7512, Val Accuracy: 0.7244\n","===== Epoch 1941/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8908. Train Loss: 0.7681, Train Accuracy: 0.6910, Val Loss: 0.7172, Val Accuracy: 0.7333\n","===== Epoch 1942/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8908. Train Loss: 0.7637, Train Accuracy: 0.6988, Val Loss: 0.7343, Val Accuracy: 0.7422\n","===== Epoch 1943/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8908. Train Loss: 0.7580, Train Accuracy: 0.6831, Val Loss: 0.7345, Val Accuracy: 0.6889\n","===== Epoch 1944/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8908. Train Loss: 0.7623, Train Accuracy: 0.6980, Val Loss: 0.7300, Val Accuracy: 0.7022\n","===== Epoch 1945/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8908. Train Loss: 0.7671, Train Accuracy: 0.6988, Val Loss: 0.7183, Val Accuracy: 0.7289\n","===== Epoch 1946/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8908. Train Loss: 0.7533, Train Accuracy: 0.7067, Val Loss: 0.7361, Val Accuracy: 0.7067\n","===== Epoch 1947/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8908. Train Loss: 0.7764, Train Accuracy: 0.6792, Val Loss: 0.7262, Val Accuracy: 0.7600\n","===== Epoch 1948/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8908. Train Loss: 0.7710, Train Accuracy: 0.6902, Val Loss: 0.7443, Val Accuracy: 0.7111\n","===== Epoch 1949/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8908. Train Loss: 0.7564, Train Accuracy: 0.7012, Val Loss: 0.7458, Val Accuracy: 0.7289\n","===== Epoch 1950/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8908. Train Loss: 0.7716, Train Accuracy: 0.7090, Val Loss: 0.7372, Val Accuracy: 0.7067\n","===== Epoch 1951/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8908. Train Loss: 0.7699, Train Accuracy: 0.7043, Val Loss: 0.7432, Val Accuracy: 0.6844\n","===== Epoch 1952/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8908. Train Loss: 0.7515, Train Accuracy: 0.7145, Val Loss: 0.7354, Val Accuracy: 0.7244\n","===== Epoch 1953/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8908. Train Loss: 0.7750, Train Accuracy: 0.6886, Val Loss: 0.7231, Val Accuracy: 0.7422\n","===== Epoch 1954/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8908. Train Loss: 0.7725, Train Accuracy: 0.6831, Val Loss: 0.7160, Val Accuracy: 0.7378\n","===== Epoch 1955/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8908. Train Loss: 0.7726, Train Accuracy: 0.6925, Val Loss: 0.7513, Val Accuracy: 0.7022\n","===== Epoch 1956/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8908. Train Loss: 0.7771, Train Accuracy: 0.6949, Val Loss: 0.7283, Val Accuracy: 0.7333\n","===== Epoch 1957/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8908. Train Loss: 0.7673, Train Accuracy: 0.7035, Val Loss: 0.7519, Val Accuracy: 0.6933\n","===== Epoch 1958/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8908. Train Loss: 0.7747, Train Accuracy: 0.6855, Val Loss: 0.7533, Val Accuracy: 0.6800\n","===== Epoch 1959/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8908. Train Loss: 0.7618, Train Accuracy: 0.6902, Val Loss: 0.7344, Val Accuracy: 0.7289\n","===== Epoch 1960/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8908. Train Loss: 0.7605, Train Accuracy: 0.6965, Val Loss: 0.7319, Val Accuracy: 0.7378\n","===== Epoch 1961/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8908. Train Loss: 0.7649, Train Accuracy: 0.6902, Val Loss: 0.7216, Val Accuracy: 0.7378\n","===== Epoch 1962/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8908. Train Loss: 0.7543, Train Accuracy: 0.6957, Val Loss: 0.7416, Val Accuracy: 0.7200\n","===== Epoch 1963/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8908. Train Loss: 0.7674, Train Accuracy: 0.6863, Val Loss: 0.7668, Val Accuracy: 0.6889\n","===== Epoch 1964/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8908. Train Loss: 0.7789, Train Accuracy: 0.6667, Val Loss: 0.7815, Val Accuracy: 0.6622\n","===== Epoch 1965/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8908. Train Loss: 0.7481, Train Accuracy: 0.7043, Val Loss: 0.7885, Val Accuracy: 0.6667\n","===== Epoch 1966/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8908. Train Loss: 0.7884, Train Accuracy: 0.6753, Val Loss: 0.7476, Val Accuracy: 0.7111\n","===== Epoch 1967/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8908. Train Loss: 0.7727, Train Accuracy: 0.6800, Val Loss: 0.7296, Val Accuracy: 0.7244\n","===== Epoch 1968/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8908. Train Loss: 0.7770, Train Accuracy: 0.6949, Val Loss: 0.7387, Val Accuracy: 0.7022\n","===== Epoch 1969/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8908. Train Loss: 0.7818, Train Accuracy: 0.6894, Val Loss: 0.7608, Val Accuracy: 0.7111\n","===== Epoch 1970/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8908. Train Loss: 0.7833, Train Accuracy: 0.6706, Val Loss: 0.7417, Val Accuracy: 0.7467\n","===== Epoch 1971/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8908. Train Loss: 0.7847, Train Accuracy: 0.6635, Val Loss: 0.7969, Val Accuracy: 0.6800\n","===== Epoch 1972/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8908. Train Loss: 0.7844, Train Accuracy: 0.6886, Val Loss: 0.7791, Val Accuracy: 0.6578\n","===== Epoch 1973/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8908. Train Loss: 0.7824, Train Accuracy: 0.6839, Val Loss: 0.7399, Val Accuracy: 0.7156\n","===== Epoch 1974/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8908. Train Loss: 0.7761, Train Accuracy: 0.6816, Val Loss: 0.7234, Val Accuracy: 0.7156\n","===== Epoch 1975/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8908. Train Loss: 0.7682, Train Accuracy: 0.6973, Val Loss: 0.7368, Val Accuracy: 0.6933\n","===== Epoch 1976/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8908. Train Loss: 0.7806, Train Accuracy: 0.6808, Val Loss: 0.7264, Val Accuracy: 0.7067\n","===== Epoch 1977/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8908. Train Loss: 0.7929, Train Accuracy: 0.6745, Val Loss: 0.7442, Val Accuracy: 0.7378\n","===== Epoch 1978/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8908. Train Loss: 0.7622, Train Accuracy: 0.7012, Val Loss: 0.7367, Val Accuracy: 0.7022\n","===== Epoch 1979/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8908. Train Loss: 0.7916, Train Accuracy: 0.6776, Val Loss: 0.7520, Val Accuracy: 0.6978\n","===== Epoch 1980/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8908. Train Loss: 0.7907, Train Accuracy: 0.6612, Val Loss: 0.7262, Val Accuracy: 0.7511\n","===== Epoch 1981/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8908. Train Loss: 0.7765, Train Accuracy: 0.6839, Val Loss: 0.7422, Val Accuracy: 0.6933\n","===== Epoch 1982/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8908. Train Loss: 0.7806, Train Accuracy: 0.6855, Val Loss: 0.7403, Val Accuracy: 0.6800\n","===== Epoch 1983/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8908. Train Loss: 0.7733, Train Accuracy: 0.6776, Val Loss: 0.7372, Val Accuracy: 0.7200\n","===== Epoch 1984/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8908. Train Loss: 0.7940, Train Accuracy: 0.6761, Val Loss: 0.7977, Val Accuracy: 0.6711\n","===== Epoch 1985/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8908. Train Loss: 0.7702, Train Accuracy: 0.6894, Val Loss: 0.7651, Val Accuracy: 0.6756\n","===== Epoch 1986/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8908. Train Loss: 0.7696, Train Accuracy: 0.6886, Val Loss: 0.7153, Val Accuracy: 0.7556\n","===== Epoch 1987/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8908. Train Loss: 0.7984, Train Accuracy: 0.6776, Val Loss: 0.7581, Val Accuracy: 0.7111\n","===== Epoch 1988/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8908. Train Loss: 0.8009, Train Accuracy: 0.6573, Val Loss: 0.7134, Val Accuracy: 0.7644\n","===== Epoch 1989/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8908. Train Loss: 0.7776, Train Accuracy: 0.6980, Val Loss: 0.7474, Val Accuracy: 0.6933\n","===== Epoch 1990/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8908. Train Loss: 0.7749, Train Accuracy: 0.6808, Val Loss: 0.7450, Val Accuracy: 0.6978\n","===== Epoch 1991/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8908. Train Loss: 0.7804, Train Accuracy: 0.6839, Val Loss: 0.7220, Val Accuracy: 0.6978\n","===== Epoch 1992/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8908. Train Loss: 0.7885, Train Accuracy: 0.6659, Val Loss: 0.7398, Val Accuracy: 0.7156\n","===== Epoch 1993/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8908. Train Loss: 0.7748, Train Accuracy: 0.6800, Val Loss: 0.7598, Val Accuracy: 0.6800\n","===== Epoch 1994/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8908. Train Loss: 0.7617, Train Accuracy: 0.6973, Val Loss: 0.7549, Val Accuracy: 0.7067\n","===== Epoch 1995/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8908. Train Loss: 0.7821, Train Accuracy: 0.6690, Val Loss: 0.7602, Val Accuracy: 0.6978\n","===== Epoch 1996/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8908. Train Loss: 0.7856, Train Accuracy: 0.6698, Val Loss: 0.7234, Val Accuracy: 0.7467\n","===== Epoch 1997/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8908. Train Loss: 0.7681, Train Accuracy: 0.6824, Val Loss: 0.8035, Val Accuracy: 0.6667\n","===== Epoch 1998/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8908. Train Loss: 0.7755, Train Accuracy: 0.6816, Val Loss: 0.7754, Val Accuracy: 0.6844\n","===== Epoch 1999/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8908. Train Loss: 0.7888, Train Accuracy: 0.6690, Val Loss: 0.7423, Val Accuracy: 0.7156\n","===== Epoch 2000/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8908. Train Loss: 0.7923, Train Accuracy: 0.6518, Val Loss: 0.7454, Val Accuracy: 0.7156\n","\n","Training Complete!\n","\n","ROC curve plot saved as roc_curve.png\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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REREucTLly9RokQJk52vwCVZdnZ2AFQPpL29vcjREBERERGRWCIiIlCyZEl1jmAqBS7JSp4iaG9vzySLiIiIiIhMvoyIhS+IiIiIiIhMiEkWERERERGRCTHJIiIiIiIiMiEmWURERERERCbEJIuIiIiIiMiEmGQRERERERGZEJMsIiIiIiIiE2KSRUREREREZEJMsoiIiIiIiEyISRYREREREZEJMckiIiIiIiIyISZZREREREREJsQki4iIiIiIyISYZBEREREREZkQkywiIiIiIiITYpJFRERERERkQkyyiIiIiIiITIhJFhERERERkQkxySIiIiIiIjIhJllEREREREQmxCSLiIiIiIjIhJhkERERERERmZCoSdaff/6Jzp07o1ixYpBIJNi/f7/ePmfOnEGdOnVgYWGB8uXLY9OmTdkeJxERERERkaHMxLzz6Oho1KxZE0OGDEG3bt30Hv/06VN07NgRI0aMwPbt23Hy5El8/vnncHNzQ7t27XIgYiIiIspQhwDttq4VAd+aGfcLDAZm/qXdPrcp4Fk0477rbgD7H2i3H/HOuB8A+B4DXkRottUpCnzbNON+72KAAb9rtw+rCXSrmHHfo0+B5YHa7WvaAmUcMu777UXg3CvNtsJWwLZOGfcDgG77gdhEzba27sAEz4z73XkPfHlau31aA6BZyYz7br0N7Lij3b6nK2BjnnHfCaeAex802yoVBpa21GjavPk6duy4ldKgUALX3+JAnZKwlKUaT+hTBehfVaPvmDGH8eBBaEpDWByqvo3FksppnnOLWwBViqivRkTEw9s7zXP9eTgGWFigb7FU/4dW5sC+rhqHnT79FAsXntfse/MdfiznjE9sLVLampQApjfUOOyHHy7g+PEnKQ2xibB7EIY9tdP8P4zzBNq7azT17r0XoaGxKQ0h0Wgeo8S0ckU0+27pCDhbq68+eRKGkSPTPNcfhuHLwrZoW8Q2pa2UPbBO8/N4QMBtrF9/TbPvP8HYUbM4CstTpSE63iOmTj2Ba9eCUxoi4uH+Ohprq7ppni/Ne4RCocSnn+7QPOZVJHpIZBhW0kmz3ZD3iEwSNcnq0KEDOnToYPDxa9euhbu7OxYvXgwAqFy5Ms6dO4elS5cyySIiIsoNAkO02/QlSQAQEa+7b0S8/r6vInT3NcTtD8D9UM02W7n+folK3ff5v2j9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ZcuWidTUVPHHH38IIYQIDw8XQ4cOlepfuHBBmJqaiqlTp4r09HSxZs0aYWhoKGJjY/Xqt8ElWUIIsXr1amFvby/kcrno2LGj+Omnn6TXunXrJkJCQnTqb9++XTg7Owu5XC5efPFFsX///lqOmOorfcaag4ODAFDuERERUfuBU72j7+fa/ZhkkT70HWtHjx4VPj4+wsTERDg6Oor58+eL0tLSWo6a6iN9xlpJSYmYM2eOcHJyEgqFQtjZ2YmxY8eKmzdv1n7gVK8cOnSowu9fZeMrJCREdOvWrdwx7dq1E3K5XDg6Ooovv/xS734NhOAcKxERERERUU1pUNdkERERERER1TUmWURERERERDWISRYREREREVENYpJFRERERERUg5hkERERERER1SAmWURERERERDWISRYREREREVENYpJFRERERERUg5hkERFRtURFReG5556r6zCqzcDAALt3766yzjvvvIM+ffrUSjxERNRwMMkiInqGvfPOOzAwMCj3OHfuXF2HhqioKCkemUyGFi1aYPjw4bh27VqNtH/58mW8/vrrAIDs7GwYGBggLS1Np87KlSsRFRVVI/1VZs6cOdJ5Ghoaws7ODqNHj8bff/+tVztMCImInh5GdR0AERHVrYCAAHz55Zc6Zc2bN6+jaHSZm5sjIyMDWq0WJ0+exPDhw/HXX38hLi7usdu2trZ+aJ3GjRs/dj+P4sUXX0RCQgI0Gg3S09MxYsQI5OXlISYmplb6JyKimsWZLCKiZ5yJiQmsra11HoaGhli2bBnc3NxgZmYGOzs7jB07Fnfu3Km0nZMnT6J79+5QqVQwNzeHl5cXfvnlF+n1I0eOoGvXrlAqlbCzs8OECROQn59fZWwGBgawtraGWq3G66+/jgkTJiAhIQEFBQXQarX4+OOP0aJFC5iYmKBdu3aIjY2Vji0uLkZoaChsbGygUCjg4OCABQsW6LRdtlzw+eefBwC0b98eBgYGeOWVVwDozg6tX78earUaWq1WJ8agoCCMGDFCer5nzx54enpCoVDA0dERc+fORWlpaZXnaWRkBGtra9ja2sLPzw8DBgxAfHy89LpGo8HIkSPx/PPPQ6lUwsXFBStXrpRenzNnDr766ivs2bNHmhVLTEwEAFy8eBHBwcF47rnnYGFhgaCgIGRnZ1cZDxERPR4mWUREVCGZTIZVq1bh999/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\n"},"metadata":{}}],"source":["\"\"\"\n","Args:\n"," image_size (int): Size of the input image (e.g., 224).\n"," patch_size (int): Size of each patch (e.g., 16).\n"," in_channels (int): Number of input channels (e.g., 1 for your task).\n"," num_classes (int): Number of output classes (e.g., 3 for your task).\n"," embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n"," depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n"," num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n"," mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n"," dropout (float): Dropout probability.\n","\"\"\"\n","from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n","batch_size = 32\n","learning_rate = 1e-4\n","weight_decay = 0.05\n","num_epochs = 2000\n","warmup_epochs = 10\n","model = SwinTransformerForClassification(\n"," img_size=(150, 150),\n"," patch_size=(10, 10),\n"," in_chans=1,\n"," num_classes=3, # Same number of classes as the ViT example\n"," embed_dim=48,\n"," depths=[2, 2, 2, 2],\n"," num_heads=[3, 6, 12, 24],\n"," window_size=(5, 5),\n"," drop_path_rate=0.2,\n"," )\n","\n","\n","criterion = nn.CrossEntropyLoss(label_smoothing=0.1)\n","optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=0.05)\n","\n","\n","#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n","def warmup_lambda(current_epoch):\n"," if current_epoch < warmup_epochs:\n"," return float(current_epoch) / float(max(1, warmup_epochs))\n"," return 1.0\n","warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n","main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n","scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n","\n","\n","print(\"Optimizer: Adam\")\n","print(f\"Learning Rate: {learning_rate}\")\n","\n","# Train Model\n","model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)"]},{"cell_type":"markdown","source":["\"\"\" ROC Curve Plotting Function\"\"\"\n","def plot_roc_curve(all_preds, all_labels):\n"," print(\"Generating ROC Curve\")\n","\n"," # Convert predictions and labels to numpy arrays\n"," all_preds = np.array(all_preds)\n"," all_labels = np.array(all_labels)\n","\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," n_classes = 3\n","\n"," for i in range(n_classes):\n"," fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n","\n"," # Plot ROC curves\n"," plt.figure(figsize=(10, 8))\n"," colors = ['blue', 'red', 'green']\n"," class_names = ['Axion', 'CDM', 'No Substructure']\n","\n"," for i, color in zip(range(n_classes), colors):\n"," plt.plot(fpr[i], tpr[i], color=color,\n"," label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin.png')\n"," plt.close()\n","\n"," print(\"ROC Curve saved as roc_curve.png\")\n","\n","\n","plot_roc_curve(all_probs, all_labels)\n","\n","print(\"Training and Evaluation Complete!\")"],"metadata":{"id":"G_-lEQtu_txF"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"MZ59pFZa_txG"},"outputs":[],"source":[]}],"metadata":{"colab":{"provenance":[{"file_id":"1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf","timestamp":1756245539652},{"file_id":"1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28","timestamp":1756243482189}],"gpuType":"A100","machine_shape":"hm"},"kernelspec":{"display_name":"Python 3","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.11.2"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":0} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "X7Ekxmo1XV5I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 20693, + "status": "ok", + "timestamp": 1756365937140, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "_mFRKD8F__hl", + "outputId": "2a20cbd3-8d3c-45c9-cebf-e631c97bb519" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mounted at /content/drive\n" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vRM2kxST8KJZ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "\"\"\"Import dependencies\"\"\"\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import Dataset, DataLoader\n", + "from torchvision.models import resnet18\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9Dm6SC1o_txB" + }, + "outputs": [], + "source": [ + "\n", + "class MyDatasetViT(Dataset):\n", + " def __init__(self, data_dir, transform=None):\n", + " self.data = []\n", + " self.labels = []\n", + " self.class_names = ['axion', 'cdm', 'no_sub']\n", + " self.transform = transform\n", + "\n", + " print(f\"Loading dataset from: {data_dir}\")\n", + " print(f\"Looking for classes: {self.class_names}\")\n", + "\n", + " for idx, class_name in enumerate(self.class_names):\n", + " class_dir = os.path.join(data_dir, class_name)\n", + " print(f\"--- Processing class: {class_name} ---\")\n", + "\n", + " if not os.path.exists(class_dir):\n", + " print(f\"[ERROR] Directory not found: {class_dir}\")\n", + " continue\n", + "\n", + " files = os.listdir(class_dir)\n", + "\n", + " for file_name in files:\n", + " if file_name.endswith('.npy'):\n", + " file_path = os.path.join(class_dir, file_name)\n", + " loaded_data = np.load(file_path, allow_pickle=True)\n", + "\n", + " if class_name == 'axion':\n", + " image = loaded_data[0]\n", + " else:\n", + " image = loaded_data\n", + "\n", + " # [DEBUG] Print the shape of the raw numpy array\n", + " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", + "\n", + " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", + " if image.ndim != 2:\n", + " image = np.squeeze(image)\n", + "\n", + " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", + " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", + "\n", + " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", + " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", + "\n", + " self.data.append(image_tensor)\n", + " self.labels.append(idx)\n", + "\n", + " print(\"\\n--- Dataset Loading Complete ---\")\n", + " print(f\"Total images loaded: {len(self.data)}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " \"\"\"\n", + " This method is called by the DataLoader to get one item from the dataset.\n", + " The debug prints here are CRITICAL for finding the error.\n", + " \"\"\"\n", + " #print(f\"--- Getting item index: {idx} ---\")\n", + "\n", + " # Retrieve the pre-loaded tensor and its label\n", + " image = self.data[idx]\n", + " label = self.labels[idx]\n", + "\n", + " # [DEBUG] Print shape BEFORE the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", + "\n", + " # Apply transformations (e.g., resizing) if they are provided\n", + " if self.transform:\n", + " image = self.transform(image)\n", + " # [DEBUG] Print shape AFTER the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", + " else:\n", + " #print(\" [DEBUG] No transform was applied.\")\n", + " pass\n", + "\n", + " return image, label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 11, + "status": "ok", + "timestamp": 1756365948295, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "VJEgowwT_txC", + "outputId": "91ab4198-a7df-4316-fbbd-bf27059cd455" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n" + ] + } + ], + "source": [ + "\n", + "# Import the transforms module\n", + "from torchvision import transforms\n", + "# Hyperparameters\n", + "batch_size = 32\n", + "learning_rate = 0.001\n", + "num_epochs = 100\n", + "\n", + "# Data Directories\n", + "train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n", + "#val_dir = '../dataset/dataset/val'\n", + "\n", + "print(f\"Training Directory: {train_dir}\")\n", + "#print(f\"Validation Directory: {val_dir}\")\n", + "\n", + "vit_transforms = transforms.Compose([\n", + " # transforms.ToTensor(), # Removed ToTensor()\n", + " transforms.RandomHorizontalFlip(p=0.5),\n", + " transforms.RandomVerticalFlip(p=0.5),\n", + " transforms.RandomRotation(degrees=90), # Can be any angle range\n", + "])\n", + "\n", + "# Create Datasets and Dataloaders\n", + "#train_dataset = MyDataset(train_dir)\n", + "#val_dataset = MyDataset(val_dir)\n", + "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", + "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", + "\n", + "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", + "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", + "\n", + "#print(f\"Batch Size: {batch_size}\")\n", + "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", + "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", + "\n", + "#Save the dataloader so that we don't have to bear with this pain again\n", + "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", + "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gvqsjdgzKmOL" + }, + "outputs": [], + "source": [ + "#import data loaders from file\n", + "train_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_train_loader.pth', weights_only=False)\n", + "val_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_val_loader.pth', weights_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 3610, + "status": "ok", + "timestamp": 1756365957514, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "y6Q9I1Hw_txD", + "outputId": "5fcd5ffa-f86d-4bf0-ff57-cb2720b113d4" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n", + " warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n" + ] + } + ], + "source": [ + "\"\"\"\n", + "This implementation of the SWIN Transformer was adapted from the SWIN-UNet at\n", + "https://github.com/HuCaoFighting/Swin-Unet/blob/main/networks/swin_transformer_unet_skip_expand_decoder_sys.py\n", + "and modified for image classification tasks on specific input dimensions.\n", + "\"\"\"\n", + "\n", + "from dataclasses import dataclass, field\n", + "from typing import Optional, List, Literal, Union, Tuple\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.utils.checkpoint as checkpoint\n", + "from timm.layers import DropPath, trunc_normal_\n", + "\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\" Multi-Layer Perceptron \"\"\"\n", + " def __init__(\n", + " self,\n", + " in_features,\n", + " hidden_features=None,\n", + " out_features=None,\n", + " act_layer=nn.GELU,\n", + " drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " out_features = out_features or in_features\n", + " hidden_features = hidden_features or in_features\n", + " self.fc1 = nn.Linear(in_features, hidden_features)\n", + " self.act = act_layer()\n", + " self.fc2 = nn.Linear(hidden_features, out_features)\n", + " self.drop = nn.Dropout(drop)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.act(x)\n", + " x = self.drop(x)\n", + " x = self.fc2(x)\n", + " x = self.drop(x)\n", + " return x\n", + "\n", + "\n", + "def window_partition(x, window_size):\n", + " \"\"\"\n", + " Partitions the input tensor into non-overlapping windows.\n", + " Args:\n", + " x: (B, H, W, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + "\n", + " Returns:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " \"\"\"\n", + " B, H, W, C = x.shape\n", + " x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n", + " windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n", + " return windows\n", + "\n", + "\n", + "def window_reverse(windows, window_size, H, W):\n", + " \"\"\"\n", + " Reverses the window partitioning.\n", + " Args:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + " H (int): Height of image.\n", + " W (int): Width of image.\n", + "\n", + " Returns:\n", + " x: (B, H, W, C)\n", + " \"\"\"\n", + " B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n", + " x = windows.view(\n", + " B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n", + " )\n", + " x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n", + " return x\n", + "\n", + "\n", + "class WindowAttention(nn.Module):\n", + " r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n", + " It supports both shifted and non-shifted windows.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " window_size,\n", + " num_heads,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " attn_drop=0.0,\n", + " proj_drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.window_size = window_size\n", + " self.num_heads = num_heads\n", + " head_dim = dim // num_heads\n", + " self.scale = qk_scale or head_dim**-0.5\n", + "\n", + " # Define a parameter table of relative position bias\n", + " self.relative_position_bias_table = nn.Parameter(\n", + " torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n", + " )\n", + "\n", + " # Get pair-wise relative position index for each token inside the window\n", + " coords_h = torch.arange(self.window_size[0])\n", + " coords_w = torch.arange(self.window_size[1])\n", + " coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n", + " coords_flatten = torch.flatten(coords, 1)\n", + " relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n", + " relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n", + " relative_coords[:, :, 0] += self.window_size[0] - 1\n", + " relative_coords[:, :, 1] += self.window_size[1] - 1\n", + " relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n", + " relative_position_index = relative_coords.sum(-1)\n", + " self.register_buffer(\"relative_position_index\", relative_position_index)\n", + "\n", + " self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n", + " self.attn_drop = nn.Dropout(attn_drop)\n", + " self.proj = nn.Linear(dim, dim)\n", + " self.proj_drop = nn.Dropout(proj_drop)\n", + "\n", + " trunc_normal_(self.relative_position_bias_table, std=0.02)\n", + " self.softmax = nn.Softmax(dim=-1)\n", + "\n", + " def forward(self, x, mask=None):\n", + " B_, N, C = x.shape\n", + " qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n", + " q, k, v = qkv[0], qkv[1], qkv[2]\n", + "\n", + " q = q * self.scale\n", + " attn = q @ k.transpose(-2, -1)\n", + "\n", + " relative_position_bias = self.relative_position_bias_table[\n", + " self.relative_position_index.view(-1)\n", + " ].view(\n", + " self.window_size[0] * self.window_size[1],\n", + " self.window_size[0] * self.window_size[1],\n", + " -1,\n", + " )\n", + " relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n", + " attn = attn + relative_position_bias.unsqueeze(0)\n", + "\n", + " if mask is not None:\n", + " nW = mask.shape[0]\n", + " attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n", + " attn = attn.view(-1, self.num_heads, N, N)\n", + " attn = self.softmax(attn)\n", + " else:\n", + " attn = self.softmax(attn)\n", + "\n", + " attn = self.attn_drop(attn)\n", + "\n", + " x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n", + " x = self.proj(x)\n", + " x = self.proj_drop(x)\n", + " return x\n", + "\n", + "\n", + "class SwinTransformerBlock(nn.Module):\n", + " r\"\"\" Swin Transformer Block.\"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " num_heads,\n", + " window_size=(5, 5),\n", + " shift_size=(0, 0),\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " act_layer=nn.GELU,\n", + " norm_layer=nn.LayerNorm,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.num_heads = num_heads\n", + " self.window_size = window_size\n", + " self.shift_size = shift_size\n", + " self.mlp_ratio = mlp_ratio\n", + "\n", + " if min(self.input_resolution) <= min(self.window_size):\n", + " self.shift_size = (0, 0)\n", + " self.window_size = self.input_resolution\n", + "\n", + " assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n", + " assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n", + "\n", + " self.norm1 = norm_layer(dim)\n", + " self.attn = WindowAttention(\n", + " dim,\n", + " window_size=self.window_size,\n", + " num_heads=num_heads,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " attn_drop=attn_drop,\n", + " proj_drop=drop,\n", + " )\n", + "\n", + " self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n", + " self.norm2 = norm_layer(dim)\n", + " mlp_hidden_dim = int(dim * mlp_ratio)\n", + " self.mlp = Mlp(\n", + " in_features=dim,\n", + " hidden_features=mlp_hidden_dim,\n", + " act_layer=act_layer,\n", + " drop=drop,\n", + " )\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " H, W = self.input_resolution\n", + " img_mask = torch.zeros((1, H, W, 1))\n", + " h_slices = (\n", + " slice(0, -self.window_size[0]),\n", + " slice(-self.window_size[0], -self.shift_size[0]),\n", + " slice(-self.shift_size[0], None),\n", + " )\n", + " w_slices = (\n", + " slice(0, -self.window_size[1]),\n", + " slice(-self.window_size[1], -self.shift_size[1]),\n", + " slice(-self.shift_size[1], None),\n", + " )\n", + " cnt = 0\n", + " for h in h_slices:\n", + " for w in w_slices:\n", + " img_mask[:, h, w, :] = cnt\n", + " cnt += 1\n", + "\n", + " mask_windows = window_partition(img_mask, self.window_size)\n", + " mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n", + " attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n", + " attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n", + " attn_mask == 0, float(0.0)\n", + " )\n", + " else:\n", + " attn_mask = None\n", + "\n", + " self.register_buffer(\"attn_mask\", attn_mask)\n", + "\n", + " def forward(self, x):\n", + " H, W = self.input_resolution\n", + " B, L, C = x.shape\n", + " assert L == H * W, \"input feature has wrong size\"\n", + "\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x = x.view(B, H, W, C)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " shifted_x = x\n", + "\n", + " x_windows = window_partition(shifted_x, self.window_size)\n", + " x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n", + "\n", + " attn_windows = self.attn(x_windows, mask=self.attn_mask)\n", + "\n", + " attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n", + " shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " x = shifted_x\n", + " x = x.view(B, H * W, C)\n", + "\n", + " x = shortcut + self.drop_path(x)\n", + " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", + "\n", + " return x\n", + "\n", + "\n", + "class BasicLayer(nn.Module):\n", + " \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " depth,\n", + " num_heads,\n", + " window_size,\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " norm_layer=nn.LayerNorm,\n", + " downsample=None,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.depth = depth\n", + "\n", + " self.blocks = nn.ModuleList(\n", + " [\n", + " SwinTransformerBlock(\n", + " dim=dim,\n", + " input_resolution=input_resolution,\n", + " num_heads=num_heads,\n", + " window_size=window_size,\n", + " shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n", + " mlp_ratio=mlp_ratio,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " drop=drop,\n", + " attn_drop=attn_drop,\n", + " drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n", + " norm_layer=norm_layer,\n", + " )\n", + " for i in range(depth)\n", + " ]\n", + " )\n", + "\n", + " if downsample is not None:\n", + " self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n", + " else:\n", + " self.downsample = None\n", + "\n", + " def forward(self, x):\n", + " for blk in self.blocks:\n", + " x = blk(x)\n", + " if self.downsample is not None:\n", + " x = self.downsample(x)\n", + " return x\n", + "\n", + "\n", + "class PatchEmbed(nn.Module):\n", + " r\"\"\" Image to Patch Embedding \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n", + " super().__init__()\n", + " self.img_size = img_size\n", + " self.patch_size = patch_size\n", + " self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n", + " self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n", + " self.in_chans = in_chans\n", + " self.embed_dim = embed_dim\n", + "\n", + " self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n", + " if norm_layer is not None:\n", + " self.norm = norm_layer(embed_dim)\n", + " else:\n", + " self.norm = None\n", + "\n", + " def forward(self, x):\n", + " B, C, H, W = x.shape\n", + " assert H == self.img_size[0] and W == self.img_size[1], \\\n", + " f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n", + " x = self.proj(x).flatten(2).transpose(1, 2)\n", + " if self.norm is not None:\n", + " x = self.norm(x)\n", + " return x\n", + "\n", + "\n", + "class SwinTransformerForClassification(nn.Module):\n", + " \"\"\"\n", + " Swin Transformer adapted for classification tasks.\n", + " This version removes the hierarchical structure (patch merging) and the U-Net decoder\n", + " to function as a standard vision transformer, outputting class predictions.\n", + " \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n", + " embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n", + " window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n", + " drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n", + " norm_layer=nn.LayerNorm, ape=False, patch_norm=True, **kwargs):\n", + " super().__init__()\n", + "\n", + " self.num_classes = num_classes\n", + " self.num_layers = len(depths)\n", + " self.embed_dim = embed_dim\n", + " self.ape = ape\n", + " self.patch_norm = patch_norm\n", + " self.num_features = int(embed_dim) # No feature increase without patch merging\n", + " self.mlp_ratio = mlp_ratio\n", + "\n", + " # Split image into non-overlapping patches\n", + " self.patch_embed = PatchEmbed(\n", + " img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n", + " norm_layer=norm_layer if self.patch_norm else None)\n", + " num_patches = self.patch_embed.num_patches\n", + " patches_resolution = self.patch_embed.patches_resolution\n", + " self.patches_resolution = patches_resolution\n", + "\n", + " # Absolute position embedding\n", + " if self.ape:\n", + " self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n", + " trunc_normal_(self.absolute_pos_embed, std=.02)\n", + "\n", + " self.pos_drop = nn.Dropout(p=drop_rate)\n", + "\n", + " # Stochastic depth\n", + " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n", + "\n", + " # Build layers\n", + " # NOTE: This implementation removes the hierarchical structure (patch merging)\n", + " # to make it compatible with the 150x150 input and behave like a standard ViT.\n", + " # All layers operate at the same resolution and feature dimension.\n", + " self.layers = nn.ModuleList()\n", + " # For simplicity, we use a single stage of Swin blocks.\n", + " # You can create multiple stages by modifying this loop.\n", + " layer = BasicLayer(dim=int(embed_dim),\n", + " input_resolution=patches_resolution,\n", + " depth=sum(depths), # Combine all depths into one stage\n", + " num_heads=num_heads[0], # Use a single head count\n", + " window_size=window_size,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=qkv_bias, qk_scale=qk_scale,\n", + " drop=drop_rate, attn_drop=attn_drop_rate,\n", + " drop_path=dpr,\n", + " norm_layer=norm_layer,\n", + " downsample=None) # IMPORTANT: No downsampling\n", + " self.layers.append(layer)\n", + "\n", + " self.norm = norm_layer(self.num_features)\n", + " # Use Adaptive Average Pooling to get a single feature vector for classification\n", + " self.avgpool = nn.AdaptiveAvgPool1d(1)\n", + " self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n", + "\n", + " self.apply(self._init_weights)\n", + "\n", + " def _init_weights(self, m):\n", + " if isinstance(m, nn.Linear):\n", + " trunc_normal_(m.weight, std=.02)\n", + " if isinstance(m, nn.Linear) and m.bias is not None:\n", + " nn.init.constant_(m.bias, 0)\n", + " elif isinstance(m, nn.LayerNorm):\n", + " nn.init.constant_(m.bias, 0)\n", + " nn.init.constant_(m.weight, 1.0)\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay(self):\n", + " return {'absolute_pos_embed'}\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay_keywords(self):\n", + " return {'relative_position_bias_table'}\n", + "\n", + " def forward_features(self, x):\n", + " x = self.patch_embed(x)\n", + " if self.ape:\n", + " x = x + self.absolute_pos_embed\n", + " x = self.pos_drop(x)\n", + "\n", + " for layer in self.layers:\n", + " x = layer(x)\n", + "\n", + " x = self.norm(x)\n", + " # B L C -> B C L -> B C 1 -> B C\n", + " x = self.avgpool(x.transpose(1, 2))\n", + " x = torch.flatten(x, 1)\n", + " return x\n", + "\n", + " def forward(self, x):\n", + " x = self.forward_features(x)\n", + " x = self.head(x)\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hivvAHcI41JJ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "#!pip install torch_xla[tpu]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GtiRNfT34-6a" + }, + "outputs": [], + "source": [ + "#import torch_xla" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Q3rnNlt1_txE" + }, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from sklearn.metrics import roc_auc_score, roc_curve, auc\n", + "from sklearn.preprocessing import label_binarize\n", + "import copy\n", + "import matplotlib.pyplot as plt\n", + "from itertools import cycle\n", + "\n", + "def plot_roc_curve(all_labels, all_probs, class_names):\n", + " \"\"\"\n", + " Plots the ROC curve for each class and the micro/macro averages.\n", + " \"\"\"\n", + " # Binarize the labels for multi-class ROC analysis\n", + " all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n", + " all_probs = np.array(all_probs)\n", + "\n", + " # Compute ROC curve and ROC area for each class\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " for i in range(len(class_names)):\n", + " fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " # Compute micro-average ROC curve and ROC area\n", + " fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n", + " roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", + "\n", + " # Compute macro-average ROC curve and ROC area\n", + " # First aggregate all false positive rates\n", + " all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n", + " # Then interpolate all ROC curves at these points\n", + " mean_tpr = np.zeros_like(all_fpr)\n", + " for i in range(len(class_names)):\n", + " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", + " # Finally average it and compute AUC\n", + " mean_tpr /= len(class_names)\n", + " fpr[\"macro\"] = all_fpr\n", + " tpr[\"macro\"] = mean_tpr\n", + " roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", + "\n", + " # Plot all ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + "\n", + " plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n", + " label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n", + " color='deeppink', linestyle=':', linewidth=4)\n", + "\n", + " plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n", + " label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n", + " color='navy', linestyle=':', linewidth=4)\n", + "\n", + " colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n", + " for i, color in zip(range(len(class_names)), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color, lw=2,\n", + " label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--', lw=2)\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin.png\")\n", + " print(\"\\nROC curve plot saved as roc_curve.png\")\n", + "\n", + "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", + "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n", + " \"\"\"\n", + " Trains the model with early stopping based on validation ROC AUC score.\n", + "\n", + " Args:\n", + " model (torch.nn.Module): The neural network model to train.\n", + " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", + " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", + " criterion: The loss function.\n", + " optimizer: The optimization algorithm.\n", + " scheduler: The learning rate scheduler.\n", + " num_epochs (int): The maximum number of epochs to train for.\n", + " patience (int): Number of epochs to wait for improvement before stopping.\n", + " \"\"\"\n", + " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + " print(f\"Training on device: {device}\")\n", + "\n", + " model.to(device)\n", + "\n", + " best_roc_auc = 0.0\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = []\n", + " best_labels = []\n", + "\n", + " class_names = ['axion', 'cdm', 'no_sub']\n", + "\n", + " for epoch in range(num_epochs):\n", + " print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n", + "\n", + " # --- Training Phase ---\n", + " model.train()\n", + " train_loss = 0.0\n", + " train_correct = 0\n", + "\n", + " for images, labels in train_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " scheduler.step()\n", + "\n", + " train_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " train_correct += (predicted == labels).sum().item()\n", + "\n", + " # --- Validation Phase ---\n", + " model.eval()\n", + " val_loss = 0.0\n", + " val_correct = 0\n", + " all_probs = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for images, labels in val_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " val_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " val_correct += (predicted == labels).sum().item()\n", + "\n", + " probs = torch.softmax(outputs, dim=1)\n", + " all_probs.extend(probs.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " # --- Calculate Metrics ---\n", + " train_loss = train_loss / len(train_loader.dataset)\n", + " val_loss = val_loss / len(val_loader.dataset)\n", + " train_accuracy = train_correct / len(train_loader.dataset)\n", + " val_accuracy = val_correct / len(val_loader.dataset)\n", + "\n", + " # Calculate multi-class ROC AUC score\n", + " all_labels_np = np.array(all_labels)\n", + " all_probs_np = np.array(all_probs)\n", + " try:\n", + " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", + " except ValueError as e:\n", + " print(f\"Could not calculate ROC AUC: {e}\")\n", + " val_roc_auc = 0.0\n", + "\n", + " # Epoch-level summary\n", + " #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", + " #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", + " #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", + "\n", + " if val_roc_auc > best_roc_auc:\n", + " best_roc_auc = val_roc_auc\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = all_probs\n", + " best_labels = all_labels\n", + " #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", + " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + " else:\n", + " epochs_no_improve += 1\n", + " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + "\n", + " if epochs_no_improve >= patience:\n", + " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", + " model.load_state_dict(best_model_wts)\n", + " break\n", + "\n", + " print(\"\\nTraining Complete!\")\n", + " model.load_state_dict(best_model_wts)\n", + "\n", + " # After the training loop, plot the ROC curve for the best model\n", + " if best_probs and best_labels:\n", + " plot_roc_curve(best_labels, best_probs, class_names)\n", + "\n", + " return model, best_probs, best_labels" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9QBIRCLEkikD" + }, + "outputs": [], + "source": [ + "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "executionInfo": { + "elapsed": 3173720, + "status": "ok", + "timestamp": 1756369131300, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "-ZJepKUw_txF", + "outputId": "5a99a81d-cc73-43b2-de89-221e623cf418" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimizer: Adam\n", + "Learning Rate: 0.0001\n", + "Training on device: cuda\n", + "===== Epoch 1/2000 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n", + " warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New best model saved with Val ROC AUC: 0.5243, Train Loss: 1.1014, Train Accuracy: 0.3090, Val Loss: 1.0994, Val Accuracy: 0.3022\n", + "===== Epoch 2/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5243. Train Loss: 1.0991, Train Accuracy: 0.3380, Val Loss: 1.0994, Val Accuracy: 0.2844\n", + "===== Epoch 3/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5243. Train Loss: 1.0992, Train Accuracy: 0.3325, Val Loss: 1.1009, Val Accuracy: 0.3156\n", + "===== Epoch 4/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5243. Train Loss: 1.0991, Train Accuracy: 0.3200, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 5/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5243. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1018, Val Accuracy: 0.3467\n", + "===== Epoch 6/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5243. Train Loss: 1.0992, Train Accuracy: 0.3294, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 7/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5243. Train Loss: 1.0999, Train Accuracy: 0.3208, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 8/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5589, Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2933\n", + "===== Epoch 9/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5589. Train Loss: 1.0994, Train Accuracy: 0.3169, Val Loss: 1.1022, Val Accuracy: 0.2844\n", + "===== Epoch 10/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5589. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.3733\n", + "===== Epoch 11/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5589. Train Loss: 1.1000, Train Accuracy: 0.3075, Val Loss: 1.0996, Val Accuracy: 0.2933\n", + "===== Epoch 12/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3318, Val Loss: 1.1012, Val Accuracy: 0.3289\n", + "===== Epoch 13/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 14/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5589. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.0994, Val Accuracy: 0.2978\n", + "===== Epoch 15/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3365, Val Loss: 1.1017, Val Accuracy: 0.2667\n", + "===== Epoch 16/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 17/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5589. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.3156\n", + "===== Epoch 18/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3059, Val Loss: 1.1009, Val Accuracy: 0.3289\n", + "===== Epoch 19/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5589. Train Loss: 1.0993, Train Accuracy: 0.3380, Val Loss: 1.1000, Val Accuracy: 0.3111\n", + "===== Epoch 20/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5589. Train Loss: 1.0992, Train Accuracy: 0.3286, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 21/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 22/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1012, Val Accuracy: 0.2933\n", + "===== Epoch 23/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3244\n", + "===== Epoch 24/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3349, Val Loss: 1.1016, Val Accuracy: 0.2756\n", + "===== Epoch 25/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5589. Train Loss: 1.0992, Train Accuracy: 0.3082, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 26/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.0998, Val Accuracy: 0.3156\n", + "===== Epoch 27/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5589. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2711\n", + "===== Epoch 28/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1010, Val Accuracy: 0.2800\n", + "===== Epoch 29/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3341, Val Loss: 1.1005, Val Accuracy: 0.3022\n", + "===== Epoch 30/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3357, Val Loss: 1.0997, Val Accuracy: 0.3156\n", + "===== Epoch 31/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5589. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 32/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5589. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 33/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5589. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 34/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5589. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1014, Val Accuracy: 0.2800\n", + "===== Epoch 35/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5589. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.1009, Val Accuracy: 0.3067\n", + "===== Epoch 36/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5589. Train Loss: 1.0983, Train Accuracy: 0.3475, Val Loss: 1.1002, Val Accuracy: 0.3156\n", + "===== Epoch 37/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5589. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1016, Val Accuracy: 0.2889\n", + "===== Epoch 38/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5589. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2800\n", + "===== Epoch 39/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5589. Train Loss: 1.0990, Train Accuracy: 0.3357, Val Loss: 1.1013, Val Accuracy: 0.2622\n", + "===== Epoch 40/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5589. Train Loss: 1.0982, Train Accuracy: 0.3475, Val Loss: 1.0995, Val Accuracy: 0.3289\n", + "===== Epoch 41/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5969, Train Loss: 1.0982, Train Accuracy: 0.3388, Val Loss: 1.0989, Val Accuracy: 0.3244\n", + "===== Epoch 42/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 43/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2889\n", + "===== Epoch 44/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3553, Val Loss: 1.1014, Val Accuracy: 0.2978\n", + "===== Epoch 45/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2800\n", + "===== Epoch 46/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3545, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 47/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1012, Val Accuracy: 0.2889\n", + "===== Epoch 48/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1002, Val Accuracy: 0.3022\n", + "===== Epoch 49/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2933\n", + "===== Epoch 50/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2933\n", + "===== Epoch 51/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2978\n", + "===== Epoch 52/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 53/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2756\n", + "===== Epoch 54/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3537, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 55/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2667\n", + "===== Epoch 56/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1004, Val Accuracy: 0.2978\n", + "===== Epoch 57/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.1013, Val Accuracy: 0.2978\n", + "===== Epoch 58/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3490, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 59/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2711\n", + "===== Epoch 60/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2800\n", + "===== Epoch 61/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3459, Val Loss: 1.1008, Val Accuracy: 0.2889\n", + "===== Epoch 62/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2933\n", + "===== Epoch 63/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 64/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2889\n", + "===== Epoch 65/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 66/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.3067\n", + "===== Epoch 67/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2800\n", + "===== Epoch 68/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3333, Val Loss: 1.1006, Val Accuracy: 0.2800\n", + "===== Epoch 69/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 70/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3349, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 71/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3341, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 72/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 73/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3224, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 74/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3459, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 75/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3278, Val Loss: 1.1010, Val Accuracy: 0.2978\n", + "===== Epoch 76/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2933\n", + "===== Epoch 77/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 78/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1009, Val Accuracy: 0.3022\n", + "===== Epoch 79/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3373, Val Loss: 1.1007, Val Accuracy: 0.2933\n", + "===== Epoch 80/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 81/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3475, Val Loss: 1.1006, Val Accuracy: 0.2756\n", + "===== Epoch 82/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2533\n", + "===== Epoch 83/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 84/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1015, Val Accuracy: 0.2711\n", + "===== Epoch 85/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5969. Train Loss: 1.0994, Train Accuracy: 0.3427, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 86/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5969. Train Loss: 1.0997, Train Accuracy: 0.3169, Val Loss: 1.1011, Val Accuracy: 0.2756\n", + "===== Epoch 87/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 88/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3365, Val Loss: 1.1004, Val Accuracy: 0.3022\n", + "===== Epoch 89/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3475, Val Loss: 1.1013, Val Accuracy: 0.2933\n", + "===== Epoch 90/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.3289\n", + "===== Epoch 91/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3239, Val Loss: 1.1002, Val Accuracy: 0.3244\n", + "===== Epoch 92/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3443, Val Loss: 1.1005, Val Accuracy: 0.2889\n", + "===== Epoch 93/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5969. Train Loss: 1.0997, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.3067\n", + "===== Epoch 94/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.0992, Val Accuracy: 0.2978\n", + "===== Epoch 95/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.1004, Val Accuracy: 0.2978\n", + "===== Epoch 96/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.3244\n", + "===== Epoch 97/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1015, Val Accuracy: 0.2800\n", + "===== Epoch 98/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 99/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 100/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1013, Val Accuracy: 0.2756\n", + "===== Epoch 101/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 102/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3365, Val Loss: 1.1011, Val Accuracy: 0.2622\n", + "===== Epoch 103/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3231, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 104/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5969. Train Loss: 1.0993, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 105/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.0996, Val Accuracy: 0.3067\n", + "===== Epoch 106/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1002, Val Accuracy: 0.3200\n", + "===== Epoch 107/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3271, Val Loss: 1.1008, Val Accuracy: 0.2800\n", + "===== Epoch 108/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.2756\n", + "===== Epoch 109/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3278, Val Loss: 1.1007, Val Accuracy: 0.3067\n", + "===== Epoch 110/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3435, Val Loss: 1.0999, Val Accuracy: 0.2800\n", + "===== Epoch 111/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3537, Val Loss: 1.1002, Val Accuracy: 0.2933\n", + "===== Epoch 112/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3255, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 113/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2889\n", + "===== Epoch 114/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 115/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3357, Val Loss: 1.1008, Val Accuracy: 0.2533\n", + "===== Epoch 116/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5969. Train Loss: 1.0992, Train Accuracy: 0.3357, Val Loss: 1.1003, Val Accuracy: 0.3200\n", + "===== Epoch 117/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1013, Val Accuracy: 0.3067\n", + "===== Epoch 118/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3318, Val Loss: 1.1012, Val Accuracy: 0.2756\n", + "===== Epoch 119/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3506, Val Loss: 1.0996, Val Accuracy: 0.3156\n", + "===== Epoch 120/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1012, Val Accuracy: 0.2667\n", + "===== Epoch 121/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3302, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 122/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3318, Val Loss: 1.1010, Val Accuracy: 0.2800\n", + "===== Epoch 123/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 124/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.0999, Val Accuracy: 0.2800\n", + "===== Epoch 125/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3200, Val Loss: 1.1015, Val Accuracy: 0.2756\n", + "===== Epoch 126/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1004, Val Accuracy: 0.2756\n", + "===== Epoch 127/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3318, Val Loss: 1.1004, Val Accuracy: 0.2889\n", + "===== Epoch 128/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 129/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 130/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3318, Val Loss: 1.1000, Val Accuracy: 0.3022\n", + "===== Epoch 131/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 132/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1006, Val Accuracy: 0.2800\n", + "===== Epoch 133/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2622\n", + "===== Epoch 134/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3325, Val Loss: 1.1004, Val Accuracy: 0.2978\n", + "===== Epoch 135/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1001, Val Accuracy: 0.3067\n", + "===== Epoch 136/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1012, Val Accuracy: 0.2756\n", + "===== Epoch 137/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 138/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2667\n", + "===== Epoch 139/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 140/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 141/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2978\n", + "===== Epoch 142/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 143/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1001, Val Accuracy: 0.2933\n", + "===== Epoch 144/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1005, Val Accuracy: 0.2889\n", + "===== Epoch 145/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1010, Val Accuracy: 0.2889\n", + "===== Epoch 146/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2756\n", + "===== Epoch 147/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 148/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 149/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 150/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 151/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 152/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2889\n", + "===== Epoch 153/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 154/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3506, Val Loss: 1.1004, Val Accuracy: 0.2978\n", + "===== Epoch 155/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1010, Val Accuracy: 0.2978\n", + "===== Epoch 156/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 157/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 158/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 159/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1005, Val Accuracy: 0.2756\n", + "===== Epoch 160/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.1009, Val Accuracy: 0.2978\n", + "===== Epoch 161/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2756\n", + "===== Epoch 162/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1008, Val Accuracy: 0.2800\n", + "===== Epoch 163/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 164/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3506, Val Loss: 1.1010, Val Accuracy: 0.2889\n", + "===== Epoch 165/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1001, Val Accuracy: 0.2933\n", + "===== Epoch 166/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.3111\n", + "===== Epoch 167/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3639, Val Loss: 1.1002, Val Accuracy: 0.3022\n", + "===== Epoch 168/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1014, Val Accuracy: 0.2800\n", + "===== Epoch 169/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 170/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1000, Val Accuracy: 0.3422\n", + "===== Epoch 171/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 172/2000 =====\n", + "No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2978\n", + "===== Epoch 173/2000 =====\n", + "No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2889\n", + "===== Epoch 174/2000 =====\n", + "No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1010, Val Accuracy: 0.2889\n", + "===== Epoch 175/2000 =====\n", + "No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2756\n", + "===== Epoch 176/2000 =====\n", + "No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 177/2000 =====\n", + "No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 178/2000 =====\n", + "No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3255, Val Loss: 1.1013, Val Accuracy: 0.2800\n", + "===== Epoch 179/2000 =====\n", + "No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 180/2000 =====\n", + "No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3498, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 181/2000 =====\n", + "No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 182/2000 =====\n", + "No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3467, Val Loss: 1.1020, Val Accuracy: 0.2844\n", + "===== Epoch 183/2000 =====\n", + "No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3475, Val Loss: 1.1008, Val Accuracy: 0.2933\n", + "===== Epoch 184/2000 =====\n", + "No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5969. Train Loss: 1.0995, Train Accuracy: 0.3365, Val Loss: 1.1007, Val Accuracy: 0.3200\n", + "===== Epoch 185/2000 =====\n", + "No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 186/2000 =====\n", + "No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5969. Train Loss: 1.0991, Train Accuracy: 0.3216, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 187/2000 =====\n", + "No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 188/2000 =====\n", + "No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 189/2000 =====\n", + "No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3545, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 190/2000 =====\n", + "No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 191/2000 =====\n", + "No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3357, Val Loss: 1.0999, Val Accuracy: 0.3111\n", + "===== Epoch 192/2000 =====\n", + "No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1005, Val Accuracy: 0.2711\n", + "===== Epoch 193/2000 =====\n", + "No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5969. Train Loss: 1.0992, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 194/2000 =====\n", + "No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2800\n", + "===== Epoch 195/2000 =====\n", + "No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1005, Val Accuracy: 0.2711\n", + "===== Epoch 196/2000 =====\n", + "No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 197/2000 =====\n", + "No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3333, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 198/2000 =====\n", + "No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3435, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 199/2000 =====\n", + "No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 200/2000 =====\n", + "No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 201/2000 =====\n", + "No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 202/2000 =====\n", + "No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 203/2000 =====\n", + "No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3271, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 204/2000 =====\n", + "No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3247, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 205/2000 =====\n", + "No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 206/2000 =====\n", + "No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 207/2000 =====\n", + "No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 208/2000 =====\n", + "No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 209/2000 =====\n", + "No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3247, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 210/2000 =====\n", + "No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 211/2000 =====\n", + "No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3373, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 212/2000 =====\n", + "No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 213/2000 =====\n", + "No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1011, Val Accuracy: 0.2711\n", + "===== Epoch 214/2000 =====\n", + "No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 215/2000 =====\n", + "No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2711\n", + "===== Epoch 216/2000 =====\n", + "No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1001, Val Accuracy: 0.2978\n", + "===== Epoch 217/2000 =====\n", + "No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 218/2000 =====\n", + "No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2800\n", + "===== Epoch 219/2000 =====\n", + "No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 220/2000 =====\n", + "No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3325, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 221/2000 =====\n", + "No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 222/2000 =====\n", + "No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 223/2000 =====\n", + "No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 224/2000 =====\n", + "No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 225/2000 =====\n", + "No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 226/2000 =====\n", + "No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 227/2000 =====\n", + "No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 228/2000 =====\n", + "No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 229/2000 =====\n", + "No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 230/2000 =====\n", + "No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 231/2000 =====\n", + "No improvement in Val ROC AUC for 190 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 232/2000 =====\n", + "No improvement in Val ROC AUC for 191 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 233/2000 =====\n", + "No improvement in Val ROC AUC for 192 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3373, Val Loss: 1.1003, Val Accuracy: 0.2933\n", + "===== Epoch 234/2000 =====\n", + "No improvement in Val ROC AUC for 193 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3388, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 235/2000 =====\n", + "No improvement in Val ROC AUC for 194 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1001, Val Accuracy: 0.2756\n", + "===== Epoch 236/2000 =====\n", + "No improvement in Val ROC AUC for 195 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 237/2000 =====\n", + "No improvement in Val ROC AUC for 196 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1007, Val Accuracy: 0.2756\n", + "===== Epoch 238/2000 =====\n", + "No improvement in Val ROC AUC for 197 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3459, Val Loss: 1.1009, Val Accuracy: 0.2933\n", + "===== Epoch 239/2000 =====\n", + "No improvement in Val ROC AUC for 198 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 240/2000 =====\n", + "No improvement in Val ROC AUC for 199 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0997, Val Accuracy: 0.2889\n", + "===== Epoch 241/2000 =====\n", + "No improvement in Val ROC AUC for 200 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2800\n", + "===== Epoch 242/2000 =====\n", + "No improvement in Val ROC AUC for 201 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1010, Val Accuracy: 0.2889\n", + "===== Epoch 243/2000 =====\n", + "No improvement in Val ROC AUC for 202 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 244/2000 =====\n", + "No improvement in Val ROC AUC for 203 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2800\n", + "===== Epoch 245/2000 =====\n", + "No improvement in Val ROC AUC for 204 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 246/2000 =====\n", + "No improvement in Val ROC AUC for 205 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 247/2000 =====\n", + "No improvement in Val ROC AUC for 206 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.2933\n", + "===== Epoch 248/2000 =====\n", + "No improvement in Val ROC AUC for 207 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2800\n", + "===== Epoch 249/2000 =====\n", + "No improvement in Val ROC AUC for 208 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 250/2000 =====\n", + "No improvement in Val ROC AUC for 209 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 251/2000 =====\n", + "No improvement in Val ROC AUC for 210 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2800\n", + "===== Epoch 252/2000 =====\n", + "No improvement in Val ROC AUC for 211 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 253/2000 =====\n", + "No improvement in Val ROC AUC for 212 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 254/2000 =====\n", + "No improvement in Val ROC AUC for 213 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 255/2000 =====\n", + "No improvement in Val ROC AUC for 214 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3380, Val Loss: 1.1004, Val Accuracy: 0.2800\n", + "===== Epoch 256/2000 =====\n", + "No improvement in Val ROC AUC for 215 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2756\n", + "===== Epoch 257/2000 =====\n", + "No improvement in Val ROC AUC for 216 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 258/2000 =====\n", + "No improvement in Val ROC AUC for 217 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2933\n", + "===== Epoch 259/2000 =====\n", + "No improvement in Val ROC AUC for 218 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1010, Val Accuracy: 0.2800\n", + "===== Epoch 260/2000 =====\n", + "No improvement in Val ROC AUC for 219 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.3022\n", + "===== Epoch 261/2000 =====\n", + "No improvement in Val ROC AUC for 220 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 262/2000 =====\n", + "No improvement in Val ROC AUC for 221 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.0996, Val Accuracy: 0.3067\n", + "===== Epoch 263/2000 =====\n", + "No improvement in Val ROC AUC for 222 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 264/2000 =====\n", + "No improvement in Val ROC AUC for 223 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2889\n", + "===== Epoch 265/2000 =====\n", + "No improvement in Val ROC AUC for 224 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 266/2000 =====\n", + "No improvement in Val ROC AUC for 225 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 267/2000 =====\n", + "No improvement in Val ROC AUC for 226 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2800\n", + "===== Epoch 268/2000 =====\n", + "No improvement in Val ROC AUC for 227 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 269/2000 =====\n", + "No improvement in Val ROC AUC for 228 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 270/2000 =====\n", + "No improvement in Val ROC AUC for 229 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 271/2000 =====\n", + "No improvement in Val ROC AUC for 230 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 272/2000 =====\n", + "No improvement in Val ROC AUC for 231 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1002, Val Accuracy: 0.2800\n", + "===== Epoch 273/2000 =====\n", + "No improvement in Val ROC AUC for 232 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 274/2000 =====\n", + "No improvement in Val ROC AUC for 233 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2800\n", + "===== Epoch 275/2000 =====\n", + "No improvement in Val ROC AUC for 234 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 276/2000 =====\n", + "No improvement in Val ROC AUC for 235 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3286, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 277/2000 =====\n", + "No improvement in Val ROC AUC for 236 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 278/2000 =====\n", + "No improvement in Val ROC AUC for 237 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 279/2000 =====\n", + "No improvement in Val ROC AUC for 238 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3459, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 280/2000 =====\n", + "No improvement in Val ROC AUC for 239 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 281/2000 =====\n", + "No improvement in Val ROC AUC for 240 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 282/2000 =====\n", + "No improvement in Val ROC AUC for 241 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 283/2000 =====\n", + "No improvement in Val ROC AUC for 242 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 284/2000 =====\n", + "No improvement in Val ROC AUC for 243 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 285/2000 =====\n", + "No improvement in Val ROC AUC for 244 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.3156\n", + "===== Epoch 286/2000 =====\n", + "No improvement in Val ROC AUC for 245 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3294, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 287/2000 =====\n", + "No improvement in Val ROC AUC for 246 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 288/2000 =====\n", + "No improvement in Val ROC AUC for 247 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 289/2000 =====\n", + "No improvement in Val ROC AUC for 248 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 290/2000 =====\n", + "No improvement in Val ROC AUC for 249 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 291/2000 =====\n", + "No improvement in Val ROC AUC for 250 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3216, Val Loss: 1.1003, Val Accuracy: 0.2800\n", + "===== Epoch 292/2000 =====\n", + "No improvement in Val ROC AUC for 251 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 293/2000 =====\n", + "No improvement in Val ROC AUC for 252 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 294/2000 =====\n", + "No improvement in Val ROC AUC for 253 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 295/2000 =====\n", + "No improvement in Val ROC AUC for 254 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 296/2000 =====\n", + "No improvement in Val ROC AUC for 255 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 297/2000 =====\n", + "No improvement in Val ROC AUC for 256 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1004, Val Accuracy: 0.2667\n", + "===== Epoch 298/2000 =====\n", + "No improvement in Val ROC AUC for 257 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 299/2000 =====\n", + "No improvement in Val ROC AUC for 258 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 300/2000 =====\n", + "No improvement in Val ROC AUC for 259 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3318, Val Loss: 1.1006, Val Accuracy: 0.3022\n", + "===== Epoch 301/2000 =====\n", + "No improvement in Val ROC AUC for 260 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 302/2000 =====\n", + "No improvement in Val ROC AUC for 261 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 303/2000 =====\n", + "No improvement in Val ROC AUC for 262 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 304/2000 =====\n", + "No improvement in Val ROC AUC for 263 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 305/2000 =====\n", + "No improvement in Val ROC AUC for 264 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 306/2000 =====\n", + "No improvement in Val ROC AUC for 265 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 307/2000 =====\n", + "No improvement in Val ROC AUC for 266 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 308/2000 =====\n", + "No improvement in Val ROC AUC for 267 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3255, Val Loss: 1.0998, Val Accuracy: 0.2800\n", + "===== Epoch 309/2000 =====\n", + "No improvement in Val ROC AUC for 268 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 310/2000 =====\n", + "No improvement in Val ROC AUC for 269 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 311/2000 =====\n", + "No improvement in Val ROC AUC for 270 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 312/2000 =====\n", + "No improvement in Val ROC AUC for 271 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 313/2000 =====\n", + "No improvement in Val ROC AUC for 272 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 314/2000 =====\n", + "No improvement in Val ROC AUC for 273 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 315/2000 =====\n", + "No improvement in Val ROC AUC for 274 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 316/2000 =====\n", + "No improvement in Val ROC AUC for 275 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 317/2000 =====\n", + "No improvement in Val ROC AUC for 276 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 318/2000 =====\n", + "No improvement in Val ROC AUC for 277 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 319/2000 =====\n", + "No improvement in Val ROC AUC for 278 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 320/2000 =====\n", + "No improvement in Val ROC AUC for 279 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 321/2000 =====\n", + "No improvement in Val ROC AUC for 280 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 322/2000 =====\n", + "No improvement in Val ROC AUC for 281 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 323/2000 =====\n", + "No improvement in Val ROC AUC for 282 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 324/2000 =====\n", + "No improvement in Val ROC AUC for 283 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 325/2000 =====\n", + "No improvement in Val ROC AUC for 284 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3443, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 326/2000 =====\n", + "No improvement in Val ROC AUC for 285 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 327/2000 =====\n", + "No improvement in Val ROC AUC for 286 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 328/2000 =====\n", + "No improvement in Val ROC AUC for 287 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 329/2000 =====\n", + "No improvement in Val ROC AUC for 288 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 330/2000 =====\n", + "No improvement in Val ROC AUC for 289 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 331/2000 =====\n", + "No improvement in Val ROC AUC for 290 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 332/2000 =====\n", + "No improvement in Val ROC AUC for 291 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 333/2000 =====\n", + "No improvement in Val ROC AUC for 292 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 334/2000 =====\n", + "No improvement in Val ROC AUC for 293 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 335/2000 =====\n", + "No improvement in Val ROC AUC for 294 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 336/2000 =====\n", + "No improvement in Val ROC AUC for 295 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 337/2000 =====\n", + "No improvement in Val ROC AUC for 296 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 338/2000 =====\n", + "No improvement in Val ROC AUC for 297 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 339/2000 =====\n", + "No improvement in Val ROC AUC for 298 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 340/2000 =====\n", + "No improvement in Val ROC AUC for 299 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 341/2000 =====\n", + "No improvement in Val ROC AUC for 300 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 342/2000 =====\n", + "No improvement in Val ROC AUC for 301 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 343/2000 =====\n", + "No improvement in Val ROC AUC for 302 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 344/2000 =====\n", + "No improvement in Val ROC AUC for 303 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 345/2000 =====\n", + "No improvement in Val ROC AUC for 304 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 346/2000 =====\n", + "No improvement in Val ROC AUC for 305 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 347/2000 =====\n", + "No improvement in Val ROC AUC for 306 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 348/2000 =====\n", + "No improvement in Val ROC AUC for 307 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 349/2000 =====\n", + "No improvement in Val ROC AUC for 308 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 350/2000 =====\n", + "No improvement in Val ROC AUC for 309 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 351/2000 =====\n", + "No improvement in Val ROC AUC for 310 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 352/2000 =====\n", + "No improvement in Val ROC AUC for 311 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 353/2000 =====\n", + "No improvement in Val ROC AUC for 312 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 354/2000 =====\n", + "No improvement in Val ROC AUC for 313 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 355/2000 =====\n", + "No improvement in Val ROC AUC for 314 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 356/2000 =====\n", + "No improvement in Val ROC AUC for 315 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 357/2000 =====\n", + "No improvement in Val ROC AUC for 316 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 358/2000 =====\n", + "No improvement in Val ROC AUC for 317 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 359/2000 =====\n", + "No improvement in Val ROC AUC for 318 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 360/2000 =====\n", + "No improvement in Val ROC AUC for 319 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 361/2000 =====\n", + "No improvement in Val ROC AUC for 320 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 362/2000 =====\n", + "No improvement in Val ROC AUC for 321 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 363/2000 =====\n", + "No improvement in Val ROC AUC for 322 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 364/2000 =====\n", + "No improvement in Val ROC AUC for 323 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 365/2000 =====\n", + "No improvement in Val ROC AUC for 324 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 366/2000 =====\n", + "No improvement in Val ROC AUC for 325 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 367/2000 =====\n", + "No improvement in Val ROC AUC for 326 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 368/2000 =====\n", + "No improvement in Val ROC AUC for 327 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 369/2000 =====\n", + "No improvement in Val ROC AUC for 328 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 370/2000 =====\n", + "No improvement in Val ROC AUC for 329 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 371/2000 =====\n", + "No improvement in Val ROC AUC for 330 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 372/2000 =====\n", + "No improvement in Val ROC AUC for 331 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 373/2000 =====\n", + "No improvement in Val ROC AUC for 332 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0998, Val Accuracy: 0.2844\n", + "===== Epoch 374/2000 =====\n", + "No improvement in Val ROC AUC for 333 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 375/2000 =====\n", + "No improvement in Val ROC AUC for 334 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 376/2000 =====\n", + "No improvement in Val ROC AUC for 335 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 377/2000 =====\n", + "No improvement in Val ROC AUC for 336 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 378/2000 =====\n", + "No improvement in Val ROC AUC for 337 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 379/2000 =====\n", + "No improvement in Val ROC AUC for 338 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 380/2000 =====\n", + "No improvement in Val ROC AUC for 339 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3247, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 381/2000 =====\n", + "No improvement in Val ROC AUC for 340 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 382/2000 =====\n", + "No improvement in Val ROC AUC for 341 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 383/2000 =====\n", + "No improvement in Val ROC AUC for 342 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 384/2000 =====\n", + "No improvement in Val ROC AUC for 343 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 385/2000 =====\n", + "No improvement in Val ROC AUC for 344 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 386/2000 =====\n", + "No improvement in Val ROC AUC for 345 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 387/2000 =====\n", + "No improvement in Val ROC AUC for 346 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3404, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 388/2000 =====\n", + "No improvement in Val ROC AUC for 347 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 389/2000 =====\n", + "No improvement in Val ROC AUC for 348 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 390/2000 =====\n", + "No improvement in Val ROC AUC for 349 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 391/2000 =====\n", + "No improvement in Val ROC AUC for 350 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3263, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 392/2000 =====\n", + "No improvement in Val ROC AUC for 351 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 393/2000 =====\n", + "No improvement in Val ROC AUC for 352 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 394/2000 =====\n", + "No improvement in Val ROC AUC for 353 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 395/2000 =====\n", + "No improvement in Val ROC AUC for 354 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3365, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 396/2000 =====\n", + "No improvement in Val ROC AUC for 355 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 397/2000 =====\n", + "No improvement in Val ROC AUC for 356 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3373, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 398/2000 =====\n", + "No improvement in Val ROC AUC for 357 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 399/2000 =====\n", + "No improvement in Val ROC AUC for 358 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 400/2000 =====\n", + "No improvement in Val ROC AUC for 359 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3122, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 401/2000 =====\n", + "No improvement in Val ROC AUC for 360 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 402/2000 =====\n", + "No improvement in Val ROC AUC for 361 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 403/2000 =====\n", + "No improvement in Val ROC AUC for 362 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 404/2000 =====\n", + "No improvement in Val ROC AUC for 363 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 405/2000 =====\n", + "No improvement in Val ROC AUC for 364 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 406/2000 =====\n", + "No improvement in Val ROC AUC for 365 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 407/2000 =====\n", + "No improvement in Val ROC AUC for 366 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 408/2000 =====\n", + "No improvement in Val ROC AUC for 367 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 409/2000 =====\n", + "No improvement in Val ROC AUC for 368 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 410/2000 =====\n", + "No improvement in Val ROC AUC for 369 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 411/2000 =====\n", + "No improvement in Val ROC AUC for 370 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 412/2000 =====\n", + "No improvement in Val ROC AUC for 371 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 413/2000 =====\n", + "No improvement in Val ROC AUC for 372 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 414/2000 =====\n", + "No improvement in Val ROC AUC for 373 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 415/2000 =====\n", + "No improvement in Val ROC AUC for 374 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 416/2000 =====\n", + "No improvement in Val ROC AUC for 375 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 417/2000 =====\n", + "No improvement in Val ROC AUC for 376 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 418/2000 =====\n", + "No improvement in Val ROC AUC for 377 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 419/2000 =====\n", + "No improvement in Val ROC AUC for 378 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 420/2000 =====\n", + "No improvement in Val ROC AUC for 379 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 421/2000 =====\n", + "No improvement in Val ROC AUC for 380 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3467, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 422/2000 =====\n", + "No improvement in Val ROC AUC for 381 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 423/2000 =====\n", + "No improvement in Val ROC AUC for 382 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 424/2000 =====\n", + "No improvement in Val ROC AUC for 383 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 425/2000 =====\n", + "No improvement in Val ROC AUC for 384 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 426/2000 =====\n", + "No improvement in Val ROC AUC for 385 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 427/2000 =====\n", + "No improvement in Val ROC AUC for 386 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 428/2000 =====\n", + "No improvement in Val ROC AUC for 387 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 429/2000 =====\n", + "No improvement in Val ROC AUC for 388 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 430/2000 =====\n", + "No improvement in Val ROC AUC for 389 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 431/2000 =====\n", + "No improvement in Val ROC AUC for 390 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 432/2000 =====\n", + "No improvement in Val ROC AUC for 391 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 433/2000 =====\n", + "No improvement in Val ROC AUC for 392 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 434/2000 =====\n", + "No improvement in Val ROC AUC for 393 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 435/2000 =====\n", + "No improvement in Val ROC AUC for 394 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 436/2000 =====\n", + "No improvement in Val ROC AUC for 395 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 437/2000 =====\n", + "No improvement in Val ROC AUC for 396 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 438/2000 =====\n", + "No improvement in Val ROC AUC for 397 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 439/2000 =====\n", + "No improvement in Val ROC AUC for 398 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 440/2000 =====\n", + "No improvement in Val ROC AUC for 399 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 441/2000 =====\n", + "No improvement in Val ROC AUC for 400 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 442/2000 =====\n", + "No improvement in Val ROC AUC for 401 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 443/2000 =====\n", + "No improvement in Val ROC AUC for 402 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 444/2000 =====\n", + "No improvement in Val ROC AUC for 403 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 445/2000 =====\n", + "No improvement in Val ROC AUC for 404 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 446/2000 =====\n", + "No improvement in Val ROC AUC for 405 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 447/2000 =====\n", + "No improvement in Val ROC AUC for 406 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 448/2000 =====\n", + "No improvement in Val ROC AUC for 407 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 449/2000 =====\n", + "No improvement in Val ROC AUC for 408 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 450/2000 =====\n", + "No improvement in Val ROC AUC for 409 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 451/2000 =====\n", + "No improvement in Val ROC AUC for 410 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 452/2000 =====\n", + "No improvement in Val ROC AUC for 411 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 453/2000 =====\n", + "No improvement in Val ROC AUC for 412 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 454/2000 =====\n", + "No improvement in Val ROC AUC for 413 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 455/2000 =====\n", + "No improvement in Val ROC AUC for 414 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 456/2000 =====\n", + "No improvement in Val ROC AUC for 415 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 457/2000 =====\n", + "No improvement in Val ROC AUC for 416 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 458/2000 =====\n", + "No improvement in Val ROC AUC for 417 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 459/2000 =====\n", + "No improvement in Val ROC AUC for 418 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 460/2000 =====\n", + "No improvement in Val ROC AUC for 419 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 461/2000 =====\n", + "No improvement in Val ROC AUC for 420 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 462/2000 =====\n", + "No improvement in Val ROC AUC for 421 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2889\n", + "===== Epoch 463/2000 =====\n", + "No improvement in Val ROC AUC for 422 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2711\n", + "===== Epoch 464/2000 =====\n", + "No improvement in Val ROC AUC for 423 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2800\n", + "===== Epoch 465/2000 =====\n", + "No improvement in Val ROC AUC for 424 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 466/2000 =====\n", + "No improvement in Val ROC AUC for 425 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 467/2000 =====\n", + "No improvement in Val ROC AUC for 426 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3451, Val Loss: 1.1003, Val Accuracy: 0.2889\n", + "===== Epoch 468/2000 =====\n", + "No improvement in Val ROC AUC for 427 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 469/2000 =====\n", + "No improvement in Val ROC AUC for 428 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 470/2000 =====\n", + "No improvement in Val ROC AUC for 429 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 471/2000 =====\n", + "No improvement in Val ROC AUC for 430 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 472/2000 =====\n", + "No improvement in Val ROC AUC for 431 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3325, Val Loss: 1.1009, Val Accuracy: 0.2933\n", + "===== Epoch 473/2000 =====\n", + "No improvement in Val ROC AUC for 432 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 474/2000 =====\n", + "No improvement in Val ROC AUC for 433 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 475/2000 =====\n", + "No improvement in Val ROC AUC for 434 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 476/2000 =====\n", + "No improvement in Val ROC AUC for 435 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 477/2000 =====\n", + "No improvement in Val ROC AUC for 436 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 478/2000 =====\n", + "No improvement in Val ROC AUC for 437 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 479/2000 =====\n", + "No improvement in Val ROC AUC for 438 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 480/2000 =====\n", + "No improvement in Val ROC AUC for 439 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 481/2000 =====\n", + "No improvement in Val ROC AUC for 440 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 482/2000 =====\n", + "No improvement in Val ROC AUC for 441 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 483/2000 =====\n", + "No improvement in Val ROC AUC for 442 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 484/2000 =====\n", + "No improvement in Val ROC AUC for 443 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 485/2000 =====\n", + "No improvement in Val ROC AUC for 444 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3443, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 486/2000 =====\n", + "No improvement in Val ROC AUC for 445 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3373, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 487/2000 =====\n", + "No improvement in Val ROC AUC for 446 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3482, Val Loss: 1.1003, Val Accuracy: 0.2978\n", + "===== Epoch 488/2000 =====\n", + "No improvement in Val ROC AUC for 447 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 489/2000 =====\n", + "No improvement in Val ROC AUC for 448 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 490/2000 =====\n", + "No improvement in Val ROC AUC for 449 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 491/2000 =====\n", + "No improvement in Val ROC AUC for 450 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 492/2000 =====\n", + "No improvement in Val ROC AUC for 451 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 493/2000 =====\n", + "No improvement in Val ROC AUC for 452 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 494/2000 =====\n", + "No improvement in Val ROC AUC for 453 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3388, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 495/2000 =====\n", + "No improvement in Val ROC AUC for 454 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3349, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 496/2000 =====\n", + "No improvement in Val ROC AUC for 455 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 497/2000 =====\n", + "No improvement in Val ROC AUC for 456 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3286, Val Loss: 1.0998, Val Accuracy: 0.2844\n", + "===== Epoch 498/2000 =====\n", + "No improvement in Val ROC AUC for 457 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 499/2000 =====\n", + "No improvement in Val ROC AUC for 458 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 500/2000 =====\n", + "No improvement in Val ROC AUC for 459 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 501/2000 =====\n", + "No improvement in Val ROC AUC for 460 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 502/2000 =====\n", + "No improvement in Val ROC AUC for 461 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.0997, Val Accuracy: 0.2756\n", + "===== Epoch 503/2000 =====\n", + "No improvement in Val ROC AUC for 462 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 504/2000 =====\n", + "No improvement in Val ROC AUC for 463 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 505/2000 =====\n", + "No improvement in Val ROC AUC for 464 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 506/2000 =====\n", + "No improvement in Val ROC AUC for 465 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 507/2000 =====\n", + "No improvement in Val ROC AUC for 466 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 508/2000 =====\n", + "No improvement in Val ROC AUC for 467 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 509/2000 =====\n", + "No improvement in Val ROC AUC for 468 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 510/2000 =====\n", + "No improvement in Val ROC AUC for 469 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 511/2000 =====\n", + "No improvement in Val ROC AUC for 470 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 512/2000 =====\n", + "No improvement in Val ROC AUC for 471 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 513/2000 =====\n", + "No improvement in Val ROC AUC for 472 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 514/2000 =====\n", + "No improvement in Val ROC AUC for 473 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 515/2000 =====\n", + "No improvement in Val ROC AUC for 474 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 516/2000 =====\n", + "No improvement in Val ROC AUC for 475 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.0996, Val Accuracy: 0.2844\n", + "===== Epoch 517/2000 =====\n", + "No improvement in Val ROC AUC for 476 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 518/2000 =====\n", + "No improvement in Val ROC AUC for 477 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 519/2000 =====\n", + "No improvement in Val ROC AUC for 478 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 520/2000 =====\n", + "No improvement in Val ROC AUC for 479 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 521/2000 =====\n", + "No improvement in Val ROC AUC for 480 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 522/2000 =====\n", + "No improvement in Val ROC AUC for 481 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 523/2000 =====\n", + "No improvement in Val ROC AUC for 482 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 524/2000 =====\n", + "No improvement in Val ROC AUC for 483 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 525/2000 =====\n", + "No improvement in Val ROC AUC for 484 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 526/2000 =====\n", + "No improvement in Val ROC AUC for 485 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 527/2000 =====\n", + "No improvement in Val ROC AUC for 486 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 528/2000 =====\n", + "No improvement in Val ROC AUC for 487 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 529/2000 =====\n", + "No improvement in Val ROC AUC for 488 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 530/2000 =====\n", + "No improvement in Val ROC AUC for 489 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 531/2000 =====\n", + "No improvement in Val ROC AUC for 490 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 532/2000 =====\n", + "No improvement in Val ROC AUC for 491 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 533/2000 =====\n", + "No improvement in Val ROC AUC for 492 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 534/2000 =====\n", + "No improvement in Val ROC AUC for 493 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 535/2000 =====\n", + "No improvement in Val ROC AUC for 494 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 536/2000 =====\n", + "No improvement in Val ROC AUC for 495 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 537/2000 =====\n", + "No improvement in Val ROC AUC for 496 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 538/2000 =====\n", + "No improvement in Val ROC AUC for 497 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 539/2000 =====\n", + "No improvement in Val ROC AUC for 498 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 540/2000 =====\n", + "No improvement in Val ROC AUC for 499 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 541/2000 =====\n", + "No improvement in Val ROC AUC for 500 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 542/2000 =====\n", + "No improvement in Val ROC AUC for 501 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 543/2000 =====\n", + "No improvement in Val ROC AUC for 502 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3388, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 544/2000 =====\n", + "No improvement in Val ROC AUC for 503 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 545/2000 =====\n", + "No improvement in Val ROC AUC for 504 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 546/2000 =====\n", + "No improvement in Val ROC AUC for 505 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 547/2000 =====\n", + "No improvement in Val ROC AUC for 506 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 548/2000 =====\n", + "No improvement in Val ROC AUC for 507 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.0997, Val Accuracy: 0.2844\n", + "===== Epoch 549/2000 =====\n", + "No improvement in Val ROC AUC for 508 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 550/2000 =====\n", + "No improvement in Val ROC AUC for 509 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 551/2000 =====\n", + "No improvement in Val ROC AUC for 510 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 552/2000 =====\n", + "No improvement in Val ROC AUC for 511 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 553/2000 =====\n", + "No improvement in Val ROC AUC for 512 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 554/2000 =====\n", + "No improvement in Val ROC AUC for 513 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 555/2000 =====\n", + "No improvement in Val ROC AUC for 514 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 556/2000 =====\n", + "No improvement in Val ROC AUC for 515 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 557/2000 =====\n", + "No improvement in Val ROC AUC for 516 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 558/2000 =====\n", + "No improvement in Val ROC AUC for 517 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 559/2000 =====\n", + "No improvement in Val ROC AUC for 518 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 560/2000 =====\n", + "No improvement in Val ROC AUC for 519 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 561/2000 =====\n", + "No improvement in Val ROC AUC for 520 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 562/2000 =====\n", + "No improvement in Val ROC AUC for 521 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3459, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 563/2000 =====\n", + "No improvement in Val ROC AUC for 522 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 564/2000 =====\n", + "No improvement in Val ROC AUC for 523 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 565/2000 =====\n", + "No improvement in Val ROC AUC for 524 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3435, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 566/2000 =====\n", + "No improvement in Val ROC AUC for 525 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 567/2000 =====\n", + "No improvement in Val ROC AUC for 526 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 568/2000 =====\n", + "No improvement in Val ROC AUC for 527 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 569/2000 =====\n", + "No improvement in Val ROC AUC for 528 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 570/2000 =====\n", + "No improvement in Val ROC AUC for 529 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 571/2000 =====\n", + "No improvement in Val ROC AUC for 530 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 572/2000 =====\n", + "No improvement in Val ROC AUC for 531 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 573/2000 =====\n", + "No improvement in Val ROC AUC for 532 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 574/2000 =====\n", + "No improvement in Val ROC AUC for 533 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 575/2000 =====\n", + "No improvement in Val ROC AUC for 534 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 576/2000 =====\n", + "No improvement in Val ROC AUC for 535 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 577/2000 =====\n", + "No improvement in Val ROC AUC for 536 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 578/2000 =====\n", + "No improvement in Val ROC AUC for 537 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 579/2000 =====\n", + "No improvement in Val ROC AUC for 538 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 580/2000 =====\n", + "No improvement in Val ROC AUC for 539 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 581/2000 =====\n", + "No improvement in Val ROC AUC for 540 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.0995, Val Accuracy: 0.3022\n", + "===== Epoch 582/2000 =====\n", + "No improvement in Val ROC AUC for 541 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 583/2000 =====\n", + "No improvement in Val ROC AUC for 542 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 584/2000 =====\n", + "No improvement in Val ROC AUC for 543 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 585/2000 =====\n", + "No improvement in Val ROC AUC for 544 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3294, Val Loss: 1.0998, Val Accuracy: 0.2844\n", + "===== Epoch 586/2000 =====\n", + "No improvement in Val ROC AUC for 545 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2889\n", + "===== Epoch 587/2000 =====\n", + "No improvement in Val ROC AUC for 546 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 588/2000 =====\n", + "No improvement in Val ROC AUC for 547 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1004, Val Accuracy: 0.2889\n", + "===== Epoch 589/2000 =====\n", + "No improvement in Val ROC AUC for 548 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3380, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 590/2000 =====\n", + "No improvement in Val ROC AUC for 549 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 591/2000 =====\n", + "No improvement in Val ROC AUC for 550 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3349, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 592/2000 =====\n", + "No improvement in Val ROC AUC for 551 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 593/2000 =====\n", + "No improvement in Val ROC AUC for 552 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 594/2000 =====\n", + "No improvement in Val ROC AUC for 553 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 595/2000 =====\n", + "No improvement in Val ROC AUC for 554 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 596/2000 =====\n", + "No improvement in Val ROC AUC for 555 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 597/2000 =====\n", + "No improvement in Val ROC AUC for 556 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 598/2000 =====\n", + "No improvement in Val ROC AUC for 557 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.0997, Val Accuracy: 0.2844\n", + "===== Epoch 599/2000 =====\n", + "No improvement in Val ROC AUC for 558 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3365, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 600/2000 =====\n", + "No improvement in Val ROC AUC for 559 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 601/2000 =====\n", + "No improvement in Val ROC AUC for 560 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 602/2000 =====\n", + "No improvement in Val ROC AUC for 561 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 603/2000 =====\n", + "No improvement in Val ROC AUC for 562 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.0999, Val Accuracy: 0.3022\n", + "===== Epoch 604/2000 =====\n", + "No improvement in Val ROC AUC for 563 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3443, Val Loss: 1.1003, Val Accuracy: 0.2800\n", + "===== Epoch 605/2000 =====\n", + "No improvement in Val ROC AUC for 564 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 606/2000 =====\n", + "No improvement in Val ROC AUC for 565 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2978\n", + "===== Epoch 607/2000 =====\n", + "No improvement in Val ROC AUC for 566 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 608/2000 =====\n", + "No improvement in Val ROC AUC for 567 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3208, Val Loss: 1.0997, Val Accuracy: 0.2711\n", + "===== Epoch 609/2000 =====\n", + "No improvement in Val ROC AUC for 568 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 610/2000 =====\n", + "No improvement in Val ROC AUC for 569 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 611/2000 =====\n", + "No improvement in Val ROC AUC for 570 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1000, Val Accuracy: 0.2889\n", + "===== Epoch 612/2000 =====\n", + "No improvement in Val ROC AUC for 571 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 613/2000 =====\n", + "No improvement in Val ROC AUC for 572 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 614/2000 =====\n", + "No improvement in Val ROC AUC for 573 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2800\n", + "===== Epoch 615/2000 =====\n", + "No improvement in Val ROC AUC for 574 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3482, Val Loss: 1.0993, Val Accuracy: 0.3156\n", + "===== Epoch 616/2000 =====\n", + "No improvement in Val ROC AUC for 575 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.0992, Val Accuracy: 0.2844\n", + "===== Epoch 617/2000 =====\n", + "No improvement in Val ROC AUC for 576 epoch(s). Best is 0.5969. Train Loss: 1.0988, Train Accuracy: 0.3349, Val Loss: 1.0994, Val Accuracy: 0.2667\n", + "===== Epoch 618/2000 =====\n", + "No improvement in Val ROC AUC for 577 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2800\n", + "===== Epoch 619/2000 =====\n", + "No improvement in Val ROC AUC for 578 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1003, Val Accuracy: 0.2933\n", + "===== Epoch 620/2000 =====\n", + "No improvement in Val ROC AUC for 579 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.0997, Val Accuracy: 0.2844\n", + "===== Epoch 621/2000 =====\n", + "No improvement in Val ROC AUC for 580 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.0992, Val Accuracy: 0.2978\n", + "===== Epoch 622/2000 =====\n", + "No improvement in Val ROC AUC for 581 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 623/2000 =====\n", + "No improvement in Val ROC AUC for 582 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 624/2000 =====\n", + "No improvement in Val ROC AUC for 583 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 625/2000 =====\n", + "No improvement in Val ROC AUC for 584 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 626/2000 =====\n", + "No improvement in Val ROC AUC for 585 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3529, Val Loss: 1.0996, Val Accuracy: 0.2889\n", + "===== Epoch 627/2000 =====\n", + "No improvement in Val ROC AUC for 586 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.0999, Val Accuracy: 0.2800\n", + "===== Epoch 628/2000 =====\n", + "No improvement in Val ROC AUC for 587 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 629/2000 =====\n", + "No improvement in Val ROC AUC for 588 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 630/2000 =====\n", + "No improvement in Val ROC AUC for 589 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.0994, Val Accuracy: 0.2889\n", + "===== Epoch 631/2000 =====\n", + "No improvement in Val ROC AUC for 590 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2889\n", + "===== Epoch 632/2000 =====\n", + "No improvement in Val ROC AUC for 591 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 633/2000 =====\n", + "No improvement in Val ROC AUC for 592 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3482, Val Loss: 1.1008, Val Accuracy: 0.2889\n", + "===== Epoch 634/2000 =====\n", + "No improvement in Val ROC AUC for 593 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3443, Val Loss: 1.1014, Val Accuracy: 0.2756\n", + "===== Epoch 635/2000 =====\n", + "No improvement in Val ROC AUC for 594 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3482, Val Loss: 1.1004, Val Accuracy: 0.2933\n", + "===== Epoch 636/2000 =====\n", + "No improvement in Val ROC AUC for 595 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3467, Val Loss: 1.1005, Val Accuracy: 0.2889\n", + "===== Epoch 637/2000 =====\n", + "No improvement in Val ROC AUC for 596 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 638/2000 =====\n", + "No improvement in Val ROC AUC for 597 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.3022\n", + "===== Epoch 639/2000 =====\n", + "No improvement in Val ROC AUC for 598 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.0998, Val Accuracy: 0.2889\n", + "===== Epoch 640/2000 =====\n", + "No improvement in Val ROC AUC for 599 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 641/2000 =====\n", + "No improvement in Val ROC AUC for 600 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3412, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 642/2000 =====\n", + "No improvement in Val ROC AUC for 601 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3388, Val Loss: 1.1021, Val Accuracy: 0.2756\n", + "===== Epoch 643/2000 =====\n", + "No improvement in Val ROC AUC for 602 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3514, Val Loss: 1.1007, Val Accuracy: 0.2756\n", + "===== Epoch 644/2000 =====\n", + "No improvement in Val ROC AUC for 603 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2756\n", + "===== Epoch 645/2000 =====\n", + "No improvement in Val ROC AUC for 604 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3475, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 646/2000 =====\n", + "No improvement in Val ROC AUC for 605 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3498, Val Loss: 1.1006, Val Accuracy: 0.2933\n", + "===== Epoch 647/2000 =====\n", + "No improvement in Val ROC AUC for 606 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3482, Val Loss: 1.1005, Val Accuracy: 0.3022\n", + "===== Epoch 648/2000 =====\n", + "No improvement in Val ROC AUC for 607 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1003, Val Accuracy: 0.2889\n", + "===== Epoch 649/2000 =====\n", + "No improvement in Val ROC AUC for 608 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1004, Val Accuracy: 0.3022\n", + "===== Epoch 650/2000 =====\n", + "No improvement in Val ROC AUC for 609 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3514, Val Loss: 1.0995, Val Accuracy: 0.2978\n", + "===== Epoch 651/2000 =====\n", + "No improvement in Val ROC AUC for 610 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3498, Val Loss: 1.1008, Val Accuracy: 0.2889\n", + "===== Epoch 652/2000 =====\n", + "No improvement in Val ROC AUC for 611 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2756\n", + "===== Epoch 653/2000 =====\n", + "No improvement in Val ROC AUC for 612 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3435, Val Loss: 1.0988, Val Accuracy: 0.3022\n", + "===== Epoch 654/2000 =====\n", + "No improvement in Val ROC AUC for 613 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3111\n", + "===== Epoch 655/2000 =====\n", + "No improvement in Val ROC AUC for 614 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3600, Val Loss: 1.1008, Val Accuracy: 0.2978\n", + "===== Epoch 656/2000 =====\n", + "No improvement in Val ROC AUC for 615 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 657/2000 =====\n", + "No improvement in Val ROC AUC for 616 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.0999, Val Accuracy: 0.2933\n", + "===== Epoch 658/2000 =====\n", + "No improvement in Val ROC AUC for 617 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3498, Val Loss: 1.0990, Val Accuracy: 0.2889\n", + "===== Epoch 659/2000 =====\n", + "No improvement in Val ROC AUC for 618 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.0993, Val Accuracy: 0.3022\n", + "===== Epoch 660/2000 =====\n", + "No improvement in Val ROC AUC for 619 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1000, Val Accuracy: 0.2933\n", + "===== Epoch 661/2000 =====\n", + "No improvement in Val ROC AUC for 620 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 662/2000 =====\n", + "No improvement in Val ROC AUC for 621 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.1005, Val Accuracy: 0.2978\n", + "===== Epoch 663/2000 =====\n", + "No improvement in Val ROC AUC for 622 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2889\n", + "===== Epoch 664/2000 =====\n", + "No improvement in Val ROC AUC for 623 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 665/2000 =====\n", + "No improvement in Val ROC AUC for 624 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.0998, Val Accuracy: 0.3022\n", + "===== Epoch 666/2000 =====\n", + "No improvement in Val ROC AUC for 625 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3467, Val Loss: 1.1014, Val Accuracy: 0.2933\n", + "===== Epoch 667/2000 =====\n", + "No improvement in Val ROC AUC for 626 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3514, Val Loss: 1.0991, Val Accuracy: 0.2978\n", + "===== Epoch 668/2000 =====\n", + "No improvement in Val ROC AUC for 627 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3522, Val Loss: 1.1004, Val Accuracy: 0.2933\n", + "===== Epoch 669/2000 =====\n", + "No improvement in Val ROC AUC for 628 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.3067\n", + "===== Epoch 670/2000 =====\n", + "No improvement in Val ROC AUC for 629 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3529, Val Loss: 1.0997, Val Accuracy: 0.3200\n", + "===== Epoch 671/2000 =====\n", + "No improvement in Val ROC AUC for 630 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2933\n", + "===== Epoch 672/2000 =====\n", + "No improvement in Val ROC AUC for 631 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.0979, Val Accuracy: 0.3467\n", + "===== Epoch 673/2000 =====\n", + "No improvement in Val ROC AUC for 632 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3506, Val Loss: 1.1011, Val Accuracy: 0.3022\n", + "===== Epoch 674/2000 =====\n", + "No improvement in Val ROC AUC for 633 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.0999, Val Accuracy: 0.2978\n", + "===== Epoch 675/2000 =====\n", + "No improvement in Val ROC AUC for 634 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3553, Val Loss: 1.0991, Val Accuracy: 0.3200\n", + "===== Epoch 676/2000 =====\n", + "No improvement in Val ROC AUC for 635 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.3022\n", + "===== Epoch 677/2000 =====\n", + "No improvement in Val ROC AUC for 636 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.1012, Val Accuracy: 0.2978\n", + "===== Epoch 678/2000 =====\n", + "No improvement in Val ROC AUC for 637 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3686, Val Loss: 1.0994, Val Accuracy: 0.2889\n", + "===== Epoch 679/2000 =====\n", + "No improvement in Val ROC AUC for 638 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2933\n", + "===== Epoch 680/2000 =====\n", + "No improvement in Val ROC AUC for 639 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3404, Val Loss: 1.0985, Val Accuracy: 0.3289\n", + "===== Epoch 681/2000 =====\n", + "No improvement in Val ROC AUC for 640 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3475, Val Loss: 1.0995, Val Accuracy: 0.2978\n", + "===== Epoch 682/2000 =====\n", + "No improvement in Val ROC AUC for 641 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.0998, Val Accuracy: 0.3067\n", + "===== Epoch 683/2000 =====\n", + "No improvement in Val ROC AUC for 642 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3765, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 684/2000 =====\n", + "No improvement in Val ROC AUC for 643 epoch(s). Best is 0.5969. Train Loss: 1.0994, Train Accuracy: 0.3373, Val Loss: 1.1026, Val Accuracy: 0.2978\n", + "===== Epoch 685/2000 =====\n", + "No improvement in Val ROC AUC for 644 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3451, Val Loss: 1.0983, Val Accuracy: 0.3333\n", + "===== Epoch 686/2000 =====\n", + "No improvement in Val ROC AUC for 645 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3396, Val Loss: 1.0976, Val Accuracy: 0.3511\n", + "===== Epoch 687/2000 =====\n", + "No improvement in Val ROC AUC for 646 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3812, Val Loss: 1.0975, Val Accuracy: 0.3467\n", + "===== Epoch 688/2000 =====\n", + "No improvement in Val ROC AUC for 647 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3443, Val Loss: 1.0993, Val Accuracy: 0.3244\n", + "===== Epoch 689/2000 =====\n", + "No improvement in Val ROC AUC for 648 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3576, Val Loss: 1.0996, Val Accuracy: 0.3067\n", + "===== Epoch 690/2000 =====\n", + "No improvement in Val ROC AUC for 649 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3569, Val Loss: 1.0947, Val Accuracy: 0.3644\n", + "===== Epoch 691/2000 =====\n", + "No improvement in Val ROC AUC for 650 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3451, Val Loss: 1.1025, Val Accuracy: 0.3067\n", + "===== Epoch 692/2000 =====\n", + "No improvement in Val ROC AUC for 651 epoch(s). Best is 0.5969. Train Loss: 1.0989, Train Accuracy: 0.3514, Val Loss: 1.0994, Val Accuracy: 0.3600\n", + "===== Epoch 693/2000 =====\n", + "No improvement in Val ROC AUC for 652 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.0982, Val Accuracy: 0.3111\n", + "===== Epoch 694/2000 =====\n", + "No improvement in Val ROC AUC for 653 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.3289\n", + "===== Epoch 695/2000 =====\n", + "No improvement in Val ROC AUC for 654 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3514, Val Loss: 1.1007, Val Accuracy: 0.3378\n", + "===== Epoch 696/2000 =====\n", + "No improvement in Val ROC AUC for 655 epoch(s). Best is 0.5969. Train Loss: 1.0996, Train Accuracy: 0.3459, Val Loss: 1.1013, Val Accuracy: 0.3022\n", + "===== Epoch 697/2000 =====\n", + "No improvement in Val ROC AUC for 656 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3271, Val Loss: 1.1005, Val Accuracy: 0.2978\n", + "===== Epoch 698/2000 =====\n", + "No improvement in Val ROC AUC for 657 epoch(s). Best is 0.5969. Train Loss: 1.0985, Train Accuracy: 0.3537, Val Loss: 1.1014, Val Accuracy: 0.2933\n", + "===== Epoch 699/2000 =====\n", + "No improvement in Val ROC AUC for 658 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3514, Val Loss: 1.0992, Val Accuracy: 0.3289\n", + "===== Epoch 700/2000 =====\n", + "No improvement in Val ROC AUC for 659 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.3022\n", + "===== Epoch 701/2000 =====\n", + "No improvement in Val ROC AUC for 660 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3506, Val Loss: 1.1011, Val Accuracy: 0.3067\n", + "===== Epoch 702/2000 =====\n", + "No improvement in Val ROC AUC for 661 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3522, Val Loss: 1.1022, Val Accuracy: 0.2889\n", + "===== Epoch 703/2000 =====\n", + "No improvement in Val ROC AUC for 662 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3349, Val Loss: 1.0986, Val Accuracy: 0.3333\n", + "===== Epoch 704/2000 =====\n", + "No improvement in Val ROC AUC for 663 epoch(s). Best is 0.5969. Train Loss: 1.0983, Train Accuracy: 0.3341, Val Loss: 1.1011, Val Accuracy: 0.3200\n", + "===== Epoch 705/2000 =====\n", + "No improvement in Val ROC AUC for 664 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.0990, Val Accuracy: 0.3156\n", + "===== Epoch 706/2000 =====\n", + "No improvement in Val ROC AUC for 665 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3357, Val Loss: 1.0962, Val Accuracy: 0.3556\n", + "===== Epoch 707/2000 =====\n", + "No improvement in Val ROC AUC for 666 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3545, Val Loss: 1.1013, Val Accuracy: 0.3200\n", + "===== Epoch 708/2000 =====\n", + "No improvement in Val ROC AUC for 667 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3490, Val Loss: 1.0992, Val Accuracy: 0.3289\n", + "===== Epoch 709/2000 =====\n", + "No improvement in Val ROC AUC for 668 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3443, Val Loss: 1.0995, Val Accuracy: 0.3422\n", + "===== Epoch 710/2000 =====\n", + "No improvement in Val ROC AUC for 669 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3600, Val Loss: 1.0955, Val Accuracy: 0.3911\n", + "===== Epoch 711/2000 =====\n", + "No improvement in Val ROC AUC for 670 epoch(s). Best is 0.5969. Train Loss: 1.0987, Train Accuracy: 0.3451, Val Loss: 1.1006, Val Accuracy: 0.3289\n", + "===== Epoch 712/2000 =====\n", + "No improvement in Val ROC AUC for 671 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3710, Val Loss: 1.0996, Val Accuracy: 0.2933\n", + "===== Epoch 713/2000 =====\n", + "No improvement in Val ROC AUC for 672 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3529, Val Loss: 1.0996, Val Accuracy: 0.3422\n", + "===== Epoch 714/2000 =====\n", + "No improvement in Val ROC AUC for 673 epoch(s). Best is 0.5969. Train Loss: 1.0990, Train Accuracy: 0.3333, Val Loss: 1.1001, Val Accuracy: 0.3244\n", + "===== Epoch 715/2000 =====\n", + "No improvement in Val ROC AUC for 674 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3576, Val Loss: 1.0998, Val Accuracy: 0.3511\n", + "===== Epoch 716/2000 =====\n", + "No improvement in Val ROC AUC for 675 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3584, Val Loss: 1.0989, Val Accuracy: 0.3289\n", + "===== Epoch 717/2000 =====\n", + "No improvement in Val ROC AUC for 676 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3514, Val Loss: 1.1012, Val Accuracy: 0.2978\n", + "===== Epoch 718/2000 =====\n", + "No improvement in Val ROC AUC for 677 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3435, Val Loss: 1.0967, Val Accuracy: 0.3644\n", + "===== Epoch 719/2000 =====\n", + "No improvement in Val ROC AUC for 678 epoch(s). Best is 0.5969. Train Loss: 1.0993, Train Accuracy: 0.3341, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 720/2000 =====\n", + "No improvement in Val ROC AUC for 679 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3678, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 721/2000 =====\n", + "No improvement in Val ROC AUC for 680 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1019, Val Accuracy: 0.2978\n", + "===== Epoch 722/2000 =====\n", + "No improvement in Val ROC AUC for 681 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3529, Val Loss: 1.1010, Val Accuracy: 0.3022\n", + "===== Epoch 723/2000 =====\n", + "No improvement in Val ROC AUC for 682 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3592, Val Loss: 1.0995, Val Accuracy: 0.3378\n", + "===== Epoch 724/2000 =====\n", + "No improvement in Val ROC AUC for 683 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3514, Val Loss: 1.0994, Val Accuracy: 0.3022\n", + "===== Epoch 725/2000 =====\n", + "No improvement in Val ROC AUC for 684 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3584, Val Loss: 1.0983, Val Accuracy: 0.3556\n", + "===== Epoch 726/2000 =====\n", + "No improvement in Val ROC AUC for 685 epoch(s). Best is 0.5969. Train Loss: 1.0955, Train Accuracy: 0.3537, Val Loss: 1.0995, Val Accuracy: 0.3511\n", + "===== Epoch 727/2000 =====\n", + "No improvement in Val ROC AUC for 686 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3537, Val Loss: 1.1013, Val Accuracy: 0.3244\n", + "===== Epoch 728/2000 =====\n", + "No improvement in Val ROC AUC for 687 epoch(s). Best is 0.5969. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1017, Val Accuracy: 0.2756\n", + "===== Epoch 729/2000 =====\n", + "No improvement in Val ROC AUC for 688 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3639, Val Loss: 1.0988, Val Accuracy: 0.3244\n", + "===== Epoch 730/2000 =====\n", + "No improvement in Val ROC AUC for 689 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3592, Val Loss: 1.0980, Val Accuracy: 0.3378\n", + "===== Epoch 731/2000 =====\n", + "No improvement in Val ROC AUC for 690 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3639, Val Loss: 1.0979, Val Accuracy: 0.3111\n", + "===== Epoch 732/2000 =====\n", + "No improvement in Val ROC AUC for 691 epoch(s). Best is 0.5969. Train Loss: 1.0981, Train Accuracy: 0.3490, Val Loss: 1.0965, Val Accuracy: 0.3378\n", + "===== Epoch 733/2000 =====\n", + "No improvement in Val ROC AUC for 692 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3710, Val Loss: 1.0966, Val Accuracy: 0.3333\n", + "===== Epoch 734/2000 =====\n", + "No improvement in Val ROC AUC for 693 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3561, Val Loss: 1.0980, Val Accuracy: 0.3333\n", + "===== Epoch 735/2000 =====\n", + "No improvement in Val ROC AUC for 694 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3671, Val Loss: 1.0976, Val Accuracy: 0.3111\n", + "===== Epoch 736/2000 =====\n", + "No improvement in Val ROC AUC for 695 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3639, Val Loss: 1.0989, Val Accuracy: 0.3067\n", + "===== Epoch 737/2000 =====\n", + "No improvement in Val ROC AUC for 696 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1000, Val Accuracy: 0.3022\n", + "===== Epoch 738/2000 =====\n", + "No improvement in Val ROC AUC for 697 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3639, Val Loss: 1.0976, Val Accuracy: 0.3467\n", + "===== Epoch 739/2000 =====\n", + "No improvement in Val ROC AUC for 698 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3639, Val Loss: 1.0967, Val Accuracy: 0.3689\n", + "===== Epoch 740/2000 =====\n", + "No improvement in Val ROC AUC for 699 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3694, Val Loss: 1.0974, Val Accuracy: 0.3733\n", + "===== Epoch 741/2000 =====\n", + "No improvement in Val ROC AUC for 700 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.0998, Val Accuracy: 0.3378\n", + "===== Epoch 742/2000 =====\n", + "No improvement in Val ROC AUC for 701 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3545, Val Loss: 1.0974, Val Accuracy: 0.3289\n", + "===== Epoch 743/2000 =====\n", + "No improvement in Val ROC AUC for 702 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3561, Val Loss: 1.0977, Val Accuracy: 0.3556\n", + "===== Epoch 744/2000 =====\n", + "No improvement in Val ROC AUC for 703 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3561, Val Loss: 1.1002, Val Accuracy: 0.3244\n", + "===== Epoch 745/2000 =====\n", + "No improvement in Val ROC AUC for 704 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3459, Val Loss: 1.0986, Val Accuracy: 0.3556\n", + "===== Epoch 746/2000 =====\n", + "No improvement in Val ROC AUC for 705 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3490, Val Loss: 1.1017, Val Accuracy: 0.2800\n", + "===== Epoch 747/2000 =====\n", + "No improvement in Val ROC AUC for 706 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3600, Val Loss: 1.0981, Val Accuracy: 0.3422\n", + "===== Epoch 748/2000 =====\n", + "No improvement in Val ROC AUC for 707 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3592, Val Loss: 1.0935, Val Accuracy: 0.3822\n", + "===== Epoch 749/2000 =====\n", + "No improvement in Val ROC AUC for 708 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3592, Val Loss: 1.1026, Val Accuracy: 0.2800\n", + "===== Epoch 750/2000 =====\n", + "No improvement in Val ROC AUC for 709 epoch(s). Best is 0.5969. Train Loss: 1.0972, Train Accuracy: 0.3608, Val Loss: 1.0993, Val Accuracy: 0.3244\n", + "===== Epoch 751/2000 =====\n", + "No improvement in Val ROC AUC for 710 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3733, Val Loss: 1.1003, Val Accuracy: 0.3289\n", + "===== Epoch 752/2000 =====\n", + "No improvement in Val ROC AUC for 711 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3631, Val Loss: 1.0973, Val Accuracy: 0.3733\n", + "===== Epoch 753/2000 =====\n", + "No improvement in Val ROC AUC for 712 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3608, Val Loss: 1.1001, Val Accuracy: 0.3289\n", + "===== Epoch 754/2000 =====\n", + "No improvement in Val ROC AUC for 713 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3678, Val Loss: 1.0991, Val Accuracy: 0.3556\n", + "===== Epoch 755/2000 =====\n", + "No improvement in Val ROC AUC for 714 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3686, Val Loss: 1.0963, Val Accuracy: 0.3556\n", + "===== Epoch 756/2000 =====\n", + "No improvement in Val ROC AUC for 715 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1010, Val Accuracy: 0.3244\n", + "===== Epoch 757/2000 =====\n", + "No improvement in Val ROC AUC for 716 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3561, Val Loss: 1.0960, Val Accuracy: 0.3556\n", + "===== Epoch 758/2000 =====\n", + "No improvement in Val ROC AUC for 717 epoch(s). Best is 0.5969. Train Loss: 1.0982, Train Accuracy: 0.3459, Val Loss: 1.1001, Val Accuracy: 0.3067\n", + "===== Epoch 759/2000 =====\n", + "No improvement in Val ROC AUC for 718 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3506, Val Loss: 1.0946, Val Accuracy: 0.3867\n", + "===== Epoch 760/2000 =====\n", + "No improvement in Val ROC AUC for 719 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3569, Val Loss: 1.1015, Val Accuracy: 0.3022\n", + "===== Epoch 761/2000 =====\n", + "No improvement in Val ROC AUC for 720 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.1014, Val Accuracy: 0.3289\n", + "===== Epoch 762/2000 =====\n", + "No improvement in Val ROC AUC for 721 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3556\n", + "===== Epoch 763/2000 =====\n", + "No improvement in Val ROC AUC for 722 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3584, Val Loss: 1.0996, Val Accuracy: 0.3511\n", + "===== Epoch 764/2000 =====\n", + "No improvement in Val ROC AUC for 723 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3569, Val Loss: 1.1005, Val Accuracy: 0.3200\n", + "===== Epoch 765/2000 =====\n", + "No improvement in Val ROC AUC for 724 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3608, Val Loss: 1.0975, Val Accuracy: 0.2978\n", + "===== Epoch 766/2000 =====\n", + "No improvement in Val ROC AUC for 725 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3553, Val Loss: 1.1038, Val Accuracy: 0.2889\n", + "===== Epoch 767/2000 =====\n", + "No improvement in Val ROC AUC for 726 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3490, Val Loss: 1.0992, Val Accuracy: 0.3511\n", + "===== Epoch 768/2000 =====\n", + "No improvement in Val ROC AUC for 727 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3522, Val Loss: 1.0979, Val Accuracy: 0.3956\n", + "===== Epoch 769/2000 =====\n", + "No improvement in Val ROC AUC for 728 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3459, Val Loss: 1.1050, Val Accuracy: 0.2889\n", + "===== Epoch 770/2000 =====\n", + "No improvement in Val ROC AUC for 729 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3482, Val Loss: 1.0957, Val Accuracy: 0.3600\n", + "===== Epoch 771/2000 =====\n", + "No improvement in Val ROC AUC for 730 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3616, Val Loss: 1.0996, Val Accuracy: 0.3244\n", + "===== Epoch 772/2000 =====\n", + "No improvement in Val ROC AUC for 731 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3522, Val Loss: 1.0970, Val Accuracy: 0.3511\n", + "===== Epoch 773/2000 =====\n", + "No improvement in Val ROC AUC for 732 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3576, Val Loss: 1.0989, Val Accuracy: 0.3733\n", + "===== Epoch 774/2000 =====\n", + "No improvement in Val ROC AUC for 733 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3529, Val Loss: 1.1019, Val Accuracy: 0.3111\n", + "===== Epoch 775/2000 =====\n", + "No improvement in Val ROC AUC for 734 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3553, Val Loss: 1.1012, Val Accuracy: 0.3022\n", + "===== Epoch 776/2000 =====\n", + "No improvement in Val ROC AUC for 735 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3553, Val Loss: 1.1016, Val Accuracy: 0.3289\n", + "===== Epoch 777/2000 =====\n", + "No improvement in Val ROC AUC for 736 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3592, Val Loss: 1.0988, Val Accuracy: 0.3378\n", + "===== Epoch 778/2000 =====\n", + "No improvement in Val ROC AUC for 737 epoch(s). Best is 0.5969. Train Loss: 1.0950, Train Accuracy: 0.3624, Val Loss: 1.1061, Val Accuracy: 0.2889\n", + "===== Epoch 779/2000 =====\n", + "No improvement in Val ROC AUC for 738 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3482, Val Loss: 1.0978, Val Accuracy: 0.3378\n", + "===== Epoch 780/2000 =====\n", + "No improvement in Val ROC AUC for 739 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3639, Val Loss: 1.0939, Val Accuracy: 0.3867\n", + "===== Epoch 781/2000 =====\n", + "No improvement in Val ROC AUC for 740 epoch(s). Best is 0.5969. Train Loss: 1.0975, Train Accuracy: 0.3631, Val Loss: 1.0966, Val Accuracy: 0.3511\n", + "===== Epoch 782/2000 =====\n", + "No improvement in Val ROC AUC for 741 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3427, Val Loss: 1.0998, Val Accuracy: 0.3733\n", + "===== Epoch 783/2000 =====\n", + "No improvement in Val ROC AUC for 742 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3537, Val Loss: 1.0954, Val Accuracy: 0.3600\n", + "===== Epoch 784/2000 =====\n", + "No improvement in Val ROC AUC for 743 epoch(s). Best is 0.5969. Train Loss: 1.0978, Train Accuracy: 0.3451, Val Loss: 1.0949, Val Accuracy: 0.3333\n", + "===== Epoch 785/2000 =====\n", + "No improvement in Val ROC AUC for 744 epoch(s). Best is 0.5969. Train Loss: 1.0979, Train Accuracy: 0.3545, Val Loss: 1.0970, Val Accuracy: 0.3778\n", + "===== Epoch 786/2000 =====\n", + "No improvement in Val ROC AUC for 745 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3584, Val Loss: 1.1017, Val Accuracy: 0.3200\n", + "===== Epoch 787/2000 =====\n", + "No improvement in Val ROC AUC for 746 epoch(s). Best is 0.5969. Train Loss: 1.0980, Train Accuracy: 0.3459, Val Loss: 1.1017, Val Accuracy: 0.3244\n", + "===== Epoch 788/2000 =====\n", + "No improvement in Val ROC AUC for 747 epoch(s). Best is 0.5969. Train Loss: 1.0968, Train Accuracy: 0.3600, Val Loss: 1.0977, Val Accuracy: 0.3467\n", + "===== Epoch 789/2000 =====\n", + "No improvement in Val ROC AUC for 748 epoch(s). Best is 0.5969. Train Loss: 1.0974, Train Accuracy: 0.3396, Val Loss: 1.1043, Val Accuracy: 0.2844\n", + "===== Epoch 790/2000 =====\n", + "No improvement in Val ROC AUC for 749 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3506, Val Loss: 1.0968, Val Accuracy: 0.3644\n", + "===== Epoch 791/2000 =====\n", + "No improvement in Val ROC AUC for 750 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3655, Val Loss: 1.1024, Val Accuracy: 0.3022\n", + "===== Epoch 792/2000 =====\n", + "No improvement in Val ROC AUC for 751 epoch(s). Best is 0.5969. Train Loss: 1.0949, Train Accuracy: 0.3624, Val Loss: 1.1015, Val Accuracy: 0.3022\n", + "===== Epoch 793/2000 =====\n", + "No improvement in Val ROC AUC for 752 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3459, Val Loss: 1.1118, Val Accuracy: 0.3111\n", + "===== Epoch 794/2000 =====\n", + "No improvement in Val ROC AUC for 753 epoch(s). Best is 0.5969. Train Loss: 1.0984, Train Accuracy: 0.3475, Val Loss: 1.0989, Val Accuracy: 0.3467\n", + "===== Epoch 795/2000 =====\n", + "No improvement in Val ROC AUC for 754 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3537, Val Loss: 1.0968, Val Accuracy: 0.3511\n", + "===== Epoch 796/2000 =====\n", + "No improvement in Val ROC AUC for 755 epoch(s). Best is 0.5969. Train Loss: 1.0970, Train Accuracy: 0.3608, Val Loss: 1.1005, Val Accuracy: 0.3111\n", + "===== Epoch 797/2000 =====\n", + "No improvement in Val ROC AUC for 756 epoch(s). Best is 0.5969. Train Loss: 1.0973, Train Accuracy: 0.3435, Val Loss: 1.1075, Val Accuracy: 0.2978\n", + "===== Epoch 798/2000 =====\n", + "No improvement in Val ROC AUC for 757 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3584, Val Loss: 1.0998, Val Accuracy: 0.3289\n", + "===== Epoch 799/2000 =====\n", + "No improvement in Val ROC AUC for 758 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3569, Val Loss: 1.0973, Val Accuracy: 0.3689\n", + "===== Epoch 800/2000 =====\n", + "No improvement in Val ROC AUC for 759 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3459, Val Loss: 1.0984, Val Accuracy: 0.3244\n", + "===== Epoch 801/2000 =====\n", + "No improvement in Val ROC AUC for 760 epoch(s). Best is 0.5969. Train Loss: 1.0966, Train Accuracy: 0.3490, Val Loss: 1.0931, Val Accuracy: 0.3778\n", + "===== Epoch 802/2000 =====\n", + "No improvement in Val ROC AUC for 761 epoch(s). Best is 0.5969. Train Loss: 1.0942, Train Accuracy: 0.3835, Val Loss: 1.0985, Val Accuracy: 0.3422\n", + "===== Epoch 803/2000 =====\n", + "No improvement in Val ROC AUC for 762 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3671, Val Loss: 1.0936, Val Accuracy: 0.3511\n", + "===== Epoch 804/2000 =====\n", + "No improvement in Val ROC AUC for 763 epoch(s). Best is 0.5969. Train Loss: 1.0977, Train Accuracy: 0.3529, Val Loss: 1.1005, Val Accuracy: 0.3378\n", + "===== Epoch 805/2000 =====\n", + "No improvement in Val ROC AUC for 764 epoch(s). Best is 0.5969. Train Loss: 1.0963, Train Accuracy: 0.3498, Val Loss: 1.1004, Val Accuracy: 0.3467\n", + "===== Epoch 806/2000 =====\n", + "No improvement in Val ROC AUC for 765 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3616, Val Loss: 1.0998, Val Accuracy: 0.3556\n", + "===== Epoch 807/2000 =====\n", + "No improvement in Val ROC AUC for 766 epoch(s). Best is 0.5969. Train Loss: 1.0971, Train Accuracy: 0.3553, Val Loss: 1.1046, Val Accuracy: 0.2844\n", + "===== Epoch 808/2000 =====\n", + "No improvement in Val ROC AUC for 767 epoch(s). Best is 0.5969. Train Loss: 1.0958, Train Accuracy: 0.3678, Val Loss: 1.1010, Val Accuracy: 0.3422\n", + "===== Epoch 809/2000 =====\n", + "No improvement in Val ROC AUC for 768 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3631, Val Loss: 1.0965, Val Accuracy: 0.3867\n", + "===== Epoch 810/2000 =====\n", + "No improvement in Val ROC AUC for 769 epoch(s). Best is 0.5969. Train Loss: 1.0960, Train Accuracy: 0.3671, Val Loss: 1.0944, Val Accuracy: 0.3689\n", + "===== Epoch 811/2000 =====\n", + "No improvement in Val ROC AUC for 770 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3702, Val Loss: 1.0917, Val Accuracy: 0.4267\n", + "===== Epoch 812/2000 =====\n", + "No improvement in Val ROC AUC for 771 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3561, Val Loss: 1.0950, Val Accuracy: 0.3111\n", + "===== Epoch 813/2000 =====\n", + "No improvement in Val ROC AUC for 772 epoch(s). Best is 0.5969. Train Loss: 1.0945, Train Accuracy: 0.3788, Val Loss: 1.1034, Val Accuracy: 0.3378\n", + "===== Epoch 814/2000 =====\n", + "No improvement in Val ROC AUC for 773 epoch(s). Best is 0.5969. Train Loss: 1.0954, Train Accuracy: 0.3812, Val Loss: 1.1039, Val Accuracy: 0.3333\n", + "===== Epoch 815/2000 =====\n", + "No improvement in Val ROC AUC for 774 epoch(s). Best is 0.5969. Train Loss: 1.0962, Train Accuracy: 0.3608, Val Loss: 1.0999, Val Accuracy: 0.3289\n", + "===== Epoch 816/2000 =====\n", + "No improvement in Val ROC AUC for 775 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3600, Val Loss: 1.0964, Val Accuracy: 0.3689\n", + "===== Epoch 817/2000 =====\n", + "No improvement in Val ROC AUC for 776 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3569, Val Loss: 1.1000, Val Accuracy: 0.3556\n", + "===== Epoch 818/2000 =====\n", + "No improvement in Val ROC AUC for 777 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3663, Val Loss: 1.0957, Val Accuracy: 0.3333\n", + "===== Epoch 819/2000 =====\n", + "No improvement in Val ROC AUC for 778 epoch(s). Best is 0.5969. Train Loss: 1.0939, Train Accuracy: 0.3773, Val Loss: 1.1090, Val Accuracy: 0.3111\n", + "===== Epoch 820/2000 =====\n", + "No improvement in Val ROC AUC for 779 epoch(s). Best is 0.5969. Train Loss: 1.0957, Train Accuracy: 0.3765, Val Loss: 1.1065, Val Accuracy: 0.3156\n", + "===== Epoch 821/2000 =====\n", + "No improvement in Val ROC AUC for 780 epoch(s). Best is 0.5969. Train Loss: 1.0954, Train Accuracy: 0.3600, Val Loss: 1.0963, Val Accuracy: 0.3778\n", + "===== Epoch 822/2000 =====\n", + "No improvement in Val ROC AUC for 781 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3600, Val Loss: 1.1061, Val Accuracy: 0.3156\n", + "===== Epoch 823/2000 =====\n", + "No improvement in Val ROC AUC for 782 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3600, Val Loss: 1.0963, Val Accuracy: 0.3556\n", + "===== Epoch 824/2000 =====\n", + "No improvement in Val ROC AUC for 783 epoch(s). Best is 0.5969. Train Loss: 1.0976, Train Accuracy: 0.3388, Val Loss: 1.0982, Val Accuracy: 0.3778\n", + "===== Epoch 825/2000 =====\n", + "No improvement in Val ROC AUC for 784 epoch(s). Best is 0.5969. Train Loss: 1.0936, Train Accuracy: 0.3710, Val Loss: 1.1014, Val Accuracy: 0.3244\n", + "===== Epoch 826/2000 =====\n", + "No improvement in Val ROC AUC for 785 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3639, Val Loss: 1.1021, Val Accuracy: 0.3244\n", + "===== Epoch 827/2000 =====\n", + "No improvement in Val ROC AUC for 786 epoch(s). Best is 0.5969. Train Loss: 1.0955, Train Accuracy: 0.3631, Val Loss: 1.0987, Val Accuracy: 0.3644\n", + "===== Epoch 828/2000 =====\n", + "No improvement in Val ROC AUC for 787 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3514, Val Loss: 1.0924, Val Accuracy: 0.3689\n", + "===== Epoch 829/2000 =====\n", + "No improvement in Val ROC AUC for 788 epoch(s). Best is 0.5969. Train Loss: 1.0937, Train Accuracy: 0.3804, Val Loss: 1.1018, Val Accuracy: 0.3600\n", + "===== Epoch 830/2000 =====\n", + "No improvement in Val ROC AUC for 789 epoch(s). Best is 0.5969. Train Loss: 1.0950, Train Accuracy: 0.3678, Val Loss: 1.0998, Val Accuracy: 0.3244\n", + "===== Epoch 831/2000 =====\n", + "No improvement in Val ROC AUC for 790 epoch(s). Best is 0.5969. Train Loss: 1.0952, Train Accuracy: 0.3553, Val Loss: 1.0961, Val Accuracy: 0.3689\n", + "===== Epoch 832/2000 =====\n", + "No improvement in Val ROC AUC for 791 epoch(s). Best is 0.5969. Train Loss: 1.0928, Train Accuracy: 0.3741, Val Loss: 1.0941, Val Accuracy: 0.3556\n", + "===== Epoch 833/2000 =====\n", + "No improvement in Val ROC AUC for 792 epoch(s). Best is 0.5969. Train Loss: 1.0911, Train Accuracy: 0.3788, Val Loss: 1.1038, Val Accuracy: 0.3156\n", + "===== Epoch 834/2000 =====\n", + "No improvement in Val ROC AUC for 793 epoch(s). Best is 0.5969. Train Loss: 1.0938, Train Accuracy: 0.3725, Val Loss: 1.0964, Val Accuracy: 0.3600\n", + "===== Epoch 835/2000 =====\n", + "No improvement in Val ROC AUC for 794 epoch(s). Best is 0.5969. Train Loss: 1.0918, Train Accuracy: 0.3749, Val Loss: 1.0977, Val Accuracy: 0.3600\n", + "===== Epoch 836/2000 =====\n", + "No improvement in Val ROC AUC for 795 epoch(s). Best is 0.5969. Train Loss: 1.0935, Train Accuracy: 0.3686, Val Loss: 1.0937, Val Accuracy: 0.3422\n", + "===== Epoch 837/2000 =====\n", + "No improvement in Val ROC AUC for 796 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3796, Val Loss: 1.0965, Val Accuracy: 0.3111\n", + "===== Epoch 838/2000 =====\n", + "No improvement in Val ROC AUC for 797 epoch(s). Best is 0.5969. Train Loss: 1.0926, Train Accuracy: 0.3835, Val Loss: 1.0912, Val Accuracy: 0.3911\n", + "===== Epoch 839/2000 =====\n", + "No improvement in Val ROC AUC for 798 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3835, Val Loss: 1.1017, Val Accuracy: 0.3422\n", + "===== Epoch 840/2000 =====\n", + "No improvement in Val ROC AUC for 799 epoch(s). Best is 0.5969. Train Loss: 1.0959, Train Accuracy: 0.3647, Val Loss: 1.0961, Val Accuracy: 0.3911\n", + "===== Epoch 841/2000 =====\n", + "No improvement in Val ROC AUC for 800 epoch(s). Best is 0.5969. Train Loss: 1.0918, Train Accuracy: 0.3765, Val Loss: 1.0958, Val Accuracy: 0.3867\n", + "===== Epoch 842/2000 =====\n", + "No improvement in Val ROC AUC for 801 epoch(s). Best is 0.5969. Train Loss: 1.0965, Train Accuracy: 0.3467, Val Loss: 1.0935, Val Accuracy: 0.3644\n", + "===== Epoch 843/2000 =====\n", + "No improvement in Val ROC AUC for 802 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3702, Val Loss: 1.0961, Val Accuracy: 0.3511\n", + "===== Epoch 844/2000 =====\n", + "No improvement in Val ROC AUC for 803 epoch(s). Best is 0.5969. Train Loss: 1.0926, Train Accuracy: 0.3773, Val Loss: 1.0973, Val Accuracy: 0.3511\n", + "===== Epoch 845/2000 =====\n", + "No improvement in Val ROC AUC for 804 epoch(s). Best is 0.5969. Train Loss: 1.0940, Train Accuracy: 0.3694, Val Loss: 1.0991, Val Accuracy: 0.3556\n", + "===== Epoch 846/2000 =====\n", + "No improvement in Val ROC AUC for 805 epoch(s). Best is 0.5969. Train Loss: 1.0945, Train Accuracy: 0.3616, Val Loss: 1.0884, Val Accuracy: 0.3733\n", + "===== Epoch 847/2000 =====\n", + "No improvement in Val ROC AUC for 806 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3827, Val Loss: 1.0917, Val Accuracy: 0.3733\n", + "===== Epoch 848/2000 =====\n", + "No improvement in Val ROC AUC for 807 epoch(s). Best is 0.5969. Train Loss: 1.0938, Train Accuracy: 0.3584, Val Loss: 1.0994, Val Accuracy: 0.3422\n", + "===== Epoch 849/2000 =====\n", + "No improvement in Val ROC AUC for 808 epoch(s). Best is 0.5969. Train Loss: 1.0969, Train Accuracy: 0.3553, Val Loss: 1.0961, Val Accuracy: 0.3778\n", + "===== Epoch 850/2000 =====\n", + "No improvement in Val ROC AUC for 809 epoch(s). Best is 0.5969. Train Loss: 1.0928, Train Accuracy: 0.3686, Val Loss: 1.0969, Val Accuracy: 0.3644\n", + "===== Epoch 851/2000 =====\n", + "No improvement in Val ROC AUC for 810 epoch(s). Best is 0.5969. Train Loss: 1.0944, Train Accuracy: 0.3498, Val Loss: 1.0966, Val Accuracy: 0.3422\n", + "===== Epoch 852/2000 =====\n", + "No improvement in Val ROC AUC for 811 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3804, Val Loss: 1.0935, Val Accuracy: 0.3511\n", + "===== Epoch 853/2000 =====\n", + "No improvement in Val ROC AUC for 812 epoch(s). Best is 0.5969. Train Loss: 1.0924, Train Accuracy: 0.3702, Val Loss: 1.0925, Val Accuracy: 0.3867\n", + "===== Epoch 854/2000 =====\n", + "No improvement in Val ROC AUC for 813 epoch(s). Best is 0.5969. Train Loss: 1.0934, Train Accuracy: 0.3710, Val Loss: 1.1030, Val Accuracy: 0.3244\n", + "===== Epoch 855/2000 =====\n", + "No improvement in Val ROC AUC for 814 epoch(s). Best is 0.5969. Train Loss: 1.0935, Train Accuracy: 0.3631, Val Loss: 1.0961, Val Accuracy: 0.3733\n", + "===== Epoch 856/2000 =====\n", + "No improvement in Val ROC AUC for 815 epoch(s). Best is 0.5969. Train Loss: 1.0919, Train Accuracy: 0.3867, Val Loss: 1.1011, Val Accuracy: 0.3156\n", + "===== Epoch 857/2000 =====\n", + "No improvement in Val ROC AUC for 816 epoch(s). Best is 0.5969. Train Loss: 1.0946, Train Accuracy: 0.3639, Val Loss: 1.0929, Val Accuracy: 0.3778\n", + "===== Epoch 858/2000 =====\n", + "No improvement in Val ROC AUC for 817 epoch(s). Best is 0.5969. Train Loss: 1.0919, Train Accuracy: 0.3773, Val Loss: 1.1006, Val Accuracy: 0.3244\n", + "===== Epoch 859/2000 =====\n", + "No improvement in Val ROC AUC for 818 epoch(s). Best is 0.5969. Train Loss: 1.0934, Train Accuracy: 0.3827, Val Loss: 1.0913, Val Accuracy: 0.4000\n", + "===== Epoch 860/2000 =====\n", + "No improvement in Val ROC AUC for 819 epoch(s). Best is 0.5969. Train Loss: 1.0927, Train Accuracy: 0.3639, Val Loss: 1.0985, Val Accuracy: 0.3467\n", + "===== Epoch 861/2000 =====\n", + "No improvement in Val ROC AUC for 820 epoch(s). Best is 0.5969. Train Loss: 1.0952, Train Accuracy: 0.3663, Val Loss: 1.0902, Val Accuracy: 0.3511\n", + "===== Epoch 862/2000 =====\n", + "No improvement in Val ROC AUC for 821 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3655, Val Loss: 1.0972, Val Accuracy: 0.3333\n", + "===== Epoch 863/2000 =====\n", + "No improvement in Val ROC AUC for 822 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3796, Val Loss: 1.0991, Val Accuracy: 0.3244\n", + "===== Epoch 864/2000 =====\n", + "No improvement in Val ROC AUC for 823 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3718, Val Loss: 1.0912, Val Accuracy: 0.4000\n", + "===== Epoch 865/2000 =====\n", + "No improvement in Val ROC AUC for 824 epoch(s). Best is 0.5969. Train Loss: 1.0948, Train Accuracy: 0.3710, Val Loss: 1.1032, Val Accuracy: 0.3511\n", + "===== Epoch 866/2000 =====\n", + "No improvement in Val ROC AUC for 825 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3867, Val Loss: 1.0866, Val Accuracy: 0.4222\n", + "===== Epoch 867/2000 =====\n", + "No improvement in Val ROC AUC for 826 epoch(s). Best is 0.5969. Train Loss: 1.0904, Train Accuracy: 0.3827, Val Loss: 1.1010, Val Accuracy: 0.3689\n", + "===== Epoch 868/2000 =====\n", + "No improvement in Val ROC AUC for 827 epoch(s). Best is 0.5969. Train Loss: 1.0913, Train Accuracy: 0.3733, Val Loss: 1.0929, Val Accuracy: 0.3911\n", + "===== Epoch 869/2000 =====\n", + "No improvement in Val ROC AUC for 828 epoch(s). Best is 0.5969. Train Loss: 1.0897, Train Accuracy: 0.3820, Val Loss: 1.1054, Val Accuracy: 0.3200\n", + "===== Epoch 870/2000 =====\n", + "No improvement in Val ROC AUC for 829 epoch(s). Best is 0.5969. Train Loss: 1.0940, Train Accuracy: 0.3710, Val Loss: 1.0998, Val Accuracy: 0.3200\n", + "===== Epoch 871/2000 =====\n", + "No improvement in Val ROC AUC for 830 epoch(s). Best is 0.5969. Train Loss: 1.0936, Train Accuracy: 0.3843, Val Loss: 1.0924, Val Accuracy: 0.3822\n", + "===== Epoch 872/2000 =====\n", + "No improvement in Val ROC AUC for 831 epoch(s). Best is 0.5969. Train Loss: 1.0929, Train Accuracy: 0.3867, Val Loss: 1.0967, Val Accuracy: 0.3644\n", + "===== Epoch 873/2000 =====\n", + "No improvement in Val ROC AUC for 832 epoch(s). Best is 0.5969. Train Loss: 1.0888, Train Accuracy: 0.3757, Val Loss: 1.0986, Val Accuracy: 0.3244\n", + "===== Epoch 874/2000 =====\n", + "No improvement in Val ROC AUC for 833 epoch(s). Best is 0.5969. Train Loss: 1.0930, Train Accuracy: 0.3678, Val Loss: 1.0966, Val Accuracy: 0.3600\n", + "===== Epoch 875/2000 =====\n", + "No improvement in Val ROC AUC for 834 epoch(s). Best is 0.5969. Train Loss: 1.0967, Train Accuracy: 0.3616, Val Loss: 1.1004, Val Accuracy: 0.3644\n", + "===== Epoch 876/2000 =====\n", + "No improvement in Val ROC AUC for 835 epoch(s). Best is 0.5969. Train Loss: 1.0964, Train Accuracy: 0.3435, Val Loss: 1.0906, Val Accuracy: 0.3689\n", + "===== Epoch 877/2000 =====\n", + "No improvement in Val ROC AUC for 836 epoch(s). Best is 0.5969. Train Loss: 1.0892, Train Accuracy: 0.3929, Val Loss: 1.0942, Val Accuracy: 0.3733\n", + "===== Epoch 878/2000 =====\n", + "No improvement in Val ROC AUC for 837 epoch(s). Best is 0.5969. Train Loss: 1.0916, Train Accuracy: 0.3773, Val Loss: 1.0949, Val Accuracy: 0.3556\n", + "===== Epoch 879/2000 =====\n", + "No improvement in Val ROC AUC for 838 epoch(s). Best is 0.5969. Train Loss: 1.0899, Train Accuracy: 0.4008, Val Loss: 1.1052, Val Accuracy: 0.3467\n", + "===== Epoch 880/2000 =====\n", + "No improvement in Val ROC AUC for 839 epoch(s). Best is 0.5969. Train Loss: 1.0951, Train Accuracy: 0.3710, Val Loss: 1.0971, Val Accuracy: 0.3644\n", + "===== Epoch 881/2000 =====\n", + "No improvement in Val ROC AUC for 840 epoch(s). Best is 0.5969. Train Loss: 1.0921, Train Accuracy: 0.3773, Val Loss: 1.0941, Val Accuracy: 0.3733\n", + "===== Epoch 882/2000 =====\n", + "No improvement in Val ROC AUC for 841 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3718, Val Loss: 1.0961, Val Accuracy: 0.3378\n", + "===== Epoch 883/2000 =====\n", + "No improvement in Val ROC AUC for 842 epoch(s). Best is 0.5969. Train Loss: 1.0953, Train Accuracy: 0.3592, Val Loss: 1.0948, Val Accuracy: 0.3822\n", + "===== Epoch 884/2000 =====\n", + "No improvement in Val ROC AUC for 843 epoch(s). Best is 0.5969. Train Loss: 1.0933, Train Accuracy: 0.3686, Val Loss: 1.0962, Val Accuracy: 0.3333\n", + "===== Epoch 885/2000 =====\n", + "No improvement in Val ROC AUC for 844 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3875, Val Loss: 1.0973, Val Accuracy: 0.3778\n", + "===== Epoch 886/2000 =====\n", + "No improvement in Val ROC AUC for 845 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3592, Val Loss: 1.1062, Val Accuracy: 0.3289\n", + "===== Epoch 887/2000 =====\n", + "No improvement in Val ROC AUC for 846 epoch(s). Best is 0.5969. Train Loss: 1.0916, Train Accuracy: 0.3788, Val Loss: 1.0877, Val Accuracy: 0.3911\n", + "===== Epoch 888/2000 =====\n", + "No improvement in Val ROC AUC for 847 epoch(s). Best is 0.5969. Train Loss: 1.0961, Train Accuracy: 0.3694, Val Loss: 1.0982, Val Accuracy: 0.3422\n", + "===== Epoch 889/2000 =====\n", + "No improvement in Val ROC AUC for 848 epoch(s). Best is 0.5969. Train Loss: 1.0947, Train Accuracy: 0.3710, Val Loss: 1.0992, Val Accuracy: 0.3467\n", + "===== Epoch 890/2000 =====\n", + "No improvement in Val ROC AUC for 849 epoch(s). Best is 0.5969. Train Loss: 1.0915, Train Accuracy: 0.3702, Val Loss: 1.0985, Val Accuracy: 0.3422\n", + "===== Epoch 891/2000 =====\n", + "No improvement in Val ROC AUC for 850 epoch(s). Best is 0.5969. Train Loss: 1.0914, Train Accuracy: 0.3788, Val Loss: 1.1045, Val Accuracy: 0.3422\n", + "===== Epoch 892/2000 =====\n", + "No improvement in Val ROC AUC for 851 epoch(s). Best is 0.5969. Train Loss: 1.0924, Train Accuracy: 0.3757, Val Loss: 1.0994, Val Accuracy: 0.3689\n", + "===== Epoch 893/2000 =====\n", + "No improvement in Val ROC AUC for 852 epoch(s). Best is 0.5969. Train Loss: 1.0900, Train Accuracy: 0.3984, Val Loss: 1.0867, Val Accuracy: 0.3867\n", + "===== Epoch 894/2000 =====\n", + "No improvement in Val ROC AUC for 853 epoch(s). Best is 0.5969. Train Loss: 1.0925, Train Accuracy: 0.3890, Val Loss: 1.0869, Val Accuracy: 0.3867\n", + "===== Epoch 895/2000 =====\n", + "No improvement in Val ROC AUC for 854 epoch(s). Best is 0.5969. Train Loss: 1.0930, Train Accuracy: 0.3639, Val Loss: 1.1030, Val Accuracy: 0.3467\n", + "===== Epoch 896/2000 =====\n", + "No improvement in Val ROC AUC for 855 epoch(s). Best is 0.5969. Train Loss: 1.0941, Train Accuracy: 0.3749, Val Loss: 1.0957, Val Accuracy: 0.3778\n", + "===== Epoch 897/2000 =====\n", + "No improvement in Val ROC AUC for 856 epoch(s). Best is 0.5969. Train Loss: 1.0931, Train Accuracy: 0.3843, Val Loss: 1.0967, Val Accuracy: 0.3422\n", + "===== Epoch 898/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5977, Train Loss: 1.0913, Train Accuracy: 0.3890, Val Loss: 1.0861, Val Accuracy: 0.4133\n", + "===== Epoch 899/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5977. Train Loss: 1.0882, Train Accuracy: 0.3820, Val Loss: 1.0857, Val Accuracy: 0.3822\n", + "===== Epoch 900/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6004, Train Loss: 1.0920, Train Accuracy: 0.3725, Val Loss: 1.0868, Val Accuracy: 0.4311\n", + "===== Epoch 901/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6004. Train Loss: 1.0928, Train Accuracy: 0.3655, Val Loss: 1.1003, Val Accuracy: 0.3556\n", + "===== Epoch 902/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6004. Train Loss: 1.0926, Train Accuracy: 0.3765, Val Loss: 1.1023, Val Accuracy: 0.3333\n", + "===== Epoch 903/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6004. Train Loss: 1.0950, Train Accuracy: 0.3718, Val Loss: 1.0892, Val Accuracy: 0.4000\n", + "===== Epoch 904/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6004. Train Loss: 1.0907, Train Accuracy: 0.3937, Val Loss: 1.0883, Val Accuracy: 0.3867\n", + "===== Epoch 905/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6088, Train Loss: 1.0877, Train Accuracy: 0.3945, Val Loss: 1.0785, Val Accuracy: 0.4311\n", + "===== Epoch 906/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6088. Train Loss: 1.0890, Train Accuracy: 0.3969, Val Loss: 1.0869, Val Accuracy: 0.3867\n", + "===== Epoch 907/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6088. Train Loss: 1.0879, Train Accuracy: 0.3937, Val Loss: 1.0924, Val Accuracy: 0.3778\n", + "===== Epoch 908/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6088. Train Loss: 1.0875, Train Accuracy: 0.3929, Val Loss: 1.0966, Val Accuracy: 0.3600\n", + "===== Epoch 909/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6088. Train Loss: 1.0860, Train Accuracy: 0.4063, Val Loss: 1.0850, Val Accuracy: 0.4267\n", + "===== Epoch 910/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6088. Train Loss: 1.0829, Train Accuracy: 0.4055, Val Loss: 1.0867, Val Accuracy: 0.3644\n", + "===== Epoch 911/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6088. Train Loss: 1.0858, Train Accuracy: 0.4031, Val Loss: 1.0786, Val Accuracy: 0.3956\n", + "===== Epoch 912/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6088. Train Loss: 1.0883, Train Accuracy: 0.3788, Val Loss: 1.0749, Val Accuracy: 0.4089\n", + "===== Epoch 913/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6088. Train Loss: 1.0846, Train Accuracy: 0.4071, Val Loss: 1.0892, Val Accuracy: 0.3556\n", + "===== Epoch 914/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6088. Train Loss: 1.0925, Train Accuracy: 0.3796, Val Loss: 1.0950, Val Accuracy: 0.3378\n", + "===== Epoch 915/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6088. Train Loss: 1.0853, Train Accuracy: 0.3929, Val Loss: 1.0921, Val Accuracy: 0.3333\n", + "===== Epoch 916/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6088. Train Loss: 1.0878, Train Accuracy: 0.4047, Val Loss: 1.0852, Val Accuracy: 0.4089\n", + "===== Epoch 917/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4149, Val Loss: 1.0946, Val Accuracy: 0.3822\n", + "===== Epoch 918/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6088. Train Loss: 1.0897, Train Accuracy: 0.3851, Val Loss: 1.0914, Val Accuracy: 0.3422\n", + "===== Epoch 919/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6088. Train Loss: 1.0826, Train Accuracy: 0.4047, Val Loss: 1.0778, Val Accuracy: 0.4089\n", + "===== Epoch 920/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6088. Train Loss: 1.0830, Train Accuracy: 0.4243, Val Loss: 1.1010, Val Accuracy: 0.3556\n", + "===== Epoch 921/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6088. Train Loss: 1.0900, Train Accuracy: 0.3710, Val Loss: 1.0893, Val Accuracy: 0.4133\n", + "===== Epoch 922/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6088. Train Loss: 1.0804, Train Accuracy: 0.4055, Val Loss: 1.0775, Val Accuracy: 0.4044\n", + "===== Epoch 923/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6088. Train Loss: 1.0826, Train Accuracy: 0.4055, Val Loss: 1.0889, Val Accuracy: 0.3644\n", + "===== Epoch 924/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6088. Train Loss: 1.0870, Train Accuracy: 0.3984, Val Loss: 1.0739, Val Accuracy: 0.4400\n", + "===== Epoch 925/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4055, Val Loss: 1.0974, Val Accuracy: 0.3733\n", + "===== Epoch 926/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6088. Train Loss: 1.0832, Train Accuracy: 0.3969, Val Loss: 1.0772, Val Accuracy: 0.3867\n", + "===== Epoch 927/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6088. Train Loss: 1.0837, Train Accuracy: 0.4149, Val Loss: 1.0944, Val Accuracy: 0.3733\n", + "===== Epoch 928/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6088. Train Loss: 1.0792, Train Accuracy: 0.4024, Val Loss: 1.0933, Val Accuracy: 0.3644\n", + "===== Epoch 929/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6088. Train Loss: 1.0847, Train Accuracy: 0.3984, Val Loss: 1.0856, Val Accuracy: 0.4133\n", + "===== Epoch 930/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6088. Train Loss: 1.0794, Train Accuracy: 0.4220, Val Loss: 1.0805, Val Accuracy: 0.4133\n", + "===== Epoch 931/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6088. Train Loss: 1.0860, Train Accuracy: 0.3875, Val Loss: 1.0857, Val Accuracy: 0.3911\n", + "===== Epoch 932/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6088. Train Loss: 1.0758, Train Accuracy: 0.4157, Val Loss: 1.0762, Val Accuracy: 0.4222\n", + "===== Epoch 933/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6088. Train Loss: 1.0834, Train Accuracy: 0.3929, Val Loss: 1.0884, Val Accuracy: 0.4089\n", + "===== Epoch 934/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6088. Train Loss: 1.0870, Train Accuracy: 0.3898, Val Loss: 1.0808, Val Accuracy: 0.3867\n", + "===== Epoch 935/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4133, Val Loss: 1.0929, Val Accuracy: 0.3911\n", + "===== Epoch 936/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6088. Train Loss: 1.0783, Train Accuracy: 0.4110, Val Loss: 1.0767, Val Accuracy: 0.4089\n", + "===== Epoch 937/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6088. Train Loss: 1.0763, Train Accuracy: 0.4235, Val Loss: 1.0837, Val Accuracy: 0.4000\n", + "===== Epoch 938/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6088. Train Loss: 1.0835, Train Accuracy: 0.3984, Val Loss: 1.0842, Val Accuracy: 0.4044\n", + "===== Epoch 939/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6088. Train Loss: 1.0794, Train Accuracy: 0.4102, Val Loss: 1.0832, Val Accuracy: 0.3911\n", + "===== Epoch 940/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6088. Train Loss: 1.0832, Train Accuracy: 0.3976, Val Loss: 1.0848, Val Accuracy: 0.4089\n", + "===== Epoch 941/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6088. Train Loss: 1.0827, Train Accuracy: 0.4055, Val Loss: 1.0729, Val Accuracy: 0.4356\n", + "===== Epoch 942/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6088. Train Loss: 1.0874, Train Accuracy: 0.3835, Val Loss: 1.0749, Val Accuracy: 0.4267\n", + "===== Epoch 943/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6088. Train Loss: 1.0813, Train Accuracy: 0.3961, Val Loss: 1.0807, Val Accuracy: 0.4178\n", + "===== Epoch 944/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6088. Train Loss: 1.0824, Train Accuracy: 0.4133, Val Loss: 1.0780, Val Accuracy: 0.4178\n", + "===== Epoch 945/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6088. Train Loss: 1.0779, Train Accuracy: 0.4204, Val Loss: 1.0851, Val Accuracy: 0.4089\n", + "===== Epoch 946/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6088. Train Loss: 1.0784, Train Accuracy: 0.4180, Val Loss: 1.0824, Val Accuracy: 0.4178\n", + "===== Epoch 947/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6088. Train Loss: 1.0775, Train Accuracy: 0.4149, Val Loss: 1.0800, Val Accuracy: 0.4044\n", + "===== Epoch 948/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6088. Train Loss: 1.0723, Train Accuracy: 0.4290, Val Loss: 1.0782, Val Accuracy: 0.4000\n", + "===== Epoch 949/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6088. Train Loss: 1.0867, Train Accuracy: 0.3835, Val Loss: 1.0787, Val Accuracy: 0.4133\n", + "===== Epoch 950/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6088. Train Loss: 1.0749, Train Accuracy: 0.4235, Val Loss: 1.0824, Val Accuracy: 0.3911\n", + "===== Epoch 951/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6088. Train Loss: 1.0792, Train Accuracy: 0.4055, Val Loss: 1.0809, Val Accuracy: 0.4044\n", + "===== Epoch 952/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6088. Train Loss: 1.0828, Train Accuracy: 0.4039, Val Loss: 1.0739, Val Accuracy: 0.4000\n", + "===== Epoch 953/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4071, Val Loss: 1.0858, Val Accuracy: 0.3600\n", + "===== Epoch 954/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6088. Train Loss: 1.0809, Train Accuracy: 0.4086, Val Loss: 1.0849, Val Accuracy: 0.4044\n", + "===== Epoch 955/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.6088. Train Loss: 1.0810, Train Accuracy: 0.4157, Val Loss: 1.0778, Val Accuracy: 0.4133\n", + "===== Epoch 956/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.6088. Train Loss: 1.0841, Train Accuracy: 0.3922, Val Loss: 1.0833, Val Accuracy: 0.4000\n", + "===== Epoch 957/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.6088. Train Loss: 1.0770, Train Accuracy: 0.4086, Val Loss: 1.0867, Val Accuracy: 0.3467\n", + "===== Epoch 958/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.6088. Train Loss: 1.0790, Train Accuracy: 0.4102, Val Loss: 1.0799, Val Accuracy: 0.4044\n", + "===== Epoch 959/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.6088. Train Loss: 1.0779, Train Accuracy: 0.4024, Val Loss: 1.0836, Val Accuracy: 0.3911\n", + "===== Epoch 960/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4094, Val Loss: 1.0849, Val Accuracy: 0.3867\n", + "===== Epoch 961/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.6088. Train Loss: 1.0801, Train Accuracy: 0.4008, Val Loss: 1.0945, Val Accuracy: 0.3511\n", + "===== Epoch 962/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.6088. Train Loss: 1.0812, Train Accuracy: 0.3984, Val Loss: 1.0812, Val Accuracy: 0.4000\n", + "===== Epoch 963/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.6088. Train Loss: 1.0769, Train Accuracy: 0.4031, Val Loss: 1.0807, Val Accuracy: 0.4089\n", + "===== Epoch 964/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6132, Train Loss: 1.0724, Train Accuracy: 0.4118, Val Loss: 1.0708, Val Accuracy: 0.4444\n", + "===== Epoch 965/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6132. Train Loss: 1.0782, Train Accuracy: 0.4204, Val Loss: 1.0912, Val Accuracy: 0.3822\n", + "===== Epoch 966/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6132. Train Loss: 1.0823, Train Accuracy: 0.3937, Val Loss: 1.0872, Val Accuracy: 0.3956\n", + "===== Epoch 967/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6132. Train Loss: 1.0748, Train Accuracy: 0.4180, Val Loss: 1.0794, Val Accuracy: 0.4311\n", + "===== Epoch 968/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6132. Train Loss: 1.0786, Train Accuracy: 0.4188, Val Loss: 1.1023, Val Accuracy: 0.3778\n", + "===== Epoch 969/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6132. Train Loss: 1.0742, Train Accuracy: 0.4204, Val Loss: 1.0890, Val Accuracy: 0.3644\n", + "===== Epoch 970/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6132. Train Loss: 1.0763, Train Accuracy: 0.4133, Val Loss: 1.0833, Val Accuracy: 0.3956\n", + "===== Epoch 971/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6132. Train Loss: 1.0817, Train Accuracy: 0.4000, Val Loss: 1.0943, Val Accuracy: 0.3600\n", + "===== Epoch 972/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6132. Train Loss: 1.0739, Train Accuracy: 0.4180, Val Loss: 1.0763, Val Accuracy: 0.4356\n", + "===== Epoch 973/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6132. Train Loss: 1.0780, Train Accuracy: 0.4078, Val Loss: 1.0725, Val Accuracy: 0.4178\n", + "===== Epoch 974/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6184, Train Loss: 1.0705, Train Accuracy: 0.4384, Val Loss: 1.0782, Val Accuracy: 0.3956\n", + "===== Epoch 975/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6184. Train Loss: 1.0783, Train Accuracy: 0.4227, Val Loss: 1.1000, Val Accuracy: 0.3333\n", + "===== Epoch 976/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6184. Train Loss: 1.0752, Train Accuracy: 0.4039, Val Loss: 1.0871, Val Accuracy: 0.4267\n", + "===== Epoch 977/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6184. Train Loss: 1.0813, Train Accuracy: 0.3992, Val Loss: 1.0766, Val Accuracy: 0.4222\n", + "===== Epoch 978/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6184. Train Loss: 1.0711, Train Accuracy: 0.4086, Val Loss: 1.0726, Val Accuracy: 0.4356\n", + "===== Epoch 979/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6184. Train Loss: 1.0826, Train Accuracy: 0.3812, Val Loss: 1.0752, Val Accuracy: 0.4222\n", + "===== Epoch 980/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6184. Train Loss: 1.0720, Train Accuracy: 0.4086, Val Loss: 1.1013, Val Accuracy: 0.3467\n", + "===== Epoch 981/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6184. Train Loss: 1.0785, Train Accuracy: 0.4063, Val Loss: 1.0740, Val Accuracy: 0.3867\n", + "===== Epoch 982/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6184. Train Loss: 1.0769, Train Accuracy: 0.4227, Val Loss: 1.0634, Val Accuracy: 0.4178\n", + "===== Epoch 983/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6184. Train Loss: 1.0769, Train Accuracy: 0.4204, Val Loss: 1.1043, Val Accuracy: 0.3200\n", + "===== Epoch 984/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6365, Train Loss: 1.0769, Train Accuracy: 0.4039, Val Loss: 1.0717, Val Accuracy: 0.4178\n", + "===== Epoch 985/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6365. Train Loss: 1.0762, Train Accuracy: 0.4133, Val Loss: 1.0962, Val Accuracy: 0.3644\n", + "===== Epoch 986/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6365. Train Loss: 1.0822, Train Accuracy: 0.4086, Val Loss: 1.0631, Val Accuracy: 0.4444\n", + "===== Epoch 987/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6365. Train Loss: 1.0737, Train Accuracy: 0.4149, Val Loss: 1.0715, Val Accuracy: 0.4178\n", + "===== Epoch 988/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6365. Train Loss: 1.0717, Train Accuracy: 0.4173, Val Loss: 1.0927, Val Accuracy: 0.3600\n", + "===== Epoch 989/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6365. Train Loss: 1.0709, Train Accuracy: 0.4298, Val Loss: 1.0661, Val Accuracy: 0.4800\n", + "===== Epoch 990/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6365. Train Loss: 1.0735, Train Accuracy: 0.4314, Val Loss: 1.0650, Val Accuracy: 0.4356\n", + "===== Epoch 991/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6365. Train Loss: 1.0785, Train Accuracy: 0.4110, Val Loss: 1.0706, Val Accuracy: 0.4133\n", + "===== Epoch 992/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6365. Train Loss: 1.0750, Train Accuracy: 0.4063, Val Loss: 1.0642, Val Accuracy: 0.4444\n", + "===== Epoch 993/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6365. Train Loss: 1.0700, Train Accuracy: 0.4329, Val Loss: 1.0789, Val Accuracy: 0.4000\n", + "===== Epoch 994/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6365. Train Loss: 1.0736, Train Accuracy: 0.4196, Val Loss: 1.0716, Val Accuracy: 0.4178\n", + "===== Epoch 995/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6365. Train Loss: 1.0753, Train Accuracy: 0.4071, Val Loss: 1.0667, Val Accuracy: 0.4133\n", + "===== Epoch 996/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6365. Train Loss: 1.0656, Train Accuracy: 0.4220, Val Loss: 1.0870, Val Accuracy: 0.3911\n", + "===== Epoch 997/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6365. Train Loss: 1.0712, Train Accuracy: 0.4016, Val Loss: 1.0680, Val Accuracy: 0.4133\n", + "===== Epoch 998/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6464, Train Loss: 1.0715, Train Accuracy: 0.4314, Val Loss: 1.0591, Val Accuracy: 0.4533\n", + "===== Epoch 999/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6464. Train Loss: 1.0705, Train Accuracy: 0.4180, Val Loss: 1.0641, Val Accuracy: 0.4489\n", + "===== Epoch 1000/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6464. Train Loss: 1.0630, Train Accuracy: 0.4369, Val Loss: 1.1075, Val Accuracy: 0.3822\n", + "===== Epoch 1001/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6464. Train Loss: 1.0628, Train Accuracy: 0.4290, Val Loss: 1.0811, Val Accuracy: 0.4133\n", + "===== Epoch 1002/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6464. Train Loss: 1.0637, Train Accuracy: 0.4306, Val Loss: 1.0521, Val Accuracy: 0.4711\n", + "===== Epoch 1003/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6464. Train Loss: 1.0626, Train Accuracy: 0.4227, Val Loss: 1.0708, Val Accuracy: 0.4222\n", + "===== Epoch 1004/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6464. Train Loss: 1.0592, Train Accuracy: 0.4376, Val Loss: 1.0528, Val Accuracy: 0.4444\n", + "===== Epoch 1005/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6464. Train Loss: 1.0834, Train Accuracy: 0.4071, Val Loss: 1.0554, Val Accuracy: 0.4578\n", + "===== Epoch 1006/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6464. Train Loss: 1.0523, Train Accuracy: 0.4518, Val Loss: 1.0538, Val Accuracy: 0.4578\n", + "===== Epoch 1007/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6464. Train Loss: 1.0687, Train Accuracy: 0.4125, Val Loss: 1.0781, Val Accuracy: 0.3956\n", + "===== Epoch 1008/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6526, Train Loss: 1.0644, Train Accuracy: 0.4400, Val Loss: 1.0403, Val Accuracy: 0.4933\n", + "===== Epoch 1009/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6526. Train Loss: 1.0649, Train Accuracy: 0.4118, Val Loss: 1.0541, Val Accuracy: 0.4444\n", + "===== Epoch 1010/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6526. Train Loss: 1.0674, Train Accuracy: 0.4220, Val Loss: 1.0647, Val Accuracy: 0.4133\n", + "===== Epoch 1011/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6750, Train Loss: 1.0540, Train Accuracy: 0.4337, Val Loss: 1.0707, Val Accuracy: 0.4133\n", + "===== Epoch 1012/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6750. Train Loss: 1.0566, Train Accuracy: 0.4494, Val Loss: 1.0740, Val Accuracy: 0.4267\n", + "===== Epoch 1013/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6750. Train Loss: 1.0480, Train Accuracy: 0.4502, Val Loss: 1.0557, Val Accuracy: 0.4356\n", + "===== Epoch 1014/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6750. Train Loss: 1.0507, Train Accuracy: 0.4580, Val Loss: 1.0470, Val Accuracy: 0.4533\n", + "===== Epoch 1015/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6750. Train Loss: 1.0620, Train Accuracy: 0.4243, Val Loss: 1.0309, Val Accuracy: 0.4444\n", + "===== Epoch 1016/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6750. Train Loss: 1.0557, Train Accuracy: 0.4439, Val Loss: 1.0431, Val Accuracy: 0.4578\n", + "===== Epoch 1017/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6750. Train Loss: 1.0499, Train Accuracy: 0.4345, Val Loss: 1.0741, Val Accuracy: 0.4178\n", + "===== Epoch 1018/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6750. Train Loss: 1.0322, Train Accuracy: 0.4698, Val Loss: 1.0455, Val Accuracy: 0.4356\n", + "===== Epoch 1019/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6750. Train Loss: 1.0467, Train Accuracy: 0.4620, Val Loss: 1.0541, Val Accuracy: 0.4089\n", + "===== Epoch 1020/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6750. Train Loss: 1.0540, Train Accuracy: 0.4400, Val Loss: 1.0356, Val Accuracy: 0.4533\n", + "===== Epoch 1021/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6750. Train Loss: 1.0589, Train Accuracy: 0.4259, Val Loss: 1.0314, Val Accuracy: 0.4844\n", + "===== Epoch 1022/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6750. Train Loss: 1.0500, Train Accuracy: 0.4424, Val Loss: 1.0514, Val Accuracy: 0.4178\n", + "===== Epoch 1023/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6750. Train Loss: 1.0581, Train Accuracy: 0.4298, Val Loss: 1.0337, Val Accuracy: 0.5067\n", + "===== Epoch 1024/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6750. Train Loss: 1.0490, Train Accuracy: 0.4463, Val Loss: 1.0342, Val Accuracy: 0.4622\n", + "===== Epoch 1025/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6750. Train Loss: 1.0516, Train Accuracy: 0.4314, Val Loss: 1.0254, Val Accuracy: 0.4889\n", + "===== Epoch 1026/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6750. Train Loss: 1.0505, Train Accuracy: 0.4384, Val Loss: 1.0282, Val Accuracy: 0.4533\n", + "===== Epoch 1027/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6750. Train Loss: 1.0429, Train Accuracy: 0.4620, Val Loss: 1.0176, Val Accuracy: 0.4800\n", + "===== Epoch 1028/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6750. Train Loss: 1.0512, Train Accuracy: 0.4478, Val Loss: 1.0483, Val Accuracy: 0.4400\n", + "===== Epoch 1029/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6750. Train Loss: 1.0431, Train Accuracy: 0.4573, Val Loss: 1.0377, Val Accuracy: 0.4578\n", + "===== Epoch 1030/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6750. Train Loss: 1.0424, Train Accuracy: 0.4494, Val Loss: 1.0414, Val Accuracy: 0.4444\n", + "===== Epoch 1031/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6750. Train Loss: 1.0445, Train Accuracy: 0.4557, Val Loss: 1.0527, Val Accuracy: 0.4489\n", + "===== Epoch 1032/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7015, Train Loss: 1.0401, Train Accuracy: 0.4533, Val Loss: 1.0182, Val Accuracy: 0.4533\n", + "===== Epoch 1033/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7015. Train Loss: 1.0360, Train Accuracy: 0.4682, Val Loss: 1.0387, Val Accuracy: 0.4489\n", + "===== Epoch 1034/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7015. Train Loss: 1.0377, Train Accuracy: 0.4659, Val Loss: 1.0348, Val Accuracy: 0.5200\n", + "===== Epoch 1035/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7015. Train Loss: 1.0465, Train Accuracy: 0.4439, Val Loss: 1.0508, Val Accuracy: 0.4578\n", + "===== Epoch 1036/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7015. Train Loss: 1.0506, Train Accuracy: 0.4478, Val Loss: 1.0294, Val Accuracy: 0.4311\n", + "===== Epoch 1037/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7015. Train Loss: 1.0551, Train Accuracy: 0.4486, Val Loss: 1.0244, Val Accuracy: 0.4711\n", + "===== Epoch 1038/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7015. Train Loss: 1.0524, Train Accuracy: 0.4471, Val Loss: 1.0380, Val Accuracy: 0.4622\n", + "===== Epoch 1039/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7015. Train Loss: 1.0409, Train Accuracy: 0.4580, Val Loss: 1.0490, Val Accuracy: 0.4667\n", + "===== Epoch 1040/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7016, Train Loss: 1.0394, Train Accuracy: 0.4580, Val Loss: 1.0140, Val Accuracy: 0.4933\n", + "===== Epoch 1041/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7016. Train Loss: 1.0404, Train Accuracy: 0.4698, Val Loss: 1.0507, Val Accuracy: 0.4178\n", + "===== Epoch 1042/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7016. Train Loss: 1.0432, Train Accuracy: 0.4690, Val Loss: 1.0521, Val Accuracy: 0.4400\n", + "===== Epoch 1043/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7016. Train Loss: 1.0325, Train Accuracy: 0.4588, Val Loss: 1.0207, Val Accuracy: 0.5022\n", + "===== Epoch 1044/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7016. Train Loss: 1.0473, Train Accuracy: 0.4533, Val Loss: 1.0257, Val Accuracy: 0.4978\n", + "===== Epoch 1045/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7016. Train Loss: 1.0379, Train Accuracy: 0.4549, Val Loss: 1.0370, Val Accuracy: 0.4756\n", + "===== Epoch 1046/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7016. Train Loss: 1.0372, Train Accuracy: 0.4573, Val Loss: 1.0687, Val Accuracy: 0.3956\n", + "===== Epoch 1047/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7016. Train Loss: 1.0506, Train Accuracy: 0.4439, Val Loss: 1.0088, Val Accuracy: 0.4978\n", + "===== Epoch 1048/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7016. Train Loss: 1.0499, Train Accuracy: 0.4486, Val Loss: 1.0361, Val Accuracy: 0.4533\n", + "===== Epoch 1049/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7016. Train Loss: 1.0565, Train Accuracy: 0.4431, Val Loss: 1.0266, Val Accuracy: 0.4533\n", + "===== Epoch 1050/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7016. Train Loss: 1.0388, Train Accuracy: 0.4463, Val Loss: 1.0557, Val Accuracy: 0.4178\n", + "===== Epoch 1051/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7016. Train Loss: 1.0468, Train Accuracy: 0.4510, Val Loss: 1.0540, Val Accuracy: 0.4267\n", + "===== Epoch 1052/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7016. Train Loss: 1.0418, Train Accuracy: 0.4525, Val Loss: 1.0399, Val Accuracy: 0.4800\n", + "===== Epoch 1053/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7016. Train Loss: 1.0397, Train Accuracy: 0.4604, Val Loss: 1.0458, Val Accuracy: 0.4178\n", + "===== Epoch 1054/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7016. Train Loss: 1.0388, Train Accuracy: 0.4525, Val Loss: 1.0468, Val Accuracy: 0.4489\n", + "===== Epoch 1055/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7016. Train Loss: 1.0416, Train Accuracy: 0.4604, Val Loss: 1.0280, Val Accuracy: 0.4933\n", + "===== Epoch 1056/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7016. Train Loss: 1.0485, Train Accuracy: 0.4392, Val Loss: 1.0162, Val Accuracy: 0.4578\n", + "===== Epoch 1057/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7016. Train Loss: 1.0494, Train Accuracy: 0.4212, Val Loss: 1.0474, Val Accuracy: 0.4844\n", + "===== Epoch 1058/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7016. Train Loss: 1.0455, Train Accuracy: 0.4573, Val Loss: 1.0407, Val Accuracy: 0.4622\n", + "===== Epoch 1059/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7016. Train Loss: 1.0386, Train Accuracy: 0.4722, Val Loss: 1.0322, Val Accuracy: 0.4400\n", + "===== Epoch 1060/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7016. Train Loss: 1.0360, Train Accuracy: 0.4431, Val Loss: 1.0459, Val Accuracy: 0.4400\n", + "===== Epoch 1061/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7016. Train Loss: 1.0468, Train Accuracy: 0.4541, Val Loss: 1.0084, Val Accuracy: 0.5067\n", + "===== Epoch 1062/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7016. Train Loss: 1.0359, Train Accuracy: 0.4761, Val Loss: 1.0315, Val Accuracy: 0.5022\n", + "===== Epoch 1063/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7016. Train Loss: 1.0307, Train Accuracy: 0.4816, Val Loss: 1.0190, Val Accuracy: 0.5111\n", + "===== Epoch 1064/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7016. Train Loss: 1.0561, Train Accuracy: 0.4486, Val Loss: 1.0420, Val Accuracy: 0.4267\n", + "===== Epoch 1065/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7016. Train Loss: 1.0453, Train Accuracy: 0.4471, Val Loss: 1.0327, Val Accuracy: 0.4178\n", + "===== Epoch 1066/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7016. Train Loss: 1.0265, Train Accuracy: 0.4745, Val Loss: 1.0388, Val Accuracy: 0.4222\n", + "===== Epoch 1067/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7016. Train Loss: 1.0438, Train Accuracy: 0.4596, Val Loss: 1.0290, Val Accuracy: 0.4578\n", + "===== Epoch 1068/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7016. Train Loss: 1.0527, Train Accuracy: 0.4369, Val Loss: 1.0475, Val Accuracy: 0.4356\n", + "===== Epoch 1069/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7016. Train Loss: 1.0305, Train Accuracy: 0.4667, Val Loss: 1.0490, Val Accuracy: 0.4444\n", + "===== Epoch 1070/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7016. Train Loss: 1.0539, Train Accuracy: 0.4533, Val Loss: 1.0312, Val Accuracy: 0.4756\n", + "===== Epoch 1071/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7016. Train Loss: 1.0324, Train Accuracy: 0.4706, Val Loss: 1.0320, Val Accuracy: 0.4889\n", + "===== Epoch 1072/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7016. Train Loss: 1.0378, Train Accuracy: 0.4769, Val Loss: 1.0407, Val Accuracy: 0.4444\n", + "===== Epoch 1073/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7016. Train Loss: 1.0530, Train Accuracy: 0.4392, Val Loss: 1.0434, Val Accuracy: 0.4533\n", + "===== Epoch 1074/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7016. Train Loss: 1.0387, Train Accuracy: 0.4533, Val Loss: 1.0498, Val Accuracy: 0.4267\n", + "===== Epoch 1075/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7066, Train Loss: 1.0332, Train Accuracy: 0.4565, Val Loss: 0.9992, Val Accuracy: 0.5778\n", + "===== Epoch 1076/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7066. Train Loss: 1.0428, Train Accuracy: 0.4384, Val Loss: 1.0530, Val Accuracy: 0.4133\n", + "===== Epoch 1077/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7066. Train Loss: 1.0310, Train Accuracy: 0.4706, Val Loss: 1.0184, Val Accuracy: 0.4844\n", + "===== Epoch 1078/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7066. Train Loss: 1.0348, Train Accuracy: 0.4635, Val Loss: 1.0149, Val Accuracy: 0.4622\n", + "===== Epoch 1079/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7066. Train Loss: 1.0278, Train Accuracy: 0.4588, Val Loss: 1.0091, Val Accuracy: 0.5022\n", + "===== Epoch 1080/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7066. Train Loss: 1.0519, Train Accuracy: 0.4463, Val Loss: 1.0264, Val Accuracy: 0.4267\n", + "===== Epoch 1081/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7066. Train Loss: 1.0385, Train Accuracy: 0.4651, Val Loss: 1.0306, Val Accuracy: 0.4533\n", + "===== Epoch 1082/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7066. Train Loss: 1.0424, Train Accuracy: 0.4518, Val Loss: 1.0311, Val Accuracy: 0.4444\n", + "===== Epoch 1083/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7066. Train Loss: 1.0312, Train Accuracy: 0.4706, Val Loss: 1.0300, Val Accuracy: 0.4356\n", + "===== Epoch 1084/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7066. Train Loss: 1.0348, Train Accuracy: 0.4604, Val Loss: 1.0489, Val Accuracy: 0.4089\n", + "===== Epoch 1085/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7066. Train Loss: 1.0322, Train Accuracy: 0.4643, Val Loss: 1.0258, Val Accuracy: 0.4356\n", + "===== Epoch 1086/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7066. Train Loss: 1.0410, Train Accuracy: 0.4627, Val Loss: 1.0153, Val Accuracy: 0.4578\n", + "===== Epoch 1087/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7066. Train Loss: 1.0338, Train Accuracy: 0.4620, Val Loss: 1.0156, Val Accuracy: 0.4578\n", + "===== Epoch 1088/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7066. Train Loss: 1.0478, Train Accuracy: 0.4439, Val Loss: 1.0399, Val Accuracy: 0.4222\n", + "===== Epoch 1089/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7066. Train Loss: 1.0403, Train Accuracy: 0.4714, Val Loss: 1.0348, Val Accuracy: 0.4578\n", + "===== Epoch 1090/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7204, Train Loss: 1.0500, Train Accuracy: 0.4573, Val Loss: 1.0082, Val Accuracy: 0.4933\n", + "===== Epoch 1091/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7204. Train Loss: 1.0277, Train Accuracy: 0.4627, Val Loss: 1.0193, Val Accuracy: 0.4533\n", + "===== Epoch 1092/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7204. Train Loss: 1.0243, Train Accuracy: 0.4800, Val Loss: 1.0175, Val Accuracy: 0.4667\n", + "===== Epoch 1093/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7204. Train Loss: 1.0431, Train Accuracy: 0.4886, Val Loss: 0.9945, Val Accuracy: 0.4844\n", + "===== Epoch 1094/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7204. Train Loss: 1.0345, Train Accuracy: 0.4620, Val Loss: 1.0187, Val Accuracy: 0.4800\n", + "===== Epoch 1095/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7204. Train Loss: 1.0416, Train Accuracy: 0.4565, Val Loss: 1.0158, Val Accuracy: 0.4978\n", + "===== Epoch 1096/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7255, Train Loss: 1.0278, Train Accuracy: 0.4729, Val Loss: 0.9820, Val Accuracy: 0.5156\n", + "===== Epoch 1097/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7255. Train Loss: 1.0225, Train Accuracy: 0.4753, Val Loss: 0.9916, Val Accuracy: 0.5200\n", + "===== Epoch 1098/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7255. Train Loss: 1.0196, Train Accuracy: 0.4753, Val Loss: 1.0052, Val Accuracy: 0.4933\n", + "===== Epoch 1099/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7255. Train Loss: 1.0412, Train Accuracy: 0.4541, Val Loss: 1.0324, Val Accuracy: 0.4356\n", + "===== Epoch 1100/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7255. Train Loss: 1.0207, Train Accuracy: 0.4769, Val Loss: 1.0028, Val Accuracy: 0.4933\n", + "===== Epoch 1101/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7255. Train Loss: 1.0174, Train Accuracy: 0.4824, Val Loss: 1.0529, Val Accuracy: 0.4133\n", + "===== Epoch 1102/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7255. Train Loss: 1.0248, Train Accuracy: 0.4792, Val Loss: 1.0735, Val Accuracy: 0.4267\n", + "===== Epoch 1103/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7255. Train Loss: 1.0378, Train Accuracy: 0.4698, Val Loss: 1.0002, Val Accuracy: 0.4978\n", + "===== Epoch 1104/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7255. Train Loss: 1.0205, Train Accuracy: 0.4784, Val Loss: 1.0001, Val Accuracy: 0.4889\n", + "===== Epoch 1105/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7255. Train Loss: 1.0274, Train Accuracy: 0.4863, Val Loss: 0.9907, Val Accuracy: 0.5067\n", + "===== Epoch 1106/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7255. Train Loss: 1.0142, Train Accuracy: 0.4933, Val Loss: 0.9986, Val Accuracy: 0.5244\n", + "===== Epoch 1107/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7255. Train Loss: 1.0183, Train Accuracy: 0.4941, Val Loss: 0.9969, Val Accuracy: 0.5644\n", + "===== Epoch 1108/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7255. Train Loss: 1.0158, Train Accuracy: 0.4886, Val Loss: 0.9735, Val Accuracy: 0.5200\n", + "===== Epoch 1109/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7255. Train Loss: 1.0141, Train Accuracy: 0.4863, Val Loss: 0.9951, Val Accuracy: 0.5067\n", + "===== Epoch 1110/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7255. Train Loss: 1.0136, Train Accuracy: 0.4949, Val Loss: 0.9691, Val Accuracy: 0.5022\n", + "===== Epoch 1111/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7255. Train Loss: 1.0136, Train Accuracy: 0.4839, Val Loss: 1.0241, Val Accuracy: 0.4533\n", + "===== Epoch 1112/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7255. Train Loss: 1.0087, Train Accuracy: 0.4949, Val Loss: 1.0163, Val Accuracy: 0.4622\n", + "===== Epoch 1113/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7255. Train Loss: 1.0218, Train Accuracy: 0.4706, Val Loss: 1.0498, Val Accuracy: 0.3911\n", + "===== Epoch 1114/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7255. Train Loss: 1.0072, Train Accuracy: 0.4878, Val Loss: 0.9653, Val Accuracy: 0.5156\n", + "===== Epoch 1115/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7255. Train Loss: 1.0098, Train Accuracy: 0.4902, Val Loss: 0.9772, Val Accuracy: 0.5289\n", + "===== Epoch 1116/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7304, Train Loss: 1.0044, Train Accuracy: 0.5098, Val Loss: 0.9652, Val Accuracy: 0.5200\n", + "===== Epoch 1117/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7304. Train Loss: 1.0054, Train Accuracy: 0.5020, Val Loss: 0.9951, Val Accuracy: 0.4933\n", + "===== Epoch 1118/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7304. Train Loss: 1.0073, Train Accuracy: 0.4918, Val Loss: 0.9873, Val Accuracy: 0.5156\n", + "===== Epoch 1119/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7304. Train Loss: 1.0026, Train Accuracy: 0.4925, Val Loss: 0.9864, Val Accuracy: 0.5600\n", + "===== Epoch 1120/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7593, Train Loss: 1.0045, Train Accuracy: 0.5106, Val Loss: 0.9478, Val Accuracy: 0.5733\n", + "===== Epoch 1121/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7593. Train Loss: 1.0022, Train Accuracy: 0.5035, Val Loss: 0.9926, Val Accuracy: 0.5156\n", + "===== Epoch 1122/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7593. Train Loss: 0.9962, Train Accuracy: 0.5075, Val Loss: 0.9590, Val Accuracy: 0.5289\n", + "===== Epoch 1123/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7593. Train Loss: 1.0006, Train Accuracy: 0.4831, Val Loss: 0.9796, Val Accuracy: 0.5378\n", + "===== Epoch 1124/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7593. Train Loss: 1.0020, Train Accuracy: 0.4871, Val Loss: 0.9804, Val Accuracy: 0.4889\n", + "===== Epoch 1125/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7593. Train Loss: 1.0044, Train Accuracy: 0.4973, Val Loss: 0.9547, Val Accuracy: 0.5333\n", + "===== Epoch 1126/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7593. Train Loss: 0.9972, Train Accuracy: 0.5027, Val Loss: 0.9761, Val Accuracy: 0.5467\n", + "===== Epoch 1127/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7593. Train Loss: 0.9861, Train Accuracy: 0.5122, Val Loss: 0.9493, Val Accuracy: 0.5378\n", + "===== Epoch 1128/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7593. Train Loss: 0.9995, Train Accuracy: 0.5004, Val Loss: 0.9489, Val Accuracy: 0.5778\n", + "===== Epoch 1129/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7593. Train Loss: 0.9846, Train Accuracy: 0.5106, Val Loss: 0.9460, Val Accuracy: 0.5333\n", + "===== Epoch 1130/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7593. Train Loss: 0.9877, Train Accuracy: 0.4957, Val Loss: 0.9757, Val Accuracy: 0.4844\n", + "===== Epoch 1131/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7593. Train Loss: 0.9948, Train Accuracy: 0.5051, Val Loss: 0.9482, Val Accuracy: 0.5467\n", + "===== Epoch 1132/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7593. Train Loss: 0.9898, Train Accuracy: 0.5098, Val Loss: 0.9733, Val Accuracy: 0.4933\n", + "===== Epoch 1133/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7593. Train Loss: 0.9766, Train Accuracy: 0.5098, Val Loss: 0.9704, Val Accuracy: 0.5022\n", + "===== Epoch 1134/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7593. Train Loss: 0.9995, Train Accuracy: 0.4965, Val Loss: 0.9569, Val Accuracy: 0.5467\n", + "===== Epoch 1135/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7593. Train Loss: 0.9851, Train Accuracy: 0.5161, Val Loss: 0.9598, Val Accuracy: 0.5556\n", + "===== Epoch 1136/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7593. Train Loss: 0.9848, Train Accuracy: 0.5294, Val Loss: 0.9575, Val Accuracy: 0.5200\n", + "===== Epoch 1137/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7593. Train Loss: 0.9882, Train Accuracy: 0.5075, Val Loss: 0.9482, Val Accuracy: 0.5378\n", + "===== Epoch 1138/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7593. Train Loss: 0.9956, Train Accuracy: 0.5098, Val Loss: 0.9505, Val Accuracy: 0.5378\n", + "===== Epoch 1139/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7593. Train Loss: 0.9903, Train Accuracy: 0.5271, Val Loss: 0.9812, Val Accuracy: 0.5556\n", + "===== Epoch 1140/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7593. Train Loss: 0.9814, Train Accuracy: 0.5075, Val Loss: 0.9539, Val Accuracy: 0.5467\n", + "===== Epoch 1141/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7601, Train Loss: 0.9850, Train Accuracy: 0.5067, Val Loss: 0.9301, Val Accuracy: 0.5289\n", + "===== Epoch 1142/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7601. Train Loss: 0.9774, Train Accuracy: 0.5106, Val Loss: 0.9680, Val Accuracy: 0.5333\n", + "===== Epoch 1143/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7601. Train Loss: 0.9764, Train Accuracy: 0.5161, Val Loss: 0.9903, Val Accuracy: 0.5022\n", + "===== Epoch 1144/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7601. Train Loss: 0.9843, Train Accuracy: 0.5278, Val Loss: 0.9445, Val Accuracy: 0.5556\n", + "===== Epoch 1145/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7601. Train Loss: 0.9858, Train Accuracy: 0.5184, Val Loss: 0.9658, Val Accuracy: 0.4978\n", + "===== Epoch 1146/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7601. Train Loss: 0.9826, Train Accuracy: 0.5067, Val Loss: 0.9604, Val Accuracy: 0.5422\n", + "===== Epoch 1147/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7601. Train Loss: 0.9796, Train Accuracy: 0.5231, Val Loss: 0.9516, Val Accuracy: 0.5111\n", + "===== Epoch 1148/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7601. Train Loss: 0.9934, Train Accuracy: 0.5051, Val Loss: 0.9844, Val Accuracy: 0.5111\n", + "===== Epoch 1149/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7601. Train Loss: 0.9879, Train Accuracy: 0.4957, Val Loss: 0.9313, Val Accuracy: 0.5511\n", + "===== Epoch 1150/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7601. Train Loss: 0.9900, Train Accuracy: 0.5090, Val Loss: 0.9786, Val Accuracy: 0.5244\n", + "===== Epoch 1151/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7601. Train Loss: 0.9919, Train Accuracy: 0.5090, Val Loss: 0.9578, Val Accuracy: 0.5422\n", + "===== Epoch 1152/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7601. Train Loss: 0.9828, Train Accuracy: 0.5176, Val Loss: 0.9673, Val Accuracy: 0.5111\n", + "===== Epoch 1153/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7601. Train Loss: 0.9873, Train Accuracy: 0.5059, Val Loss: 0.9856, Val Accuracy: 0.5022\n", + "===== Epoch 1154/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7601. Train Loss: 0.9779, Train Accuracy: 0.5255, Val Loss: 0.9546, Val Accuracy: 0.5111\n", + "===== Epoch 1155/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7601. Train Loss: 0.9679, Train Accuracy: 0.5357, Val Loss: 0.9783, Val Accuracy: 0.5022\n", + "===== Epoch 1156/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7601. Train Loss: 0.9864, Train Accuracy: 0.5027, Val Loss: 0.9942, Val Accuracy: 0.4844\n", + "===== Epoch 1157/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7601. Train Loss: 0.9884, Train Accuracy: 0.5027, Val Loss: 0.9684, Val Accuracy: 0.5333\n", + "===== Epoch 1158/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7601. Train Loss: 0.9922, Train Accuracy: 0.5106, Val Loss: 0.9765, Val Accuracy: 0.5511\n", + "===== Epoch 1159/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7601. Train Loss: 0.9828, Train Accuracy: 0.5161, Val Loss: 0.9922, Val Accuracy: 0.4756\n", + "===== Epoch 1160/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7601. Train Loss: 0.9939, Train Accuracy: 0.4894, Val Loss: 0.9279, Val Accuracy: 0.5689\n", + "===== Epoch 1161/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7601. Train Loss: 0.9877, Train Accuracy: 0.4980, Val Loss: 0.9369, Val Accuracy: 0.5644\n", + "===== Epoch 1162/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7601. Train Loss: 0.9969, Train Accuracy: 0.4949, Val Loss: 0.9547, Val Accuracy: 0.5378\n", + "===== Epoch 1163/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7601. Train Loss: 0.9601, Train Accuracy: 0.5325, Val Loss: 0.9454, Val Accuracy: 0.5422\n", + "===== Epoch 1164/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7601. Train Loss: 0.9713, Train Accuracy: 0.5380, Val Loss: 0.9310, Val Accuracy: 0.5600\n", + "===== Epoch 1165/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7601. Train Loss: 0.9839, Train Accuracy: 0.5153, Val Loss: 0.9478, Val Accuracy: 0.5111\n", + "===== Epoch 1166/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7601. Train Loss: 0.9865, Train Accuracy: 0.5137, Val Loss: 0.9310, Val Accuracy: 0.5600\n", + "===== Epoch 1167/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7601. Train Loss: 0.9915, Train Accuracy: 0.5122, Val Loss: 0.9506, Val Accuracy: 0.5244\n", + "===== Epoch 1168/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7601. Train Loss: 0.9905, Train Accuracy: 0.5082, Val Loss: 0.9388, Val Accuracy: 0.5467\n", + "===== Epoch 1169/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7601. Train Loss: 0.9721, Train Accuracy: 0.5176, Val Loss: 0.9766, Val Accuracy: 0.5244\n", + "===== Epoch 1170/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7601. Train Loss: 0.9786, Train Accuracy: 0.5082, Val Loss: 0.9547, Val Accuracy: 0.5467\n", + "===== Epoch 1171/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7601. Train Loss: 0.9822, Train Accuracy: 0.5286, Val Loss: 0.9475, Val Accuracy: 0.5378\n", + "===== Epoch 1172/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7601. Train Loss: 0.9741, Train Accuracy: 0.5137, Val Loss: 0.9524, Val Accuracy: 0.5556\n", + "===== Epoch 1173/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7601. Train Loss: 0.9852, Train Accuracy: 0.4933, Val Loss: 0.9448, Val Accuracy: 0.5422\n", + "===== Epoch 1174/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7601. Train Loss: 0.9837, Train Accuracy: 0.5082, Val Loss: 0.9527, Val Accuracy: 0.5511\n", + "===== Epoch 1175/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7601. Train Loss: 0.9805, Train Accuracy: 0.5082, Val Loss: 0.9854, Val Accuracy: 0.5378\n", + "===== Epoch 1176/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7601. Train Loss: 0.9806, Train Accuracy: 0.5263, Val Loss: 0.9220, Val Accuracy: 0.5733\n", + "===== Epoch 1177/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7601. Train Loss: 0.9961, Train Accuracy: 0.4824, Val Loss: 0.9574, Val Accuracy: 0.5333\n", + "===== Epoch 1178/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7601. Train Loss: 0.9775, Train Accuracy: 0.5278, Val Loss: 0.9379, Val Accuracy: 0.5556\n", + "===== Epoch 1179/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7601. Train Loss: 0.9821, Train Accuracy: 0.5278, Val Loss: 0.9845, Val Accuracy: 0.4889\n", + "===== Epoch 1180/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7601. Train Loss: 0.9727, Train Accuracy: 0.5294, Val Loss: 0.9495, Val Accuracy: 0.5467\n", + "===== Epoch 1181/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7601. Train Loss: 1.0134, Train Accuracy: 0.4933, Val Loss: 0.9401, Val Accuracy: 0.5422\n", + "===== Epoch 1182/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7601. Train Loss: 0.9898, Train Accuracy: 0.5035, Val Loss: 0.9703, Val Accuracy: 0.4844\n", + "===== Epoch 1183/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.7601. Train Loss: 0.9848, Train Accuracy: 0.5216, Val Loss: 0.9606, Val Accuracy: 0.5467\n", + "===== Epoch 1184/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7607, Train Loss: 0.9838, Train Accuracy: 0.5145, Val Loss: 0.9348, Val Accuracy: 0.5556\n", + "===== Epoch 1185/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7607. Train Loss: 0.9885, Train Accuracy: 0.5216, Val Loss: 0.9582, Val Accuracy: 0.5600\n", + "===== Epoch 1186/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7607. Train Loss: 0.9818, Train Accuracy: 0.5192, Val Loss: 0.9465, Val Accuracy: 0.5556\n", + "===== Epoch 1187/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7607. Train Loss: 0.9824, Train Accuracy: 0.5169, Val Loss: 0.9574, Val Accuracy: 0.5422\n", + "===== Epoch 1188/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7607. Train Loss: 0.9645, Train Accuracy: 0.5310, Val Loss: 0.9601, Val Accuracy: 0.5333\n", + "===== Epoch 1189/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7607. Train Loss: 0.9612, Train Accuracy: 0.5255, Val Loss: 0.9265, Val Accuracy: 0.5600\n", + "===== Epoch 1190/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7607. Train Loss: 0.9767, Train Accuracy: 0.5522, Val Loss: 0.9645, Val Accuracy: 0.5378\n", + "===== Epoch 1191/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7609, Train Loss: 0.9820, Train Accuracy: 0.5302, Val Loss: 0.9222, Val Accuracy: 0.5956\n", + "===== Epoch 1192/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7609. Train Loss: 0.9690, Train Accuracy: 0.5286, Val Loss: 0.9323, Val Accuracy: 0.5511\n", + "===== Epoch 1193/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7609. Train Loss: 0.9581, Train Accuracy: 0.5373, Val Loss: 0.9350, Val Accuracy: 0.5156\n", + "===== Epoch 1194/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7609. Train Loss: 0.9755, Train Accuracy: 0.5231, Val Loss: 0.9578, Val Accuracy: 0.5022\n", + "===== Epoch 1195/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7609. Train Loss: 0.9689, Train Accuracy: 0.5325, Val Loss: 0.9269, Val Accuracy: 0.5822\n", + "===== Epoch 1196/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7609. Train Loss: 0.9873, Train Accuracy: 0.5106, Val Loss: 0.9144, Val Accuracy: 0.5511\n", + "===== Epoch 1197/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7730, Train Loss: 0.9640, Train Accuracy: 0.5373, Val Loss: 0.9181, Val Accuracy: 0.5822\n", + "===== Epoch 1198/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7730. Train Loss: 0.9837, Train Accuracy: 0.5067, Val Loss: 1.0241, Val Accuracy: 0.4578\n", + "===== Epoch 1199/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7730. Train Loss: 0.9653, Train Accuracy: 0.5380, Val Loss: 0.9193, Val Accuracy: 0.5467\n", + "===== Epoch 1200/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7730. Train Loss: 0.9506, Train Accuracy: 0.5529, Val Loss: 0.9214, Val Accuracy: 0.5333\n", + "===== Epoch 1201/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7730. Train Loss: 0.9436, Train Accuracy: 0.5522, Val Loss: 0.9528, Val Accuracy: 0.4800\n", + "===== Epoch 1202/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7730. Train Loss: 0.9533, Train Accuracy: 0.5412, Val Loss: 0.9773, Val Accuracy: 0.5111\n", + "===== Epoch 1203/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7730. Train Loss: 0.9498, Train Accuracy: 0.5498, Val Loss: 0.8958, Val Accuracy: 0.5778\n", + "===== Epoch 1204/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7792, Train Loss: 0.9502, Train Accuracy: 0.5388, Val Loss: 0.9013, Val Accuracy: 0.5733\n", + "===== Epoch 1205/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7932, Train Loss: 0.9588, Train Accuracy: 0.5349, Val Loss: 0.8931, Val Accuracy: 0.5689\n", + "===== Epoch 1206/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7932. Train Loss: 0.9471, Train Accuracy: 0.5318, Val Loss: 0.9514, Val Accuracy: 0.5333\n", + "===== Epoch 1207/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7932. Train Loss: 0.9702, Train Accuracy: 0.5278, Val Loss: 0.9480, Val Accuracy: 0.5022\n", + "===== Epoch 1208/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7932. Train Loss: 0.9651, Train Accuracy: 0.5310, Val Loss: 0.9180, Val Accuracy: 0.5111\n", + "===== Epoch 1209/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7932. Train Loss: 0.9563, Train Accuracy: 0.5318, Val Loss: 0.9223, Val Accuracy: 0.5511\n", + "===== Epoch 1210/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7932. Train Loss: 0.9541, Train Accuracy: 0.5506, Val Loss: 0.9038, Val Accuracy: 0.5644\n", + "===== Epoch 1211/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7932. Train Loss: 0.9425, Train Accuracy: 0.5490, Val Loss: 0.8930, Val Accuracy: 0.6000\n", + "===== Epoch 1212/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7932. Train Loss: 0.9330, Train Accuracy: 0.5373, Val Loss: 0.9168, Val Accuracy: 0.5244\n", + "===== Epoch 1213/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7932. Train Loss: 0.9256, Train Accuracy: 0.5639, Val Loss: 0.8973, Val Accuracy: 0.5911\n", + "===== Epoch 1214/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7932. Train Loss: 0.9409, Train Accuracy: 0.5537, Val Loss: 0.9304, Val Accuracy: 0.5644\n", + "===== Epoch 1215/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7932. Train Loss: 0.9661, Train Accuracy: 0.5427, Val Loss: 0.9187, Val Accuracy: 0.5778\n", + "===== Epoch 1216/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7932. Train Loss: 0.9534, Train Accuracy: 0.5318, Val Loss: 0.8952, Val Accuracy: 0.6178\n", + "===== Epoch 1217/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8120, Train Loss: 0.9431, Train Accuracy: 0.5357, Val Loss: 0.8625, Val Accuracy: 0.6489\n", + "===== Epoch 1218/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8120. Train Loss: 0.9245, Train Accuracy: 0.5616, Val Loss: 0.9087, Val Accuracy: 0.5556\n", + "===== Epoch 1219/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8120. Train Loss: 0.9324, Train Accuracy: 0.5561, Val Loss: 0.9006, Val Accuracy: 0.5467\n", + "===== Epoch 1220/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8120. Train Loss: 0.9437, Train Accuracy: 0.5341, Val Loss: 0.9200, Val Accuracy: 0.5600\n", + "===== Epoch 1221/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8120. Train Loss: 0.9409, Train Accuracy: 0.5694, Val Loss: 0.9206, Val Accuracy: 0.5689\n", + "===== Epoch 1222/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8120. Train Loss: 0.9223, Train Accuracy: 0.5631, Val Loss: 0.8664, Val Accuracy: 0.6533\n", + "===== Epoch 1223/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8120. Train Loss: 0.9342, Train Accuracy: 0.5553, Val Loss: 0.8965, Val Accuracy: 0.5733\n", + "===== Epoch 1224/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8120. Train Loss: 0.9313, Train Accuracy: 0.5647, Val Loss: 0.8980, Val Accuracy: 0.5867\n", + "===== Epoch 1225/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8120. Train Loss: 0.9021, Train Accuracy: 0.5976, Val Loss: 0.8880, Val Accuracy: 0.5822\n", + "===== Epoch 1226/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8120. Train Loss: 0.9323, Train Accuracy: 0.5467, Val Loss: 0.9079, Val Accuracy: 0.5956\n", + "===== Epoch 1227/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8120. Train Loss: 0.9374, Train Accuracy: 0.5475, Val Loss: 0.8903, Val Accuracy: 0.5644\n", + "===== Epoch 1228/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8120. Train Loss: 0.9262, Train Accuracy: 0.5733, Val Loss: 0.9092, Val Accuracy: 0.5689\n", + "===== Epoch 1229/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8120. Train Loss: 0.9263, Train Accuracy: 0.5796, Val Loss: 0.8687, Val Accuracy: 0.6133\n", + "===== Epoch 1230/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8120. Train Loss: 0.9081, Train Accuracy: 0.5843, Val Loss: 0.8819, Val Accuracy: 0.5778\n", + "===== Epoch 1231/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8120. Train Loss: 0.9268, Train Accuracy: 0.5710, Val Loss: 0.8778, Val Accuracy: 0.5867\n", + "===== Epoch 1232/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8120. Train Loss: 0.9180, Train Accuracy: 0.5655, Val Loss: 0.8938, Val Accuracy: 0.5689\n", + "===== Epoch 1233/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8120. Train Loss: 0.9200, Train Accuracy: 0.5600, Val Loss: 0.9057, Val Accuracy: 0.6044\n", + "===== Epoch 1234/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8120. Train Loss: 0.9125, Train Accuracy: 0.5820, Val Loss: 0.8817, Val Accuracy: 0.5689\n", + "===== Epoch 1235/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8120. Train Loss: 0.9069, Train Accuracy: 0.5686, Val Loss: 0.8547, Val Accuracy: 0.6089\n", + "===== Epoch 1236/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8120. Train Loss: 0.9226, Train Accuracy: 0.5631, Val Loss: 0.9226, Val Accuracy: 0.5778\n", + "===== Epoch 1237/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8120. Train Loss: 0.9049, Train Accuracy: 0.5875, Val Loss: 0.9010, Val Accuracy: 0.5689\n", + "===== Epoch 1238/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8120. Train Loss: 0.9181, Train Accuracy: 0.5647, Val Loss: 0.8777, Val Accuracy: 0.5867\n", + "===== Epoch 1239/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8120. Train Loss: 0.9046, Train Accuracy: 0.5788, Val Loss: 0.8587, Val Accuracy: 0.6133\n", + "===== Epoch 1240/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8120. Train Loss: 0.9050, Train Accuracy: 0.6008, Val Loss: 0.8748, Val Accuracy: 0.5689\n", + "===== Epoch 1241/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8120. Train Loss: 0.9254, Train Accuracy: 0.5482, Val Loss: 0.8742, Val Accuracy: 0.6267\n", + "===== Epoch 1242/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8120. Train Loss: 0.9100, Train Accuracy: 0.5757, Val Loss: 0.8572, Val Accuracy: 0.6311\n", + "===== Epoch 1243/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8120. Train Loss: 0.9152, Train Accuracy: 0.5678, Val Loss: 0.8696, Val Accuracy: 0.6089\n", + "===== Epoch 1244/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8120. Train Loss: 0.9203, Train Accuracy: 0.5616, Val Loss: 0.8558, Val Accuracy: 0.6578\n", + "===== Epoch 1245/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8120. Train Loss: 0.9247, Train Accuracy: 0.5624, Val Loss: 0.8793, Val Accuracy: 0.6222\n", + "===== Epoch 1246/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8120. Train Loss: 0.9170, Train Accuracy: 0.5686, Val Loss: 0.8542, Val Accuracy: 0.6133\n", + "===== Epoch 1247/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8120. Train Loss: 0.9194, Train Accuracy: 0.5765, Val Loss: 0.8945, Val Accuracy: 0.6267\n", + "===== Epoch 1248/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8120. Train Loss: 0.9114, Train Accuracy: 0.5765, Val Loss: 0.8632, Val Accuracy: 0.5778\n", + "===== Epoch 1249/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8120. Train Loss: 0.9121, Train Accuracy: 0.5914, Val Loss: 0.9160, Val Accuracy: 0.5422\n", + "===== Epoch 1250/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8120. Train Loss: 0.9140, Train Accuracy: 0.5725, Val Loss: 0.9142, Val Accuracy: 0.5778\n", + "===== Epoch 1251/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8120. Train Loss: 0.9292, Train Accuracy: 0.5388, Val Loss: 0.9089, Val Accuracy: 0.6267\n", + "===== Epoch 1252/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8120. Train Loss: 0.9173, Train Accuracy: 0.5671, Val Loss: 0.8695, Val Accuracy: 0.6000\n", + "===== Epoch 1253/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8120. Train Loss: 0.9110, Train Accuracy: 0.5678, Val Loss: 0.8590, Val Accuracy: 0.5911\n", + "===== Epoch 1254/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8120. Train Loss: 0.9295, Train Accuracy: 0.5592, Val Loss: 0.8747, Val Accuracy: 0.5867\n", + "===== Epoch 1255/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8120. Train Loss: 0.9245, Train Accuracy: 0.5608, Val Loss: 0.8556, Val Accuracy: 0.6311\n", + "===== Epoch 1256/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8120. Train Loss: 0.8961, Train Accuracy: 0.5812, Val Loss: 0.8841, Val Accuracy: 0.6044\n", + "===== Epoch 1257/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8120. Train Loss: 0.9117, Train Accuracy: 0.5882, Val Loss: 0.8634, Val Accuracy: 0.6178\n", + "===== Epoch 1258/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8120. Train Loss: 0.9158, Train Accuracy: 0.5576, Val Loss: 0.8816, Val Accuracy: 0.5911\n", + "===== Epoch 1259/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8120. Train Loss: 0.9090, Train Accuracy: 0.5765, Val Loss: 0.8579, Val Accuracy: 0.6000\n", + "===== Epoch 1260/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8120. Train Loss: 0.9151, Train Accuracy: 0.5788, Val Loss: 0.8745, Val Accuracy: 0.5911\n", + "===== Epoch 1261/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8120. Train Loss: 0.9127, Train Accuracy: 0.5780, Val Loss: 0.8718, Val Accuracy: 0.6267\n", + "===== Epoch 1262/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8120. Train Loss: 0.9213, Train Accuracy: 0.5584, Val Loss: 0.8855, Val Accuracy: 0.5733\n", + "===== Epoch 1263/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8120. Train Loss: 0.9128, Train Accuracy: 0.5812, Val Loss: 0.8519, Val Accuracy: 0.6044\n", + "===== Epoch 1264/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8120. Train Loss: 0.9225, Train Accuracy: 0.5545, Val Loss: 0.8675, Val Accuracy: 0.6044\n", + "===== Epoch 1265/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8120. Train Loss: 0.9071, Train Accuracy: 0.5827, Val Loss: 0.8667, Val Accuracy: 0.5867\n", + "===== Epoch 1266/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8120. Train Loss: 0.9140, Train Accuracy: 0.5835, Val Loss: 0.8686, Val Accuracy: 0.6044\n", + "===== Epoch 1267/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8120. Train Loss: 0.9179, Train Accuracy: 0.5671, Val Loss: 0.8980, Val Accuracy: 0.5333\n", + "===== Epoch 1268/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8120. Train Loss: 0.9054, Train Accuracy: 0.5686, Val Loss: 0.8684, Val Accuracy: 0.6089\n", + "===== Epoch 1269/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8120. Train Loss: 0.9251, Train Accuracy: 0.5631, Val Loss: 0.8898, Val Accuracy: 0.5689\n", + "===== Epoch 1270/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8120. Train Loss: 0.9267, Train Accuracy: 0.5624, Val Loss: 0.9012, Val Accuracy: 0.5644\n", + "===== Epoch 1271/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8120. Train Loss: 0.9214, Train Accuracy: 0.5514, Val Loss: 0.8655, Val Accuracy: 0.6133\n", + "===== Epoch 1272/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8120. Train Loss: 0.9096, Train Accuracy: 0.5867, Val Loss: 0.9032, Val Accuracy: 0.5644\n", + "===== Epoch 1273/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8120. Train Loss: 0.9258, Train Accuracy: 0.5490, Val Loss: 0.8713, Val Accuracy: 0.6222\n", + "===== Epoch 1274/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8120. Train Loss: 0.9280, Train Accuracy: 0.5702, Val Loss: 0.9945, Val Accuracy: 0.5333\n", + "===== Epoch 1275/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8120. Train Loss: 0.9132, Train Accuracy: 0.5686, Val Loss: 0.9273, Val Accuracy: 0.5378\n", + "===== Epoch 1276/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8120. Train Loss: 0.9244, Train Accuracy: 0.5631, Val Loss: 0.8616, Val Accuracy: 0.6400\n", + "===== Epoch 1277/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8120. Train Loss: 0.9251, Train Accuracy: 0.5663, Val Loss: 0.9335, Val Accuracy: 0.5378\n", + "===== Epoch 1278/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8120. Train Loss: 0.9191, Train Accuracy: 0.5624, Val Loss: 0.8614, Val Accuracy: 0.5556\n", + "===== Epoch 1279/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8120. Train Loss: 0.9200, Train Accuracy: 0.5569, Val Loss: 0.8727, Val Accuracy: 0.5644\n", + "===== Epoch 1280/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8120. Train Loss: 0.9206, Train Accuracy: 0.5906, Val Loss: 0.8918, Val Accuracy: 0.5956\n", + "===== Epoch 1281/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8120. Train Loss: 0.9010, Train Accuracy: 0.5859, Val Loss: 0.8571, Val Accuracy: 0.6044\n", + "===== Epoch 1282/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8120. Train Loss: 0.9294, Train Accuracy: 0.5647, Val Loss: 0.8744, Val Accuracy: 0.6222\n", + "===== Epoch 1283/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8120. Train Loss: 0.9147, Train Accuracy: 0.5694, Val Loss: 0.8979, Val Accuracy: 0.5600\n", + "===== Epoch 1284/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8120. Train Loss: 0.8971, Train Accuracy: 0.5859, Val Loss: 0.9151, Val Accuracy: 0.6044\n", + "===== Epoch 1285/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8120. Train Loss: 0.9370, Train Accuracy: 0.5380, Val Loss: 0.8778, Val Accuracy: 0.5778\n", + "===== Epoch 1286/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8120. Train Loss: 0.9068, Train Accuracy: 0.5788, Val Loss: 0.8969, Val Accuracy: 0.5200\n", + "===== Epoch 1287/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8120. Train Loss: 0.9222, Train Accuracy: 0.5725, Val Loss: 0.8739, Val Accuracy: 0.5822\n", + "===== Epoch 1288/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8120. Train Loss: 0.9203, Train Accuracy: 0.5749, Val Loss: 0.8704, Val Accuracy: 0.5556\n", + "===== Epoch 1289/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8120. Train Loss: 0.9281, Train Accuracy: 0.5490, Val Loss: 0.8747, Val Accuracy: 0.5911\n", + "===== Epoch 1290/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8120. Train Loss: 0.9065, Train Accuracy: 0.5882, Val Loss: 0.9035, Val Accuracy: 0.5867\n", + "===== Epoch 1291/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8120. Train Loss: 0.9149, Train Accuracy: 0.5686, Val Loss: 0.8714, Val Accuracy: 0.6444\n", + "===== Epoch 1292/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8120. Train Loss: 0.9253, Train Accuracy: 0.5576, Val Loss: 0.8821, Val Accuracy: 0.5911\n", + "===== Epoch 1293/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8120. Train Loss: 0.9187, Train Accuracy: 0.5647, Val Loss: 0.8686, Val Accuracy: 0.6489\n", + "===== Epoch 1294/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8120. Train Loss: 0.9149, Train Accuracy: 0.5671, Val Loss: 0.8500, Val Accuracy: 0.6178\n", + "===== Epoch 1295/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8120. Train Loss: 0.9326, Train Accuracy: 0.5529, Val Loss: 0.9200, Val Accuracy: 0.5467\n", + "===== Epoch 1296/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8120. Train Loss: 0.9097, Train Accuracy: 0.5788, Val Loss: 0.8865, Val Accuracy: 0.5289\n", + "===== Epoch 1297/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8120. Train Loss: 0.9092, Train Accuracy: 0.5678, Val Loss: 0.9222, Val Accuracy: 0.5422\n", + "===== Epoch 1298/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8120. Train Loss: 0.9511, Train Accuracy: 0.5396, Val Loss: 0.8725, Val Accuracy: 0.6133\n", + "===== Epoch 1299/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8120. Train Loss: 0.9000, Train Accuracy: 0.5678, Val Loss: 0.8755, Val Accuracy: 0.5644\n", + "===== Epoch 1300/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8178, Train Loss: 0.9247, Train Accuracy: 0.5608, Val Loss: 0.8335, Val Accuracy: 0.6533\n", + "===== Epoch 1301/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8178. Train Loss: 0.9149, Train Accuracy: 0.5773, Val Loss: 0.8861, Val Accuracy: 0.5644\n", + "===== Epoch 1302/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8178. Train Loss: 0.9212, Train Accuracy: 0.5710, Val Loss: 0.8855, Val Accuracy: 0.6044\n", + "===== Epoch 1303/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8178. Train Loss: 0.9085, Train Accuracy: 0.5827, Val Loss: 0.8520, Val Accuracy: 0.6178\n", + "===== Epoch 1304/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8178. Train Loss: 0.9114, Train Accuracy: 0.5733, Val Loss: 0.8757, Val Accuracy: 0.6489\n", + "===== Epoch 1305/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8178. Train Loss: 0.9083, Train Accuracy: 0.5733, Val Loss: 0.8750, Val Accuracy: 0.6178\n", + "===== Epoch 1306/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8178. Train Loss: 0.9270, Train Accuracy: 0.5576, Val Loss: 0.8729, Val Accuracy: 0.5911\n", + "===== Epoch 1307/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8178. Train Loss: 0.8796, Train Accuracy: 0.6157, Val Loss: 0.8720, Val Accuracy: 0.6000\n", + "===== Epoch 1308/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8178. Train Loss: 0.8808, Train Accuracy: 0.6008, Val Loss: 0.8573, Val Accuracy: 0.6044\n", + "===== Epoch 1309/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8178. Train Loss: 0.8958, Train Accuracy: 0.6000, Val Loss: 0.8561, Val Accuracy: 0.6089\n", + "===== Epoch 1310/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8344, Train Loss: 0.9059, Train Accuracy: 0.5773, Val Loss: 0.8042, Val Accuracy: 0.6756\n", + "===== Epoch 1311/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8344. Train Loss: 0.8996, Train Accuracy: 0.5875, Val Loss: 0.8822, Val Accuracy: 0.6089\n", + "===== Epoch 1312/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8344. Train Loss: 0.8879, Train Accuracy: 0.6000, Val Loss: 0.8376, Val Accuracy: 0.6533\n", + "===== Epoch 1313/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8344. Train Loss: 0.8957, Train Accuracy: 0.6024, Val Loss: 0.8401, Val Accuracy: 0.6222\n", + "===== Epoch 1314/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8344. Train Loss: 0.8718, Train Accuracy: 0.6000, Val Loss: 0.8737, Val Accuracy: 0.6089\n", + "===== Epoch 1315/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8344. Train Loss: 0.9011, Train Accuracy: 0.5757, Val Loss: 0.8337, Val Accuracy: 0.6356\n", + "===== Epoch 1316/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8344. Train Loss: 0.8997, Train Accuracy: 0.5992, Val Loss: 0.8803, Val Accuracy: 0.5733\n", + "===== Epoch 1317/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8344. Train Loss: 0.9017, Train Accuracy: 0.5741, Val Loss: 0.8963, Val Accuracy: 0.5733\n", + "===== Epoch 1318/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8344. Train Loss: 0.8804, Train Accuracy: 0.6149, Val Loss: 0.8479, Val Accuracy: 0.6089\n", + "===== Epoch 1319/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8344. Train Loss: 0.8802, Train Accuracy: 0.5992, Val Loss: 0.8381, Val Accuracy: 0.5867\n", + "===== Epoch 1320/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8344. Train Loss: 0.8876, Train Accuracy: 0.6047, Val Loss: 0.8439, Val Accuracy: 0.6044\n", + "===== Epoch 1321/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8344. Train Loss: 0.8764, Train Accuracy: 0.5937, Val Loss: 0.8243, Val Accuracy: 0.6356\n", + "===== Epoch 1322/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8344. Train Loss: 0.8896, Train Accuracy: 0.5898, Val Loss: 0.8023, Val Accuracy: 0.6756\n", + "===== Epoch 1323/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8344. Train Loss: 0.8932, Train Accuracy: 0.5914, Val Loss: 0.8637, Val Accuracy: 0.6311\n", + "===== Epoch 1324/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8344. Train Loss: 0.8841, Train Accuracy: 0.6031, Val Loss: 0.8559, Val Accuracy: 0.6133\n", + "===== Epoch 1325/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8344. Train Loss: 0.9060, Train Accuracy: 0.5937, Val Loss: 0.8327, Val Accuracy: 0.6444\n", + "===== Epoch 1326/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8344. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8413, Val Accuracy: 0.6489\n", + "===== Epoch 1327/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8344. Train Loss: 0.8698, Train Accuracy: 0.6094, Val Loss: 0.8343, Val Accuracy: 0.6533\n", + "===== Epoch 1328/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8344. Train Loss: 0.8815, Train Accuracy: 0.5969, Val Loss: 0.8661, Val Accuracy: 0.6311\n", + "===== Epoch 1329/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8344. Train Loss: 0.8785, Train Accuracy: 0.5906, Val Loss: 0.8425, Val Accuracy: 0.6089\n", + "===== Epoch 1330/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8344. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8435, Val Accuracy: 0.6000\n", + "===== Epoch 1331/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8344. Train Loss: 0.8895, Train Accuracy: 0.6000, Val Loss: 0.8214, Val Accuracy: 0.6356\n", + "===== Epoch 1332/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8344. Train Loss: 0.8634, Train Accuracy: 0.6039, Val Loss: 0.8447, Val Accuracy: 0.6133\n", + "===== Epoch 1333/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8352, Train Loss: 0.8801, Train Accuracy: 0.5859, Val Loss: 0.7928, Val Accuracy: 0.6756\n", + "===== Epoch 1334/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8352. Train Loss: 0.8863, Train Accuracy: 0.6031, Val Loss: 0.8200, Val Accuracy: 0.6622\n", + "===== Epoch 1335/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8352. Train Loss: 0.8763, Train Accuracy: 0.6063, Val Loss: 0.8043, Val Accuracy: 0.6444\n", + "===== Epoch 1336/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8352. Train Loss: 0.8851, Train Accuracy: 0.6071, Val Loss: 0.8198, Val Accuracy: 0.6222\n", + "===== Epoch 1337/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8352. Train Loss: 0.8713, Train Accuracy: 0.6157, Val Loss: 0.8238, Val Accuracy: 0.6178\n", + "===== Epoch 1338/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8352. Train Loss: 0.8726, Train Accuracy: 0.6196, Val Loss: 0.8437, Val Accuracy: 0.5822\n", + "===== Epoch 1339/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8352. Train Loss: 0.8648, Train Accuracy: 0.6094, Val Loss: 0.8031, Val Accuracy: 0.6267\n", + "===== Epoch 1340/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8352. Train Loss: 0.8655, Train Accuracy: 0.6180, Val Loss: 0.8438, Val Accuracy: 0.6044\n", + "===== Epoch 1341/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8352. Train Loss: 0.8613, Train Accuracy: 0.6227, Val Loss: 0.8105, Val Accuracy: 0.6400\n", + "===== Epoch 1342/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8352. Train Loss: 0.8868, Train Accuracy: 0.5929, Val Loss: 0.8490, Val Accuracy: 0.6356\n", + "===== Epoch 1343/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8352. Train Loss: 0.8657, Train Accuracy: 0.6118, Val Loss: 0.8164, Val Accuracy: 0.6444\n", + "===== Epoch 1344/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8352. Train Loss: 0.8806, Train Accuracy: 0.5976, Val Loss: 0.8568, Val Accuracy: 0.6356\n", + "===== Epoch 1345/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8352. Train Loss: 0.8694, Train Accuracy: 0.6063, Val Loss: 0.8350, Val Accuracy: 0.6178\n", + "===== Epoch 1346/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8352. Train Loss: 0.8750, Train Accuracy: 0.5992, Val Loss: 0.8263, Val Accuracy: 0.6356\n", + "===== Epoch 1347/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8352. Train Loss: 0.8776, Train Accuracy: 0.6047, Val Loss: 0.8206, Val Accuracy: 0.6356\n", + "===== Epoch 1348/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8352. Train Loss: 0.8719, Train Accuracy: 0.5976, Val Loss: 0.8255, Val Accuracy: 0.6444\n", + "===== Epoch 1349/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8352. Train Loss: 0.8644, Train Accuracy: 0.6141, Val Loss: 0.8189, Val Accuracy: 0.6356\n", + "===== Epoch 1350/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8352. Train Loss: 0.8779, Train Accuracy: 0.5976, Val Loss: 0.8513, Val Accuracy: 0.6044\n", + "===== Epoch 1351/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8352. Train Loss: 0.8636, Train Accuracy: 0.6306, Val Loss: 0.8218, Val Accuracy: 0.6533\n", + "===== Epoch 1352/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8352. Train Loss: 0.8697, Train Accuracy: 0.6039, Val Loss: 0.8387, Val Accuracy: 0.6578\n", + "===== Epoch 1353/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8352. Train Loss: 0.8880, Train Accuracy: 0.6008, Val Loss: 0.8434, Val Accuracy: 0.6222\n", + "===== Epoch 1354/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8352. Train Loss: 0.8587, Train Accuracy: 0.6110, Val Loss: 0.8282, Val Accuracy: 0.6400\n", + "===== Epoch 1355/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8352. Train Loss: 0.8704, Train Accuracy: 0.6118, Val Loss: 0.8297, Val Accuracy: 0.6356\n", + "===== Epoch 1356/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8352. Train Loss: 0.8709, Train Accuracy: 0.6141, Val Loss: 0.8308, Val Accuracy: 0.6444\n", + "===== Epoch 1357/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8352. Train Loss: 0.8674, Train Accuracy: 0.6118, Val Loss: 0.8331, Val Accuracy: 0.6578\n", + "===== Epoch 1358/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8352. Train Loss: 0.8808, Train Accuracy: 0.6086, Val Loss: 0.8365, Val Accuracy: 0.6311\n", + "===== Epoch 1359/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8352. Train Loss: 0.8789, Train Accuracy: 0.6078, Val Loss: 0.8375, Val Accuracy: 0.6622\n", + "===== Epoch 1360/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8352. Train Loss: 0.8788, Train Accuracy: 0.6102, Val Loss: 0.7996, Val Accuracy: 0.6400\n", + "===== Epoch 1361/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8352. Train Loss: 0.8685, Train Accuracy: 0.6031, Val Loss: 0.8082, Val Accuracy: 0.6578\n", + "===== Epoch 1362/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8352. Train Loss: 0.8734, Train Accuracy: 0.5969, Val Loss: 0.8221, Val Accuracy: 0.6311\n", + "===== Epoch 1363/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8352. Train Loss: 0.8676, Train Accuracy: 0.6118, Val Loss: 0.8325, Val Accuracy: 0.6489\n", + "===== Epoch 1364/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8352. Train Loss: 0.8905, Train Accuracy: 0.6024, Val Loss: 0.8479, Val Accuracy: 0.6400\n", + "===== Epoch 1365/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8352. Train Loss: 0.8862, Train Accuracy: 0.5969, Val Loss: 0.8195, Val Accuracy: 0.6267\n", + "===== Epoch 1366/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8352. Train Loss: 0.8784, Train Accuracy: 0.5953, Val Loss: 0.8246, Val Accuracy: 0.6667\n", + "===== Epoch 1367/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8352. Train Loss: 0.8757, Train Accuracy: 0.5976, Val Loss: 0.8552, Val Accuracy: 0.5644\n", + "===== Epoch 1368/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8352. Train Loss: 0.8816, Train Accuracy: 0.5804, Val Loss: 0.8295, Val Accuracy: 0.6044\n", + "===== Epoch 1369/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8352. Train Loss: 0.8843, Train Accuracy: 0.5969, Val Loss: 0.8320, Val Accuracy: 0.6311\n", + "===== Epoch 1370/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8352. Train Loss: 0.8901, Train Accuracy: 0.5961, Val Loss: 0.8409, Val Accuracy: 0.6000\n", + "===== Epoch 1371/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8352. Train Loss: 0.8720, Train Accuracy: 0.5976, Val Loss: 0.7886, Val Accuracy: 0.6711\n", + "===== Epoch 1372/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8352. Train Loss: 0.8566, Train Accuracy: 0.6110, Val Loss: 0.8761, Val Accuracy: 0.5778\n", + "===== Epoch 1373/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8352. Train Loss: 0.8879, Train Accuracy: 0.6063, Val Loss: 0.8152, Val Accuracy: 0.6444\n", + "===== Epoch 1374/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8352. Train Loss: 0.8714, Train Accuracy: 0.6094, Val Loss: 0.8604, Val Accuracy: 0.6000\n", + "===== Epoch 1375/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8352. Train Loss: 0.8871, Train Accuracy: 0.5867, Val Loss: 0.8101, Val Accuracy: 0.6756\n", + "===== Epoch 1376/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8352. Train Loss: 0.8748, Train Accuracy: 0.5992, Val Loss: 0.8250, Val Accuracy: 0.6889\n", + "===== Epoch 1377/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8352. Train Loss: 0.8792, Train Accuracy: 0.5961, Val Loss: 0.8294, Val Accuracy: 0.6444\n", + "===== Epoch 1378/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8352. Train Loss: 0.8830, Train Accuracy: 0.5969, Val Loss: 0.8164, Val Accuracy: 0.6578\n", + "===== Epoch 1379/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8352. Train Loss: 0.8833, Train Accuracy: 0.5827, Val Loss: 0.8109, Val Accuracy: 0.6533\n", + "===== Epoch 1380/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8364, Train Loss: 0.8997, Train Accuracy: 0.5914, Val Loss: 0.8140, Val Accuracy: 0.6533\n", + "===== Epoch 1381/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8364. Train Loss: 0.8828, Train Accuracy: 0.5922, Val Loss: 0.8745, Val Accuracy: 0.5956\n", + "===== Epoch 1382/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8364. Train Loss: 0.8877, Train Accuracy: 0.6016, Val Loss: 0.8385, Val Accuracy: 0.6533\n", + "===== Epoch 1383/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8364. Train Loss: 0.8899, Train Accuracy: 0.5914, Val Loss: 0.8289, Val Accuracy: 0.6533\n", + "===== Epoch 1384/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8364. Train Loss: 0.8972, Train Accuracy: 0.5890, Val Loss: 0.8515, Val Accuracy: 0.6222\n", + "===== Epoch 1385/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8364. Train Loss: 0.8715, Train Accuracy: 0.5961, Val Loss: 0.8342, Val Accuracy: 0.6444\n", + "===== Epoch 1386/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8364. Train Loss: 0.8786, Train Accuracy: 0.6031, Val Loss: 0.8071, Val Accuracy: 0.6711\n", + "===== Epoch 1387/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8364. Train Loss: 0.8915, Train Accuracy: 0.5976, Val Loss: 0.8941, Val Accuracy: 0.5556\n", + "===== Epoch 1388/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8364. Train Loss: 0.8775, Train Accuracy: 0.6078, Val Loss: 0.8151, Val Accuracy: 0.6444\n", + "===== Epoch 1389/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8364. Train Loss: 0.8753, Train Accuracy: 0.5976, Val Loss: 0.9151, Val Accuracy: 0.5511\n", + "===== Epoch 1390/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8364. Train Loss: 0.9144, Train Accuracy: 0.5733, Val Loss: 0.8469, Val Accuracy: 0.6400\n", + "===== Epoch 1391/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8364. Train Loss: 0.8753, Train Accuracy: 0.5875, Val Loss: 0.8138, Val Accuracy: 0.6800\n", + "===== Epoch 1392/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8364. Train Loss: 0.8779, Train Accuracy: 0.6008, Val Loss: 0.8090, Val Accuracy: 0.6533\n", + "===== Epoch 1393/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8364. Train Loss: 0.8861, Train Accuracy: 0.5984, Val Loss: 0.8405, Val Accuracy: 0.6667\n", + "===== Epoch 1394/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8364. Train Loss: 0.8699, Train Accuracy: 0.6149, Val Loss: 0.8132, Val Accuracy: 0.6444\n", + "===== Epoch 1395/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8364. Train Loss: 0.8635, Train Accuracy: 0.6157, Val Loss: 0.8976, Val Accuracy: 0.5289\n", + "===== Epoch 1396/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8364. Train Loss: 0.8816, Train Accuracy: 0.6016, Val Loss: 0.8123, Val Accuracy: 0.6667\n", + "===== Epoch 1397/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8364. Train Loss: 0.9133, Train Accuracy: 0.5796, Val Loss: 0.8257, Val Accuracy: 0.6356\n", + "===== Epoch 1398/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8364. Train Loss: 0.8910, Train Accuracy: 0.5929, Val Loss: 0.8595, Val Accuracy: 0.6133\n", + "===== Epoch 1399/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8364. Train Loss: 0.8861, Train Accuracy: 0.5843, Val Loss: 0.8804, Val Accuracy: 0.5422\n", + "===== Epoch 1400/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8364. Train Loss: 0.8955, Train Accuracy: 0.5953, Val Loss: 0.8482, Val Accuracy: 0.5867\n", + "===== Epoch 1401/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8364. Train Loss: 0.8694, Train Accuracy: 0.6110, Val Loss: 0.8273, Val Accuracy: 0.6711\n", + "===== Epoch 1402/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8364. Train Loss: 0.8705, Train Accuracy: 0.6039, Val Loss: 0.8056, Val Accuracy: 0.6800\n", + "===== Epoch 1403/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8364. Train Loss: 0.8632, Train Accuracy: 0.6149, Val Loss: 0.8364, Val Accuracy: 0.6400\n", + "===== Epoch 1404/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8364. Train Loss: 0.8779, Train Accuracy: 0.5992, Val Loss: 0.8569, Val Accuracy: 0.5733\n", + "===== Epoch 1405/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8364. Train Loss: 0.8867, Train Accuracy: 0.6031, Val Loss: 0.8398, Val Accuracy: 0.6133\n", + "===== Epoch 1406/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8364. Train Loss: 0.8815, Train Accuracy: 0.6016, Val Loss: 0.8186, Val Accuracy: 0.6533\n", + "===== Epoch 1407/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8364. Train Loss: 0.8545, Train Accuracy: 0.6298, Val Loss: 0.8087, Val Accuracy: 0.7022\n", + "===== Epoch 1408/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8400, Train Loss: 0.8570, Train Accuracy: 0.6118, Val Loss: 0.7925, Val Accuracy: 0.6889\n", + "===== Epoch 1409/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8400. Train Loss: 0.8687, Train Accuracy: 0.6298, Val Loss: 0.8350, Val Accuracy: 0.6000\n", + "===== Epoch 1410/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8400. Train Loss: 0.8623, Train Accuracy: 0.6188, Val Loss: 0.8265, Val Accuracy: 0.6089\n", + "===== Epoch 1411/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8400. Train Loss: 0.8584, Train Accuracy: 0.6141, Val Loss: 0.8146, Val Accuracy: 0.6711\n", + "===== Epoch 1412/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8400. Train Loss: 0.8617, Train Accuracy: 0.6204, Val Loss: 0.8240, Val Accuracy: 0.6178\n", + "===== Epoch 1413/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8603, Train Loss: 0.8704, Train Accuracy: 0.6204, Val Loss: 0.7658, Val Accuracy: 0.7111\n", + "===== Epoch 1414/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8603. Train Loss: 0.8686, Train Accuracy: 0.6024, Val Loss: 0.8100, Val Accuracy: 0.6533\n", + "===== Epoch 1415/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8603. Train Loss: 0.8645, Train Accuracy: 0.6141, Val Loss: 0.8210, Val Accuracy: 0.6667\n", + "===== Epoch 1416/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8603. Train Loss: 0.8542, Train Accuracy: 0.6204, Val Loss: 0.8300, Val Accuracy: 0.6533\n", + "===== Epoch 1417/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8603. Train Loss: 0.8442, Train Accuracy: 0.6353, Val Loss: 0.8292, Val Accuracy: 0.6089\n", + "===== Epoch 1418/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8603. Train Loss: 0.8432, Train Accuracy: 0.6259, Val Loss: 0.8098, Val Accuracy: 0.6400\n", + "===== Epoch 1419/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8603. Train Loss: 0.8754, Train Accuracy: 0.6188, Val Loss: 0.8402, Val Accuracy: 0.6533\n", + "===== Epoch 1420/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8603. Train Loss: 0.8391, Train Accuracy: 0.6408, Val Loss: 0.7986, Val Accuracy: 0.6267\n", + "===== Epoch 1421/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8603. Train Loss: 0.8550, Train Accuracy: 0.6290, Val Loss: 0.7926, Val Accuracy: 0.6800\n", + "===== Epoch 1422/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8603. Train Loss: 0.8470, Train Accuracy: 0.6243, Val Loss: 0.8000, Val Accuracy: 0.6844\n", + "===== Epoch 1423/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8603. Train Loss: 0.8481, Train Accuracy: 0.6149, Val Loss: 0.8311, Val Accuracy: 0.6311\n", + "===== Epoch 1424/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8603. Train Loss: 0.8508, Train Accuracy: 0.6235, Val Loss: 0.8650, Val Accuracy: 0.6444\n", + "===== Epoch 1425/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8603. Train Loss: 0.8551, Train Accuracy: 0.6353, Val Loss: 0.8034, Val Accuracy: 0.6711\n", + "===== Epoch 1426/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8603. Train Loss: 0.8410, Train Accuracy: 0.6416, Val Loss: 0.7870, Val Accuracy: 0.6667\n", + "===== Epoch 1427/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8603. Train Loss: 0.8521, Train Accuracy: 0.6086, Val Loss: 0.8272, Val Accuracy: 0.6444\n", + "===== Epoch 1428/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8603. Train Loss: 0.8439, Train Accuracy: 0.6125, Val Loss: 0.8289, Val Accuracy: 0.6089\n", + "===== Epoch 1429/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8603. Train Loss: 0.8601, Train Accuracy: 0.6086, Val Loss: 0.8050, Val Accuracy: 0.6311\n", + "===== Epoch 1430/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8603. Train Loss: 0.8283, Train Accuracy: 0.6392, Val Loss: 0.8000, Val Accuracy: 0.6667\n", + "===== Epoch 1431/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8603. Train Loss: 0.8478, Train Accuracy: 0.6290, Val Loss: 0.8072, Val Accuracy: 0.6756\n", + "===== Epoch 1432/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8603. Train Loss: 0.8602, Train Accuracy: 0.6118, Val Loss: 0.8429, Val Accuracy: 0.6444\n", + "===== Epoch 1433/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8603. Train Loss: 0.8550, Train Accuracy: 0.6188, Val Loss: 0.8232, Val Accuracy: 0.6311\n", + "===== Epoch 1434/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8603. Train Loss: 0.8374, Train Accuracy: 0.6447, Val Loss: 0.7877, Val Accuracy: 0.6711\n", + "===== Epoch 1435/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8603. Train Loss: 0.8328, Train Accuracy: 0.6322, Val Loss: 0.8026, Val Accuracy: 0.6400\n", + "===== Epoch 1436/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8603. Train Loss: 0.8440, Train Accuracy: 0.6173, Val Loss: 0.8023, Val Accuracy: 0.7067\n", + "===== Epoch 1437/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8603. Train Loss: 0.8335, Train Accuracy: 0.6337, Val Loss: 0.8189, Val Accuracy: 0.6356\n", + "===== Epoch 1438/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8603. Train Loss: 0.8314, Train Accuracy: 0.6212, Val Loss: 0.7936, Val Accuracy: 0.6978\n", + "===== Epoch 1439/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8603. Train Loss: 0.8368, Train Accuracy: 0.6376, Val Loss: 0.7944, Val Accuracy: 0.6578\n", + "===== Epoch 1440/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8603. Train Loss: 0.8252, Train Accuracy: 0.6376, Val Loss: 0.8189, Val Accuracy: 0.6533\n", + "===== Epoch 1441/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8603. Train Loss: 0.8492, Train Accuracy: 0.6267, Val Loss: 0.8103, Val Accuracy: 0.6667\n", + "===== Epoch 1442/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8603. Train Loss: 0.8320, Train Accuracy: 0.6376, Val Loss: 0.8183, Val Accuracy: 0.6489\n", + "===== Epoch 1443/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8603. Train Loss: 0.8335, Train Accuracy: 0.6243, Val Loss: 0.7993, Val Accuracy: 0.6578\n", + "===== Epoch 1444/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8603. Train Loss: 0.8276, Train Accuracy: 0.6486, Val Loss: 0.7921, Val Accuracy: 0.7022\n", + "===== Epoch 1445/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8603. Train Loss: 0.8509, Train Accuracy: 0.6204, Val Loss: 0.7904, Val Accuracy: 0.6844\n", + "===== Epoch 1446/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8603. Train Loss: 0.8382, Train Accuracy: 0.6180, Val Loss: 0.7863, Val Accuracy: 0.7067\n", + "===== Epoch 1447/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8603. Train Loss: 0.8264, Train Accuracy: 0.6314, Val Loss: 0.7949, Val Accuracy: 0.6667\n", + "===== Epoch 1448/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8603. Train Loss: 0.8293, Train Accuracy: 0.6235, Val Loss: 0.8125, Val Accuracy: 0.6489\n", + "===== Epoch 1449/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8603. Train Loss: 0.8463, Train Accuracy: 0.6204, Val Loss: 0.7817, Val Accuracy: 0.6933\n", + "===== Epoch 1450/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8603. Train Loss: 0.8338, Train Accuracy: 0.6392, Val Loss: 0.7815, Val Accuracy: 0.7022\n", + "===== Epoch 1451/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8603. Train Loss: 0.8491, Train Accuracy: 0.6290, Val Loss: 0.7890, Val Accuracy: 0.6356\n", + "===== Epoch 1452/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8603. Train Loss: 0.8424, Train Accuracy: 0.6337, Val Loss: 0.7977, Val Accuracy: 0.6400\n", + "===== Epoch 1453/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8603. Train Loss: 0.8348, Train Accuracy: 0.6322, Val Loss: 0.8116, Val Accuracy: 0.6756\n", + "===== Epoch 1454/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8603. Train Loss: 0.8309, Train Accuracy: 0.6314, Val Loss: 0.7897, Val Accuracy: 0.6578\n", + "===== Epoch 1455/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8603. Train Loss: 0.8467, Train Accuracy: 0.6220, Val Loss: 0.8327, Val Accuracy: 0.6622\n", + "===== Epoch 1456/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8603. Train Loss: 0.8424, Train Accuracy: 0.6369, Val Loss: 0.7881, Val Accuracy: 0.6489\n", + "===== Epoch 1457/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8603. Train Loss: 0.8336, Train Accuracy: 0.6345, Val Loss: 0.7739, Val Accuracy: 0.6978\n", + "===== Epoch 1458/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8603. Train Loss: 0.8333, Train Accuracy: 0.6510, Val Loss: 0.8254, Val Accuracy: 0.6667\n", + "===== Epoch 1459/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8603. Train Loss: 0.8501, Train Accuracy: 0.6141, Val Loss: 0.8271, Val Accuracy: 0.6533\n", + "===== Epoch 1460/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8603. Train Loss: 0.8455, Train Accuracy: 0.6314, Val Loss: 0.7928, Val Accuracy: 0.6800\n", + "===== Epoch 1461/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8603. Train Loss: 0.8290, Train Accuracy: 0.6510, Val Loss: 0.7535, Val Accuracy: 0.6844\n", + "===== Epoch 1462/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8603. Train Loss: 0.8543, Train Accuracy: 0.6125, Val Loss: 0.7917, Val Accuracy: 0.6756\n", + "===== Epoch 1463/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8603. Train Loss: 0.8398, Train Accuracy: 0.6541, Val Loss: 0.8121, Val Accuracy: 0.6622\n", + "===== Epoch 1464/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8603. Train Loss: 0.8599, Train Accuracy: 0.6322, Val Loss: 0.7970, Val Accuracy: 0.6267\n", + "===== Epoch 1465/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8603. Train Loss: 0.8358, Train Accuracy: 0.6361, Val Loss: 0.8072, Val Accuracy: 0.7067\n", + "===== Epoch 1466/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8603. Train Loss: 0.8422, Train Accuracy: 0.6157, Val Loss: 0.8003, Val Accuracy: 0.6400\n", + "===== Epoch 1467/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8603. Train Loss: 0.8474, Train Accuracy: 0.6204, Val Loss: 0.8199, Val Accuracy: 0.6311\n", + "===== Epoch 1468/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8603. Train Loss: 0.8312, Train Accuracy: 0.6369, Val Loss: 0.8420, Val Accuracy: 0.6044\n", + "===== Epoch 1469/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8603. Train Loss: 0.8527, Train Accuracy: 0.6157, Val Loss: 0.8082, Val Accuracy: 0.6444\n", + "===== Epoch 1470/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8603. Train Loss: 0.8500, Train Accuracy: 0.6314, Val Loss: 0.8156, Val Accuracy: 0.6444\n", + "===== Epoch 1471/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8603. Train Loss: 0.8580, Train Accuracy: 0.6055, Val Loss: 0.8081, Val Accuracy: 0.6844\n", + "===== Epoch 1472/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8603. Train Loss: 0.8689, Train Accuracy: 0.6078, Val Loss: 0.8109, Val Accuracy: 0.6400\n", + "===== Epoch 1473/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8603. Train Loss: 0.8409, Train Accuracy: 0.6275, Val Loss: 0.7937, Val Accuracy: 0.6889\n", + "===== Epoch 1474/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8603. Train Loss: 0.8507, Train Accuracy: 0.6227, Val Loss: 0.8086, Val Accuracy: 0.6533\n", + "===== Epoch 1475/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8603. Train Loss: 0.8440, Train Accuracy: 0.6275, Val Loss: 0.7740, Val Accuracy: 0.7111\n", + "===== Epoch 1476/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8603. Train Loss: 0.8393, Train Accuracy: 0.6149, Val Loss: 0.7976, Val Accuracy: 0.6489\n", + "===== Epoch 1477/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8603. Train Loss: 0.8606, Train Accuracy: 0.6094, Val Loss: 0.7912, Val Accuracy: 0.6889\n", + "===== Epoch 1478/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8603. Train Loss: 0.8460, Train Accuracy: 0.6094, Val Loss: 0.8608, Val Accuracy: 0.5733\n", + "===== Epoch 1479/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8603. Train Loss: 0.8487, Train Accuracy: 0.6165, Val Loss: 0.8078, Val Accuracy: 0.6533\n", + "===== Epoch 1480/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8603. Train Loss: 0.8676, Train Accuracy: 0.6110, Val Loss: 0.8384, Val Accuracy: 0.6444\n", + "===== Epoch 1481/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8603. Train Loss: 0.9027, Train Accuracy: 0.5710, Val Loss: 0.8090, Val Accuracy: 0.6533\n", + "===== Epoch 1482/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8603. Train Loss: 0.8543, Train Accuracy: 0.6165, Val Loss: 0.8412, Val Accuracy: 0.6533\n", + "===== Epoch 1483/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8603. Train Loss: 0.8558, Train Accuracy: 0.6314, Val Loss: 0.7858, Val Accuracy: 0.6933\n", + "===== Epoch 1484/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8603. Train Loss: 0.8513, Train Accuracy: 0.6141, Val Loss: 0.7886, Val Accuracy: 0.6711\n", + "===== Epoch 1485/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8603. Train Loss: 0.8560, Train Accuracy: 0.6235, Val Loss: 0.8057, Val Accuracy: 0.6889\n", + "===== Epoch 1486/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8603. Train Loss: 0.8420, Train Accuracy: 0.6384, Val Loss: 0.7847, Val Accuracy: 0.6889\n", + "===== Epoch 1487/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8603. Train Loss: 0.8566, Train Accuracy: 0.6141, Val Loss: 0.8644, Val Accuracy: 0.5511\n", + "===== Epoch 1488/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8603. Train Loss: 0.8461, Train Accuracy: 0.6102, Val Loss: 0.7970, Val Accuracy: 0.6844\n", + "===== Epoch 1489/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8603. Train Loss: 0.8410, Train Accuracy: 0.6306, Val Loss: 0.7933, Val Accuracy: 0.6800\n", + "===== Epoch 1490/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8603. Train Loss: 0.8601, Train Accuracy: 0.6204, Val Loss: 0.7957, Val Accuracy: 0.6489\n", + "===== Epoch 1491/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8603. Train Loss: 0.8468, Train Accuracy: 0.6400, Val Loss: 0.8239, Val Accuracy: 0.6622\n", + "===== Epoch 1492/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8603. Train Loss: 0.8297, Train Accuracy: 0.6392, Val Loss: 0.7992, Val Accuracy: 0.6711\n", + "===== Epoch 1493/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8603. Train Loss: 0.8333, Train Accuracy: 0.6259, Val Loss: 0.7853, Val Accuracy: 0.6978\n", + "===== Epoch 1494/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8603. Train Loss: 0.8579, Train Accuracy: 0.6259, Val Loss: 0.8078, Val Accuracy: 0.6889\n", + "===== Epoch 1495/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8603. Train Loss: 0.8375, Train Accuracy: 0.6400, Val Loss: 0.8223, Val Accuracy: 0.6489\n", + "===== Epoch 1496/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8603. Train Loss: 0.8418, Train Accuracy: 0.6408, Val Loss: 0.7785, Val Accuracy: 0.7022\n", + "===== Epoch 1497/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8603. Train Loss: 0.8338, Train Accuracy: 0.6188, Val Loss: 0.8169, Val Accuracy: 0.6489\n", + "===== Epoch 1498/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8603. Train Loss: 0.8225, Train Accuracy: 0.6345, Val Loss: 0.7849, Val Accuracy: 0.6756\n", + "===== Epoch 1499/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8603. Train Loss: 0.8646, Train Accuracy: 0.6102, Val Loss: 0.8029, Val Accuracy: 0.6844\n", + "===== Epoch 1500/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8603. Train Loss: 0.8361, Train Accuracy: 0.6337, Val Loss: 0.8124, Val Accuracy: 0.6356\n", + "===== Epoch 1501/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8603. Train Loss: 0.8427, Train Accuracy: 0.6322, Val Loss: 0.7959, Val Accuracy: 0.6800\n", + "===== Epoch 1502/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8603. Train Loss: 0.8389, Train Accuracy: 0.6180, Val Loss: 0.7708, Val Accuracy: 0.7022\n", + "===== Epoch 1503/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8603. Train Loss: 0.8360, Train Accuracy: 0.6196, Val Loss: 0.9634, Val Accuracy: 0.5244\n", + "===== Epoch 1504/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8603. Train Loss: 0.8665, Train Accuracy: 0.6039, Val Loss: 0.8473, Val Accuracy: 0.6089\n", + "===== Epoch 1505/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8603. Train Loss: 0.8490, Train Accuracy: 0.6110, Val Loss: 0.7645, Val Accuracy: 0.6978\n", + "===== Epoch 1506/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.8603. Train Loss: 0.8349, Train Accuracy: 0.6282, Val Loss: 0.8061, Val Accuracy: 0.6444\n", + "===== Epoch 1507/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.8603. Train Loss: 0.8540, Train Accuracy: 0.6196, Val Loss: 0.7870, Val Accuracy: 0.6800\n", + "===== Epoch 1508/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.8603. Train Loss: 0.8409, Train Accuracy: 0.6369, Val Loss: 0.7879, Val Accuracy: 0.6978\n", + "===== Epoch 1509/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.8603. Train Loss: 0.8510, Train Accuracy: 0.6275, Val Loss: 0.7869, Val Accuracy: 0.6622\n", + "===== Epoch 1510/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.8603. Train Loss: 0.8315, Train Accuracy: 0.6353, Val Loss: 0.7885, Val Accuracy: 0.6578\n", + "===== Epoch 1511/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.8603. Train Loss: 0.8417, Train Accuracy: 0.6298, Val Loss: 0.7682, Val Accuracy: 0.6933\n", + "===== Epoch 1512/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.8603. Train Loss: 0.8384, Train Accuracy: 0.6329, Val Loss: 0.8040, Val Accuracy: 0.6489\n", + "===== Epoch 1513/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.8603. Train Loss: 0.8394, Train Accuracy: 0.6243, Val Loss: 0.8962, Val Accuracy: 0.5644\n", + "===== Epoch 1514/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.8603. Train Loss: 0.8298, Train Accuracy: 0.6165, Val Loss: 0.7783, Val Accuracy: 0.6800\n", + "===== Epoch 1515/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.8603. Train Loss: 0.8430, Train Accuracy: 0.6471, Val Loss: 0.7794, Val Accuracy: 0.6800\n", + "===== Epoch 1516/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.8603. Train Loss: 0.8238, Train Accuracy: 0.6235, Val Loss: 0.7912, Val Accuracy: 0.6844\n", + "===== Epoch 1517/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.8603. Train Loss: 0.8192, Train Accuracy: 0.6424, Val Loss: 0.7751, Val Accuracy: 0.6756\n", + "===== Epoch 1518/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.8603. Train Loss: 0.8403, Train Accuracy: 0.6392, Val Loss: 0.7725, Val Accuracy: 0.6933\n", + "===== Epoch 1519/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.8603. Train Loss: 0.8268, Train Accuracy: 0.6431, Val Loss: 0.8272, Val Accuracy: 0.6489\n", + "===== Epoch 1520/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.8603. Train Loss: 0.8275, Train Accuracy: 0.6557, Val Loss: 0.7553, Val Accuracy: 0.7200\n", + "===== Epoch 1521/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.8603. Train Loss: 0.8295, Train Accuracy: 0.6227, Val Loss: 0.7730, Val Accuracy: 0.7333\n", + "===== Epoch 1522/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.8603. Train Loss: 0.8165, Train Accuracy: 0.6384, Val Loss: 0.7594, Val Accuracy: 0.7244\n", + "===== Epoch 1523/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.8603. Train Loss: 0.8282, Train Accuracy: 0.6424, Val Loss: 0.7772, Val Accuracy: 0.6667\n", + "===== Epoch 1524/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.8603. Train Loss: 0.8377, Train Accuracy: 0.6306, Val Loss: 0.7887, Val Accuracy: 0.6844\n", + "===== Epoch 1525/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.8603. Train Loss: 0.8125, Train Accuracy: 0.6439, Val Loss: 0.7736, Val Accuracy: 0.6933\n", + "===== Epoch 1526/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.8603. Train Loss: 0.8209, Train Accuracy: 0.6549, Val Loss: 0.7605, Val Accuracy: 0.7422\n", + "===== Epoch 1527/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.8603. Train Loss: 0.8174, Train Accuracy: 0.6408, Val Loss: 0.7573, Val Accuracy: 0.6889\n", + "===== Epoch 1528/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.8603. Train Loss: 0.8374, Train Accuracy: 0.6322, Val Loss: 0.8256, Val Accuracy: 0.6400\n", + "===== Epoch 1529/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.8603. Train Loss: 0.8102, Train Accuracy: 0.6722, Val Loss: 0.7783, Val Accuracy: 0.6933\n", + "===== Epoch 1530/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.8603. Train Loss: 0.8112, Train Accuracy: 0.6424, Val Loss: 0.7594, Val Accuracy: 0.6933\n", + "===== Epoch 1531/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.8603. Train Loss: 0.8241, Train Accuracy: 0.6400, Val Loss: 0.7602, Val Accuracy: 0.7200\n", + "===== Epoch 1532/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.8603. Train Loss: 0.8297, Train Accuracy: 0.6384, Val Loss: 0.7932, Val Accuracy: 0.6756\n", + "===== Epoch 1533/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.8603. Train Loss: 0.8196, Train Accuracy: 0.6518, Val Loss: 0.7527, Val Accuracy: 0.7067\n", + "===== Epoch 1534/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.8603. Train Loss: 0.8104, Train Accuracy: 0.6659, Val Loss: 0.7945, Val Accuracy: 0.6933\n", + "===== Epoch 1535/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.8603. Train Loss: 0.8184, Train Accuracy: 0.6431, Val Loss: 0.8053, Val Accuracy: 0.6356\n", + "===== Epoch 1536/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.8603. Train Loss: 0.8327, Train Accuracy: 0.6376, Val Loss: 0.7570, Val Accuracy: 0.6889\n", + "===== Epoch 1537/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.8603. Train Loss: 0.8081, Train Accuracy: 0.6322, Val Loss: 0.7820, Val Accuracy: 0.7067\n", + "===== Epoch 1538/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.8603. Train Loss: 0.8183, Train Accuracy: 0.6447, Val Loss: 0.7647, Val Accuracy: 0.6889\n", + "===== Epoch 1539/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.8603. Train Loss: 0.8169, Train Accuracy: 0.6486, Val Loss: 0.7636, Val Accuracy: 0.7022\n", + "===== Epoch 1540/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.8603. Train Loss: 0.8185, Train Accuracy: 0.6384, Val Loss: 0.7696, Val Accuracy: 0.7156\n", + "===== Epoch 1541/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.8603. Train Loss: 0.8160, Train Accuracy: 0.6518, Val Loss: 0.7548, Val Accuracy: 0.7244\n", + "===== Epoch 1542/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.8603. Train Loss: 0.8020, Train Accuracy: 0.6596, Val Loss: 0.7871, Val Accuracy: 0.6667\n", + "===== Epoch 1543/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.8603. Train Loss: 0.8137, Train Accuracy: 0.6455, Val Loss: 0.7579, Val Accuracy: 0.7067\n", + "===== Epoch 1544/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8644, Train Loss: 0.8213, Train Accuracy: 0.6518, Val Loss: 0.7545, Val Accuracy: 0.7111\n", + "===== Epoch 1545/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8644. Train Loss: 0.8113, Train Accuracy: 0.6525, Val Loss: 0.7761, Val Accuracy: 0.6622\n", + "===== Epoch 1546/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8644. Train Loss: 0.8153, Train Accuracy: 0.6565, Val Loss: 0.7966, Val Accuracy: 0.6711\n", + "===== Epoch 1547/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8644. Train Loss: 0.8170, Train Accuracy: 0.6463, Val Loss: 0.7613, Val Accuracy: 0.6667\n", + "===== Epoch 1548/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8644. Train Loss: 0.8109, Train Accuracy: 0.6651, Val Loss: 0.7680, Val Accuracy: 0.6844\n", + "===== Epoch 1549/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8644. Train Loss: 0.8204, Train Accuracy: 0.6447, Val Loss: 0.7751, Val Accuracy: 0.7244\n", + "===== Epoch 1550/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8644. Train Loss: 0.8014, Train Accuracy: 0.6620, Val Loss: 0.7593, Val Accuracy: 0.6844\n", + "===== Epoch 1551/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8644. Train Loss: 0.8133, Train Accuracy: 0.6439, Val Loss: 0.7688, Val Accuracy: 0.6978\n", + "===== Epoch 1552/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8644. Train Loss: 0.8282, Train Accuracy: 0.6463, Val Loss: 0.7617, Val Accuracy: 0.7200\n", + "===== Epoch 1553/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8644. Train Loss: 0.8227, Train Accuracy: 0.6376, Val Loss: 0.7917, Val Accuracy: 0.6667\n", + "===== Epoch 1554/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8644. Train Loss: 0.8117, Train Accuracy: 0.6447, Val Loss: 0.8109, Val Accuracy: 0.6667\n", + "===== Epoch 1555/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8644. Train Loss: 0.8136, Train Accuracy: 0.6345, Val Loss: 0.7722, Val Accuracy: 0.6889\n", + "===== Epoch 1556/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8644. Train Loss: 0.8231, Train Accuracy: 0.6353, Val Loss: 0.7841, Val Accuracy: 0.6889\n", + "===== Epoch 1557/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8644. Train Loss: 0.8303, Train Accuracy: 0.6337, Val Loss: 0.7821, Val Accuracy: 0.6933\n", + "===== Epoch 1558/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8644. Train Loss: 0.8304, Train Accuracy: 0.6298, Val Loss: 0.7803, Val Accuracy: 0.6933\n", + "===== Epoch 1559/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8644. Train Loss: 0.8233, Train Accuracy: 0.6604, Val Loss: 0.7832, Val Accuracy: 0.6978\n", + "===== Epoch 1560/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8644. Train Loss: 0.8278, Train Accuracy: 0.6361, Val Loss: 0.7984, Val Accuracy: 0.6844\n", + "===== Epoch 1561/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8644. Train Loss: 0.8340, Train Accuracy: 0.6369, Val Loss: 0.7807, Val Accuracy: 0.6889\n", + "===== Epoch 1562/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8644. Train Loss: 0.8259, Train Accuracy: 0.6290, Val Loss: 0.7731, Val Accuracy: 0.6800\n", + "===== Epoch 1563/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8644. Train Loss: 0.8063, Train Accuracy: 0.6580, Val Loss: 0.7771, Val Accuracy: 0.6711\n", + "===== Epoch 1564/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8644. Train Loss: 0.8229, Train Accuracy: 0.6627, Val Loss: 0.7626, Val Accuracy: 0.7200\n", + "===== Epoch 1565/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8644. Train Loss: 0.8298, Train Accuracy: 0.6400, Val Loss: 0.7802, Val Accuracy: 0.6844\n", + "===== Epoch 1566/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8644. Train Loss: 0.8455, Train Accuracy: 0.6188, Val Loss: 0.7832, Val Accuracy: 0.6978\n", + "===== Epoch 1567/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8644. Train Loss: 0.8258, Train Accuracy: 0.6494, Val Loss: 0.7828, Val Accuracy: 0.6978\n", + "===== Epoch 1568/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8644. Train Loss: 0.8374, Train Accuracy: 0.6369, Val Loss: 0.8056, Val Accuracy: 0.6533\n", + "===== Epoch 1569/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8644. Train Loss: 0.8222, Train Accuracy: 0.6384, Val Loss: 0.7776, Val Accuracy: 0.7378\n", + "===== Epoch 1570/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8644. Train Loss: 0.8367, Train Accuracy: 0.6486, Val Loss: 0.7756, Val Accuracy: 0.7156\n", + "===== Epoch 1571/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8644. Train Loss: 0.8397, Train Accuracy: 0.6282, Val Loss: 0.8133, Val Accuracy: 0.6356\n", + "===== Epoch 1572/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8644. Train Loss: 0.8440, Train Accuracy: 0.6282, Val Loss: 0.7785, Val Accuracy: 0.6978\n", + "===== Epoch 1573/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8644. Train Loss: 0.8137, Train Accuracy: 0.6408, Val Loss: 0.8056, Val Accuracy: 0.6489\n", + "===== Epoch 1574/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8644. Train Loss: 0.8251, Train Accuracy: 0.6424, Val Loss: 0.7773, Val Accuracy: 0.6622\n", + "===== Epoch 1575/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8644. Train Loss: 0.8313, Train Accuracy: 0.6369, Val Loss: 0.8078, Val Accuracy: 0.6178\n", + "===== Epoch 1576/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8644. Train Loss: 0.8398, Train Accuracy: 0.6227, Val Loss: 0.7670, Val Accuracy: 0.7156\n", + "===== Epoch 1577/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8644. Train Loss: 0.8244, Train Accuracy: 0.6392, Val Loss: 0.7595, Val Accuracy: 0.6889\n", + "===== Epoch 1578/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8644. Train Loss: 0.8424, Train Accuracy: 0.6306, Val Loss: 0.7679, Val Accuracy: 0.7156\n", + "===== Epoch 1579/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8644. Train Loss: 0.8336, Train Accuracy: 0.6384, Val Loss: 0.7887, Val Accuracy: 0.6578\n", + "===== Epoch 1580/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8644. Train Loss: 0.8375, Train Accuracy: 0.6298, Val Loss: 0.8024, Val Accuracy: 0.6533\n", + "===== Epoch 1581/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8644. Train Loss: 0.8358, Train Accuracy: 0.6282, Val Loss: 0.7973, Val Accuracy: 0.6933\n", + "===== Epoch 1582/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8644. Train Loss: 0.8370, Train Accuracy: 0.6251, Val Loss: 0.7761, Val Accuracy: 0.6578\n", + "===== Epoch 1583/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8644. Train Loss: 0.8285, Train Accuracy: 0.6353, Val Loss: 0.8143, Val Accuracy: 0.6667\n", + "===== Epoch 1584/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8644. Train Loss: 0.8323, Train Accuracy: 0.6384, Val Loss: 0.8031, Val Accuracy: 0.6444\n", + "===== Epoch 1585/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8644. Train Loss: 0.8514, Train Accuracy: 0.6314, Val Loss: 0.7721, Val Accuracy: 0.6800\n", + "===== Epoch 1586/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8644. Train Loss: 0.8305, Train Accuracy: 0.6439, Val Loss: 0.7701, Val Accuracy: 0.6889\n", + "===== Epoch 1587/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8644. Train Loss: 0.8382, Train Accuracy: 0.6259, Val Loss: 0.8418, Val Accuracy: 0.6222\n", + "===== Epoch 1588/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8644. Train Loss: 0.8528, Train Accuracy: 0.6282, Val Loss: 0.8004, Val Accuracy: 0.6578\n", + "===== Epoch 1589/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8644. Train Loss: 0.8417, Train Accuracy: 0.6149, Val Loss: 0.7761, Val Accuracy: 0.6978\n", + "===== Epoch 1590/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8644. Train Loss: 0.8289, Train Accuracy: 0.6416, Val Loss: 0.8027, Val Accuracy: 0.6800\n", + "===== Epoch 1591/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8644. Train Loss: 0.8281, Train Accuracy: 0.6400, Val Loss: 0.7605, Val Accuracy: 0.6933\n", + "===== Epoch 1592/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8644. Train Loss: 0.8161, Train Accuracy: 0.6573, Val Loss: 0.7790, Val Accuracy: 0.6756\n", + "===== Epoch 1593/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8644. Train Loss: 0.8518, Train Accuracy: 0.6290, Val Loss: 0.7813, Val Accuracy: 0.6711\n", + "===== Epoch 1594/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8644. Train Loss: 0.8373, Train Accuracy: 0.6165, Val Loss: 0.7665, Val Accuracy: 0.7156\n", + "===== Epoch 1595/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8644. Train Loss: 0.8165, Train Accuracy: 0.6298, Val Loss: 0.7625, Val Accuracy: 0.7067\n", + "===== Epoch 1596/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8644. Train Loss: 0.8150, Train Accuracy: 0.6533, Val Loss: 0.7826, Val Accuracy: 0.6578\n", + "===== Epoch 1597/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8644. Train Loss: 0.8225, Train Accuracy: 0.6408, Val Loss: 0.8222, Val Accuracy: 0.6178\n", + "===== Epoch 1598/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8644. Train Loss: 0.8058, Train Accuracy: 0.6557, Val Loss: 0.8005, Val Accuracy: 0.6222\n", + "===== Epoch 1599/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8644. Train Loss: 0.8578, Train Accuracy: 0.6110, Val Loss: 0.8130, Val Accuracy: 0.6667\n", + "===== Epoch 1600/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8644. Train Loss: 0.8252, Train Accuracy: 0.6439, Val Loss: 0.7838, Val Accuracy: 0.6933\n", + "===== Epoch 1601/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8644. Train Loss: 0.8037, Train Accuracy: 0.6651, Val Loss: 0.8265, Val Accuracy: 0.6489\n", + "===== Epoch 1602/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8644. Train Loss: 0.8240, Train Accuracy: 0.6353, Val Loss: 0.7835, Val Accuracy: 0.6844\n", + "===== Epoch 1603/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8644. Train Loss: 0.8600, Train Accuracy: 0.6180, Val Loss: 0.7885, Val Accuracy: 0.6356\n", + "===== Epoch 1604/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8644. Train Loss: 0.8288, Train Accuracy: 0.6510, Val Loss: 0.7766, Val Accuracy: 0.6889\n", + "===== Epoch 1605/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8644. Train Loss: 0.8254, Train Accuracy: 0.6431, Val Loss: 0.7666, Val Accuracy: 0.7378\n", + "===== Epoch 1606/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8644. Train Loss: 0.8082, Train Accuracy: 0.6753, Val Loss: 0.7745, Val Accuracy: 0.6667\n", + "===== Epoch 1607/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8644. Train Loss: 0.8135, Train Accuracy: 0.6596, Val Loss: 0.7678, Val Accuracy: 0.7289\n", + "===== Epoch 1608/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8644. Train Loss: 0.8471, Train Accuracy: 0.6345, Val Loss: 0.7970, Val Accuracy: 0.6933\n", + "===== Epoch 1609/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8644. Train Loss: 0.8179, Train Accuracy: 0.6604, Val Loss: 0.7935, Val Accuracy: 0.6533\n", + "===== Epoch 1610/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8644. Train Loss: 0.8350, Train Accuracy: 0.6282, Val Loss: 0.7707, Val Accuracy: 0.6533\n", + "===== Epoch 1611/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8644. Train Loss: 0.8190, Train Accuracy: 0.6369, Val Loss: 0.7885, Val Accuracy: 0.6667\n", + "===== Epoch 1612/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8644. Train Loss: 0.8136, Train Accuracy: 0.6596, Val Loss: 0.7652, Val Accuracy: 0.6667\n", + "===== Epoch 1613/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8644. Train Loss: 0.8128, Train Accuracy: 0.6557, Val Loss: 0.7677, Val Accuracy: 0.6667\n", + "===== Epoch 1614/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8644. Train Loss: 0.8028, Train Accuracy: 0.6549, Val Loss: 0.7681, Val Accuracy: 0.6978\n", + "===== Epoch 1615/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8644. Train Loss: 0.8111, Train Accuracy: 0.6502, Val Loss: 0.7834, Val Accuracy: 0.6444\n", + "===== Epoch 1616/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8644. Train Loss: 0.7951, Train Accuracy: 0.6737, Val Loss: 0.7535, Val Accuracy: 0.7067\n", + "===== Epoch 1617/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8644. Train Loss: 0.8178, Train Accuracy: 0.6533, Val Loss: 0.7786, Val Accuracy: 0.6800\n", + "===== Epoch 1618/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8644. Train Loss: 0.8171, Train Accuracy: 0.6651, Val Loss: 0.7449, Val Accuracy: 0.7200\n", + "===== Epoch 1619/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8644. Train Loss: 0.8078, Train Accuracy: 0.6502, Val Loss: 0.7669, Val Accuracy: 0.6933\n", + "===== Epoch 1620/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8644. Train Loss: 0.8176, Train Accuracy: 0.6463, Val Loss: 0.7857, Val Accuracy: 0.6978\n", + "===== Epoch 1621/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8644. Train Loss: 0.8177, Train Accuracy: 0.6463, Val Loss: 0.7690, Val Accuracy: 0.6844\n", + "===== Epoch 1622/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8644. Train Loss: 0.7922, Train Accuracy: 0.6502, Val Loss: 0.7590, Val Accuracy: 0.6844\n", + "===== Epoch 1623/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8644. Train Loss: 0.8056, Train Accuracy: 0.6494, Val Loss: 0.7829, Val Accuracy: 0.6667\n", + "===== Epoch 1624/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8644. Train Loss: 0.8285, Train Accuracy: 0.6345, Val Loss: 0.7703, Val Accuracy: 0.7200\n", + "===== Epoch 1625/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8644. Train Loss: 0.8064, Train Accuracy: 0.6502, Val Loss: 0.7560, Val Accuracy: 0.7289\n", + "===== Epoch 1626/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8644. Train Loss: 0.8103, Train Accuracy: 0.6557, Val Loss: 0.7491, Val Accuracy: 0.6844\n", + "===== Epoch 1627/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8709, Train Loss: 0.8183, Train Accuracy: 0.6306, Val Loss: 0.7393, Val Accuracy: 0.6933\n", + "===== Epoch 1628/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8709. Train Loss: 0.8061, Train Accuracy: 0.6682, Val Loss: 0.7969, Val Accuracy: 0.6444\n", + "===== Epoch 1629/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6675, Val Loss: 0.7514, Val Accuracy: 0.6978\n", + "===== Epoch 1630/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8709. Train Loss: 0.8053, Train Accuracy: 0.6698, Val Loss: 0.7718, Val Accuracy: 0.6933\n", + "===== Epoch 1631/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8709. Train Loss: 0.8072, Train Accuracy: 0.6651, Val Loss: 0.7908, Val Accuracy: 0.6667\n", + "===== Epoch 1632/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6533, Val Loss: 0.7830, Val Accuracy: 0.6800\n", + "===== Epoch 1633/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8709. Train Loss: 0.8081, Train Accuracy: 0.6424, Val Loss: 0.7926, Val Accuracy: 0.6889\n", + "===== Epoch 1634/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8709. Train Loss: 0.8159, Train Accuracy: 0.6376, Val Loss: 0.7703, Val Accuracy: 0.6889\n", + "===== Epoch 1635/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8709. Train Loss: 0.7886, Train Accuracy: 0.6722, Val Loss: 0.7730, Val Accuracy: 0.6844\n", + "===== Epoch 1636/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8709. Train Loss: 0.7934, Train Accuracy: 0.6580, Val Loss: 0.7681, Val Accuracy: 0.7067\n", + "===== Epoch 1637/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8709. Train Loss: 0.8059, Train Accuracy: 0.6651, Val Loss: 0.7981, Val Accuracy: 0.6844\n", + "===== Epoch 1638/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8709. Train Loss: 0.8134, Train Accuracy: 0.6510, Val Loss: 0.7684, Val Accuracy: 0.6667\n", + "===== Epoch 1639/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8709. Train Loss: 0.8132, Train Accuracy: 0.6612, Val Loss: 0.7440, Val Accuracy: 0.7333\n", + "===== Epoch 1640/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8709. Train Loss: 0.7930, Train Accuracy: 0.6651, Val Loss: 0.7670, Val Accuracy: 0.7333\n", + "===== Epoch 1641/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8709. Train Loss: 0.7963, Train Accuracy: 0.6667, Val Loss: 0.7778, Val Accuracy: 0.6756\n", + "===== Epoch 1642/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8709. Train Loss: 0.8148, Train Accuracy: 0.6690, Val Loss: 0.7472, Val Accuracy: 0.7244\n", + "===== Epoch 1643/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8709. Train Loss: 0.8018, Train Accuracy: 0.6565, Val Loss: 0.7596, Val Accuracy: 0.6933\n", + "===== Epoch 1644/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8709. Train Loss: 0.7945, Train Accuracy: 0.6690, Val Loss: 0.7787, Val Accuracy: 0.6800\n", + "===== Epoch 1645/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8709. Train Loss: 0.8090, Train Accuracy: 0.6525, Val Loss: 0.7489, Val Accuracy: 0.7111\n", + "===== Epoch 1646/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8709. Train Loss: 0.8020, Train Accuracy: 0.6447, Val Loss: 0.7530, Val Accuracy: 0.6978\n", + "===== Epoch 1647/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8709. Train Loss: 0.8060, Train Accuracy: 0.6604, Val Loss: 0.7582, Val Accuracy: 0.6978\n", + "===== Epoch 1648/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8709. Train Loss: 0.7970, Train Accuracy: 0.6784, Val Loss: 0.7359, Val Accuracy: 0.7422\n", + "===== Epoch 1649/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8709. Train Loss: 0.8086, Train Accuracy: 0.6478, Val Loss: 0.7687, Val Accuracy: 0.7067\n", + "===== Epoch 1650/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8709. Train Loss: 0.8065, Train Accuracy: 0.6604, Val Loss: 0.7985, Val Accuracy: 0.6800\n", + "===== Epoch 1651/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8709. Train Loss: 0.8044, Train Accuracy: 0.6698, Val Loss: 0.7603, Val Accuracy: 0.7289\n", + "===== Epoch 1652/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8709. Train Loss: 0.8112, Train Accuracy: 0.6510, Val Loss: 0.7802, Val Accuracy: 0.6444\n", + "===== Epoch 1653/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8709. Train Loss: 0.8136, Train Accuracy: 0.6447, Val Loss: 0.7460, Val Accuracy: 0.6933\n", + "===== Epoch 1654/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8709. Train Loss: 0.7959, Train Accuracy: 0.6510, Val Loss: 0.7745, Val Accuracy: 0.6889\n", + "===== Epoch 1655/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8709. Train Loss: 0.8072, Train Accuracy: 0.6510, Val Loss: 0.7848, Val Accuracy: 0.6667\n", + "===== Epoch 1656/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8709. Train Loss: 0.8014, Train Accuracy: 0.6651, Val Loss: 0.7609, Val Accuracy: 0.7067\n", + "===== Epoch 1657/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8709. Train Loss: 0.8121, Train Accuracy: 0.6659, Val Loss: 0.7691, Val Accuracy: 0.6844\n", + "===== Epoch 1658/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8709. Train Loss: 0.8094, Train Accuracy: 0.6620, Val Loss: 0.7898, Val Accuracy: 0.7022\n", + "===== Epoch 1659/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8709. Train Loss: 0.7994, Train Accuracy: 0.6706, Val Loss: 0.7727, Val Accuracy: 0.6889\n", + "===== Epoch 1660/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8709. Train Loss: 0.8047, Train Accuracy: 0.6580, Val Loss: 0.7794, Val Accuracy: 0.6756\n", + "===== Epoch 1661/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8709. Train Loss: 0.8085, Train Accuracy: 0.6502, Val Loss: 0.7829, Val Accuracy: 0.6844\n", + "===== Epoch 1662/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8709. Train Loss: 0.7973, Train Accuracy: 0.6761, Val Loss: 0.7640, Val Accuracy: 0.7111\n", + "===== Epoch 1663/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8709. Train Loss: 0.8018, Train Accuracy: 0.6541, Val Loss: 0.8068, Val Accuracy: 0.6844\n", + "===== Epoch 1664/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8740, Train Loss: 0.7947, Train Accuracy: 0.6675, Val Loss: 0.7340, Val Accuracy: 0.7422\n", + "===== Epoch 1665/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8740. Train Loss: 0.7958, Train Accuracy: 0.6675, Val Loss: 0.7504, Val Accuracy: 0.7067\n", + "===== Epoch 1666/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8740. Train Loss: 0.8105, Train Accuracy: 0.6643, Val Loss: 0.7805, Val Accuracy: 0.6667\n", + "===== Epoch 1667/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8740. Train Loss: 0.7970, Train Accuracy: 0.6800, Val Loss: 0.7398, Val Accuracy: 0.7467\n", + "===== Epoch 1668/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8740. Train Loss: 0.8111, Train Accuracy: 0.6447, Val Loss: 0.7748, Val Accuracy: 0.6800\n", + "===== Epoch 1669/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8740. Train Loss: 0.8057, Train Accuracy: 0.6596, Val Loss: 0.7396, Val Accuracy: 0.6711\n", + "===== Epoch 1670/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8740. Train Loss: 0.8165, Train Accuracy: 0.6549, Val Loss: 0.7592, Val Accuracy: 0.7111\n", + "===== Epoch 1671/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8740. Train Loss: 0.8333, Train Accuracy: 0.6369, Val Loss: 0.8013, Val Accuracy: 0.6933\n", + "===== Epoch 1672/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8740. Train Loss: 0.8060, Train Accuracy: 0.6604, Val Loss: 0.7633, Val Accuracy: 0.6711\n", + "===== Epoch 1673/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8740. Train Loss: 0.8181, Train Accuracy: 0.6541, Val Loss: 0.8368, Val Accuracy: 0.6311\n", + "===== Epoch 1674/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8740. Train Loss: 0.8109, Train Accuracy: 0.6714, Val Loss: 0.7802, Val Accuracy: 0.6889\n", + "===== Epoch 1675/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8740. Train Loss: 0.8099, Train Accuracy: 0.6635, Val Loss: 0.7916, Val Accuracy: 0.6756\n", + "===== Epoch 1676/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8740. Train Loss: 0.8156, Train Accuracy: 0.6635, Val Loss: 0.7648, Val Accuracy: 0.6933\n", + "===== Epoch 1677/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8740. Train Loss: 0.8367, Train Accuracy: 0.6267, Val Loss: 0.7703, Val Accuracy: 0.6800\n", + "===== Epoch 1678/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8740. Train Loss: 0.8282, Train Accuracy: 0.6392, Val Loss: 0.7835, Val Accuracy: 0.6622\n", + "===== Epoch 1679/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8740. Train Loss: 0.8118, Train Accuracy: 0.6525, Val Loss: 0.7845, Val Accuracy: 0.6933\n", + "===== Epoch 1680/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8740. Train Loss: 0.7994, Train Accuracy: 0.6510, Val Loss: 0.7826, Val Accuracy: 0.6800\n", + "===== Epoch 1681/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8740. Train Loss: 0.8114, Train Accuracy: 0.6580, Val Loss: 0.7675, Val Accuracy: 0.6711\n", + "===== Epoch 1682/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8740. Train Loss: 0.8313, Train Accuracy: 0.6416, Val Loss: 0.7944, Val Accuracy: 0.6800\n", + "===== Epoch 1683/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8740. Train Loss: 0.8082, Train Accuracy: 0.6659, Val Loss: 0.7650, Val Accuracy: 0.6800\n", + "===== Epoch 1684/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8740. Train Loss: 0.8742, Train Accuracy: 0.6000, Val Loss: 0.7877, Val Accuracy: 0.6533\n", + "===== Epoch 1685/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8740. Train Loss: 0.8277, Train Accuracy: 0.6275, Val Loss: 0.8018, Val Accuracy: 0.6222\n", + "===== Epoch 1686/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8740. Train Loss: 0.8116, Train Accuracy: 0.6651, Val Loss: 0.7750, Val Accuracy: 0.6978\n", + "===== Epoch 1687/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8740. Train Loss: 0.8189, Train Accuracy: 0.6471, Val Loss: 0.7955, Val Accuracy: 0.6356\n", + "===== Epoch 1688/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8740. Train Loss: 0.8217, Train Accuracy: 0.6557, Val Loss: 0.7818, Val Accuracy: 0.6400\n", + "===== Epoch 1689/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8740. Train Loss: 0.8160, Train Accuracy: 0.6620, Val Loss: 0.7740, Val Accuracy: 0.7111\n", + "===== Epoch 1690/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8740. Train Loss: 0.8163, Train Accuracy: 0.6463, Val Loss: 0.7560, Val Accuracy: 0.6933\n", + "===== Epoch 1691/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8740. Train Loss: 0.8022, Train Accuracy: 0.6643, Val Loss: 0.7553, Val Accuracy: 0.6711\n", + "===== Epoch 1692/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8740. Train Loss: 0.8270, Train Accuracy: 0.6424, Val Loss: 0.7709, Val Accuracy: 0.6933\n", + "===== Epoch 1693/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8740. Train Loss: 0.8271, Train Accuracy: 0.6322, Val Loss: 0.8005, Val Accuracy: 0.6444\n", + "===== Epoch 1694/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8740. Train Loss: 0.8230, Train Accuracy: 0.6612, Val Loss: 0.7596, Val Accuracy: 0.6933\n", + "===== Epoch 1695/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8740. Train Loss: 0.8043, Train Accuracy: 0.6620, Val Loss: 0.7667, Val Accuracy: 0.7022\n", + "===== Epoch 1696/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8740. Train Loss: 0.8198, Train Accuracy: 0.6502, Val Loss: 0.7884, Val Accuracy: 0.6800\n", + "===== Epoch 1697/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8740. Train Loss: 0.8211, Train Accuracy: 0.6408, Val Loss: 0.7902, Val Accuracy: 0.6756\n", + "===== Epoch 1698/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8740. Train Loss: 0.8192, Train Accuracy: 0.6541, Val Loss: 0.8055, Val Accuracy: 0.6622\n", + "===== Epoch 1699/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8740. Train Loss: 0.8217, Train Accuracy: 0.6502, Val Loss: 0.7623, Val Accuracy: 0.7200\n", + "===== Epoch 1700/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8740. Train Loss: 0.8157, Train Accuracy: 0.6573, Val Loss: 0.7672, Val Accuracy: 0.6978\n", + "===== Epoch 1701/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8740. Train Loss: 0.8134, Train Accuracy: 0.6573, Val Loss: 0.7840, Val Accuracy: 0.6889\n", + "===== Epoch 1702/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8740. Train Loss: 0.7926, Train Accuracy: 0.6580, Val Loss: 0.7866, Val Accuracy: 0.6756\n", + "===== Epoch 1703/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8740. Train Loss: 0.8197, Train Accuracy: 0.6502, Val Loss: 0.7768, Val Accuracy: 0.6933\n", + "===== Epoch 1704/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8740. Train Loss: 0.8230, Train Accuracy: 0.6549, Val Loss: 0.7645, Val Accuracy: 0.6889\n", + "===== Epoch 1705/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8740. Train Loss: 0.8162, Train Accuracy: 0.6392, Val Loss: 0.7448, Val Accuracy: 0.7244\n", + "===== Epoch 1706/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8740. Train Loss: 0.8057, Train Accuracy: 0.6502, Val Loss: 0.7637, Val Accuracy: 0.7333\n", + "===== Epoch 1707/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8740. Train Loss: 0.8072, Train Accuracy: 0.6620, Val Loss: 0.7637, Val Accuracy: 0.7200\n", + "===== Epoch 1708/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8740. Train Loss: 0.8097, Train Accuracy: 0.6447, Val Loss: 0.7519, Val Accuracy: 0.7200\n", + "===== Epoch 1709/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8740. Train Loss: 0.7967, Train Accuracy: 0.6627, Val Loss: 0.7536, Val Accuracy: 0.7333\n", + "===== Epoch 1710/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8740. Train Loss: 0.8093, Train Accuracy: 0.6612, Val Loss: 0.7542, Val Accuracy: 0.7289\n", + "===== Epoch 1711/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8740. Train Loss: 0.8045, Train Accuracy: 0.6745, Val Loss: 0.7533, Val Accuracy: 0.6889\n", + "===== Epoch 1712/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8740. Train Loss: 0.7852, Train Accuracy: 0.6737, Val Loss: 0.7767, Val Accuracy: 0.6622\n", + "===== Epoch 1713/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8740. Train Loss: 0.8135, Train Accuracy: 0.6557, Val Loss: 0.7683, Val Accuracy: 0.7022\n", + "===== Epoch 1714/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8740. Train Loss: 0.7932, Train Accuracy: 0.6729, Val Loss: 0.7552, Val Accuracy: 0.6889\n", + "===== Epoch 1715/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8740. Train Loss: 0.8132, Train Accuracy: 0.6494, Val Loss: 0.7958, Val Accuracy: 0.6711\n", + "===== Epoch 1716/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8740. Train Loss: 0.8141, Train Accuracy: 0.6525, Val Loss: 0.7810, Val Accuracy: 0.6756\n", + "===== Epoch 1717/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8740. Train Loss: 0.8185, Train Accuracy: 0.6502, Val Loss: 0.7788, Val Accuracy: 0.6933\n", + "===== Epoch 1718/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8740. Train Loss: 0.7994, Train Accuracy: 0.6722, Val Loss: 0.7777, Val Accuracy: 0.6533\n", + "===== Epoch 1719/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8740. Train Loss: 0.8047, Train Accuracy: 0.6729, Val Loss: 0.7317, Val Accuracy: 0.7289\n", + "===== Epoch 1720/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8740. Train Loss: 0.7930, Train Accuracy: 0.6761, Val Loss: 0.7593, Val Accuracy: 0.7156\n", + "===== Epoch 1721/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8740. Train Loss: 0.7915, Train Accuracy: 0.6761, Val Loss: 0.7665, Val Accuracy: 0.7022\n", + "===== Epoch 1722/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8740. Train Loss: 0.7906, Train Accuracy: 0.6839, Val Loss: 0.7572, Val Accuracy: 0.6889\n", + "===== Epoch 1723/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8740. Train Loss: 0.7995, Train Accuracy: 0.6753, Val Loss: 0.7792, Val Accuracy: 0.6622\n", + "===== Epoch 1724/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8740. Train Loss: 0.7943, Train Accuracy: 0.6596, Val Loss: 0.7302, Val Accuracy: 0.7244\n", + "===== Epoch 1725/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8740. Train Loss: 0.7947, Train Accuracy: 0.6682, Val Loss: 0.7621, Val Accuracy: 0.6933\n", + "===== Epoch 1726/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8740. Train Loss: 0.7950, Train Accuracy: 0.6894, Val Loss: 0.7432, Val Accuracy: 0.6889\n", + "===== Epoch 1727/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8740. Train Loss: 0.7970, Train Accuracy: 0.6690, Val Loss: 0.7403, Val Accuracy: 0.7111\n", + "===== Epoch 1728/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8740. Train Loss: 0.7999, Train Accuracy: 0.6690, Val Loss: 0.7635, Val Accuracy: 0.7200\n", + "===== Epoch 1729/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8740. Train Loss: 0.7936, Train Accuracy: 0.6737, Val Loss: 0.7813, Val Accuracy: 0.6978\n", + "===== Epoch 1730/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8740. Train Loss: 0.7995, Train Accuracy: 0.6753, Val Loss: 0.7358, Val Accuracy: 0.7244\n", + "===== Epoch 1731/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8740. Train Loss: 0.7924, Train Accuracy: 0.6722, Val Loss: 0.7480, Val Accuracy: 0.6978\n", + "===== Epoch 1732/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8740. Train Loss: 0.7969, Train Accuracy: 0.6573, Val Loss: 0.7580, Val Accuracy: 0.7111\n", + "===== Epoch 1733/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8740. Train Loss: 0.7967, Train Accuracy: 0.6565, Val Loss: 0.7340, Val Accuracy: 0.7378\n", + "===== Epoch 1734/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8740. Train Loss: 0.7900, Train Accuracy: 0.6714, Val Loss: 0.7604, Val Accuracy: 0.6889\n", + "===== Epoch 1735/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8740. Train Loss: 0.7883, Train Accuracy: 0.6784, Val Loss: 0.7436, Val Accuracy: 0.7067\n", + "===== Epoch 1736/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8740. Train Loss: 0.7866, Train Accuracy: 0.6659, Val Loss: 0.7595, Val Accuracy: 0.6978\n", + "===== Epoch 1737/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8740. Train Loss: 0.7838, Train Accuracy: 0.6761, Val Loss: 0.7522, Val Accuracy: 0.6844\n", + "===== Epoch 1738/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8740. Train Loss: 0.7917, Train Accuracy: 0.6753, Val Loss: 0.7438, Val Accuracy: 0.7378\n", + "===== Epoch 1739/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8851, Train Loss: 0.7880, Train Accuracy: 0.6863, Val Loss: 0.7180, Val Accuracy: 0.7689\n", + "===== Epoch 1740/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8851. Train Loss: 0.7803, Train Accuracy: 0.6871, Val Loss: 0.7411, Val Accuracy: 0.7156\n", + "===== Epoch 1741/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8851. Train Loss: 0.7688, Train Accuracy: 0.6800, Val Loss: 0.7447, Val Accuracy: 0.7244\n", + "===== Epoch 1742/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8851. Train Loss: 0.7874, Train Accuracy: 0.6690, Val Loss: 0.7828, Val Accuracy: 0.6889\n", + "===== Epoch 1743/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8851. Train Loss: 0.8007, Train Accuracy: 0.6580, Val Loss: 0.7574, Val Accuracy: 0.7111\n", + "===== Epoch 1744/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8851. Train Loss: 0.7742, Train Accuracy: 0.6933, Val Loss: 0.7546, Val Accuracy: 0.7244\n", + "===== Epoch 1745/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8851. Train Loss: 0.7767, Train Accuracy: 0.6847, Val Loss: 0.7668, Val Accuracy: 0.6933\n", + "===== Epoch 1746/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8851. Train Loss: 0.7963, Train Accuracy: 0.6596, Val Loss: 0.7552, Val Accuracy: 0.6889\n", + "===== Epoch 1747/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8851. Train Loss: 0.7717, Train Accuracy: 0.6941, Val Loss: 0.7679, Val Accuracy: 0.7067\n", + "===== Epoch 1748/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8851. Train Loss: 0.7715, Train Accuracy: 0.6996, Val Loss: 0.7681, Val Accuracy: 0.7200\n", + "===== Epoch 1749/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8851. Train Loss: 0.7920, Train Accuracy: 0.6776, Val Loss: 0.7218, Val Accuracy: 0.7067\n", + "===== Epoch 1750/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8851. Train Loss: 0.8039, Train Accuracy: 0.6627, Val Loss: 0.7551, Val Accuracy: 0.7022\n", + "===== Epoch 1751/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8851. Train Loss: 0.7913, Train Accuracy: 0.6729, Val Loss: 0.7476, Val Accuracy: 0.6978\n", + "===== Epoch 1752/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8851. Train Loss: 0.7915, Train Accuracy: 0.6659, Val Loss: 0.7617, Val Accuracy: 0.6800\n", + "===== Epoch 1753/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8851. Train Loss: 0.7890, Train Accuracy: 0.6816, Val Loss: 0.7556, Val Accuracy: 0.7156\n", + "===== Epoch 1754/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8851. Train Loss: 0.7892, Train Accuracy: 0.6557, Val Loss: 0.7536, Val Accuracy: 0.7022\n", + "===== Epoch 1755/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8851. Train Loss: 0.8108, Train Accuracy: 0.6439, Val Loss: 0.7517, Val Accuracy: 0.7200\n", + "===== Epoch 1756/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8851. Train Loss: 0.7847, Train Accuracy: 0.6831, Val Loss: 0.7534, Val Accuracy: 0.6978\n", + "===== Epoch 1757/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8851. Train Loss: 0.8010, Train Accuracy: 0.6392, Val Loss: 0.7728, Val Accuracy: 0.6756\n", + "===== Epoch 1758/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8851. Train Loss: 0.8012, Train Accuracy: 0.6635, Val Loss: 0.7442, Val Accuracy: 0.7378\n", + "===== Epoch 1759/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8851. Train Loss: 0.7861, Train Accuracy: 0.6706, Val Loss: 0.7752, Val Accuracy: 0.6711\n", + "===== Epoch 1760/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8851. Train Loss: 0.8010, Train Accuracy: 0.6620, Val Loss: 0.7520, Val Accuracy: 0.6933\n", + "===== Epoch 1761/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8851. Train Loss: 0.7915, Train Accuracy: 0.6596, Val Loss: 0.7683, Val Accuracy: 0.7111\n", + "===== Epoch 1762/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8851. Train Loss: 0.8049, Train Accuracy: 0.6533, Val Loss: 0.7881, Val Accuracy: 0.6711\n", + "===== Epoch 1763/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8851. Train Loss: 0.7914, Train Accuracy: 0.6737, Val Loss: 0.7725, Val Accuracy: 0.6889\n", + "===== Epoch 1764/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8851. Train Loss: 0.7993, Train Accuracy: 0.6643, Val Loss: 0.8583, Val Accuracy: 0.5956\n", + "===== Epoch 1765/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8851. Train Loss: 0.8228, Train Accuracy: 0.6384, Val Loss: 0.7468, Val Accuracy: 0.7156\n", + "===== Epoch 1766/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8851. Train Loss: 0.7774, Train Accuracy: 0.6949, Val Loss: 0.7789, Val Accuracy: 0.6756\n", + "===== Epoch 1767/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8851. Train Loss: 0.8108, Train Accuracy: 0.6400, Val Loss: 0.7691, Val Accuracy: 0.6711\n", + "===== Epoch 1768/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8851. Train Loss: 0.7907, Train Accuracy: 0.6824, Val Loss: 0.8223, Val Accuracy: 0.6089\n", + "===== Epoch 1769/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8851. Train Loss: 0.7942, Train Accuracy: 0.6722, Val Loss: 0.7433, Val Accuracy: 0.7333\n", + "===== Epoch 1770/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8851. Train Loss: 0.7977, Train Accuracy: 0.6761, Val Loss: 0.8172, Val Accuracy: 0.6800\n", + "===== Epoch 1771/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8851. Train Loss: 0.8057, Train Accuracy: 0.6533, Val Loss: 0.7646, Val Accuracy: 0.6978\n", + "===== Epoch 1772/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8851. Train Loss: 0.8042, Train Accuracy: 0.6675, Val Loss: 0.7791, Val Accuracy: 0.6756\n", + "===== Epoch 1773/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8851. Train Loss: 0.8130, Train Accuracy: 0.6502, Val Loss: 0.7777, Val Accuracy: 0.6711\n", + "===== Epoch 1774/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8851. Train Loss: 0.7892, Train Accuracy: 0.6643, Val Loss: 0.7539, Val Accuracy: 0.6978\n", + "===== Epoch 1775/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8851. Train Loss: 0.7937, Train Accuracy: 0.6565, Val Loss: 0.7962, Val Accuracy: 0.6622\n", + "===== Epoch 1776/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8851. Train Loss: 0.8204, Train Accuracy: 0.6486, Val Loss: 0.7699, Val Accuracy: 0.6844\n", + "===== Epoch 1777/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8851. Train Loss: 0.8098, Train Accuracy: 0.6541, Val Loss: 0.7624, Val Accuracy: 0.6844\n", + "===== Epoch 1778/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8851. Train Loss: 0.7931, Train Accuracy: 0.6745, Val Loss: 0.8054, Val Accuracy: 0.6711\n", + "===== Epoch 1779/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8851. Train Loss: 0.8026, Train Accuracy: 0.6651, Val Loss: 0.7442, Val Accuracy: 0.6933\n", + "===== Epoch 1780/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8851. Train Loss: 0.7897, Train Accuracy: 0.6698, Val Loss: 0.7820, Val Accuracy: 0.6667\n", + "===== Epoch 1781/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8851. Train Loss: 0.7924, Train Accuracy: 0.6635, Val Loss: 0.7513, Val Accuracy: 0.7067\n", + "===== Epoch 1782/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8851. Train Loss: 0.7968, Train Accuracy: 0.6722, Val Loss: 0.7322, Val Accuracy: 0.7422\n", + "===== Epoch 1783/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8851. Train Loss: 0.7946, Train Accuracy: 0.6839, Val Loss: 0.7844, Val Accuracy: 0.6800\n", + "===== Epoch 1784/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8851. Train Loss: 0.7960, Train Accuracy: 0.6620, Val Loss: 0.7545, Val Accuracy: 0.7156\n", + "===== Epoch 1785/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8851. Train Loss: 0.8089, Train Accuracy: 0.6549, Val Loss: 0.7498, Val Accuracy: 0.6889\n", + "===== Epoch 1786/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8851. Train Loss: 0.8039, Train Accuracy: 0.6557, Val Loss: 0.7349, Val Accuracy: 0.7156\n", + "===== Epoch 1787/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8851. Train Loss: 0.8040, Train Accuracy: 0.6690, Val Loss: 0.7397, Val Accuracy: 0.7467\n", + "===== Epoch 1788/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8851. Train Loss: 0.8011, Train Accuracy: 0.6549, Val Loss: 0.7774, Val Accuracy: 0.6800\n", + "===== Epoch 1789/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8851. Train Loss: 0.8105, Train Accuracy: 0.6627, Val Loss: 0.7445, Val Accuracy: 0.6933\n", + "===== Epoch 1790/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8851. Train Loss: 0.7988, Train Accuracy: 0.6502, Val Loss: 0.7740, Val Accuracy: 0.7244\n", + "===== Epoch 1791/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8851. Train Loss: 0.7987, Train Accuracy: 0.6682, Val Loss: 0.7482, Val Accuracy: 0.7156\n", + "===== Epoch 1792/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8851. Train Loss: 0.7952, Train Accuracy: 0.6698, Val Loss: 0.7744, Val Accuracy: 0.6978\n", + "===== Epoch 1793/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8851. Train Loss: 0.8032, Train Accuracy: 0.6533, Val Loss: 0.7614, Val Accuracy: 0.7156\n", + "===== Epoch 1794/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8851. Train Loss: 0.7896, Train Accuracy: 0.6737, Val Loss: 0.7602, Val Accuracy: 0.7022\n", + "===== Epoch 1795/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8851. Train Loss: 0.8199, Train Accuracy: 0.6541, Val Loss: 0.7581, Val Accuracy: 0.7022\n", + "===== Epoch 1796/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8851. Train Loss: 0.8098, Train Accuracy: 0.6627, Val Loss: 0.7444, Val Accuracy: 0.7378\n", + "===== Epoch 1797/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8851. Train Loss: 0.8043, Train Accuracy: 0.6541, Val Loss: 0.7480, Val Accuracy: 0.7333\n", + "===== Epoch 1798/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8851. Train Loss: 0.7885, Train Accuracy: 0.6604, Val Loss: 0.7712, Val Accuracy: 0.7156\n", + "===== Epoch 1799/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8851. Train Loss: 0.8064, Train Accuracy: 0.6573, Val Loss: 0.7846, Val Accuracy: 0.6089\n", + "===== Epoch 1800/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8851. Train Loss: 0.7972, Train Accuracy: 0.6690, Val Loss: 0.7408, Val Accuracy: 0.7289\n", + "===== Epoch 1801/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8851. Train Loss: 0.7940, Train Accuracy: 0.6737, Val Loss: 0.7951, Val Accuracy: 0.6578\n", + "===== Epoch 1802/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8851. Train Loss: 0.7980, Train Accuracy: 0.6722, Val Loss: 0.7688, Val Accuracy: 0.6844\n", + "===== Epoch 1803/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8851. Train Loss: 0.8069, Train Accuracy: 0.6667, Val Loss: 0.7442, Val Accuracy: 0.7200\n", + "===== Epoch 1804/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8851. Train Loss: 0.8009, Train Accuracy: 0.6635, Val Loss: 0.7624, Val Accuracy: 0.7289\n", + "===== Epoch 1805/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8851. Train Loss: 0.8040, Train Accuracy: 0.6502, Val Loss: 0.7492, Val Accuracy: 0.7378\n", + "===== Epoch 1806/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8851. Train Loss: 0.7918, Train Accuracy: 0.6714, Val Loss: 0.7905, Val Accuracy: 0.6978\n", + "===== Epoch 1807/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8851. Train Loss: 0.8015, Train Accuracy: 0.6690, Val Loss: 0.7514, Val Accuracy: 0.6889\n", + "===== Epoch 1808/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8851. Train Loss: 0.7884, Train Accuracy: 0.6627, Val Loss: 0.7651, Val Accuracy: 0.6533\n", + "===== Epoch 1809/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8851. Train Loss: 0.7866, Train Accuracy: 0.6729, Val Loss: 0.7363, Val Accuracy: 0.6933\n", + "===== Epoch 1810/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8851. Train Loss: 0.8011, Train Accuracy: 0.6604, Val Loss: 0.7259, Val Accuracy: 0.7200\n", + "===== Epoch 1811/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8851. Train Loss: 0.7827, Train Accuracy: 0.6784, Val Loss: 0.7561, Val Accuracy: 0.7022\n", + "===== Epoch 1812/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8851. Train Loss: 0.7818, Train Accuracy: 0.6714, Val Loss: 0.7642, Val Accuracy: 0.6711\n", + "===== Epoch 1813/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8851. Train Loss: 0.7828, Train Accuracy: 0.6698, Val Loss: 0.7260, Val Accuracy: 0.7156\n", + "===== Epoch 1814/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8851. Train Loss: 0.7798, Train Accuracy: 0.6784, Val Loss: 0.8096, Val Accuracy: 0.6356\n", + "===== Epoch 1815/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8851. Train Loss: 0.7813, Train Accuracy: 0.6918, Val Loss: 0.7437, Val Accuracy: 0.6933\n", + "===== Epoch 1816/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8851. Train Loss: 0.7839, Train Accuracy: 0.6816, Val Loss: 0.7424, Val Accuracy: 0.6933\n", + "===== Epoch 1817/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8851. Train Loss: 0.7822, Train Accuracy: 0.6839, Val Loss: 0.7840, Val Accuracy: 0.6889\n", + "===== Epoch 1818/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8851. Train Loss: 0.7933, Train Accuracy: 0.6847, Val Loss: 0.7382, Val Accuracy: 0.7156\n", + "===== Epoch 1819/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8851. Train Loss: 0.7764, Train Accuracy: 0.6769, Val Loss: 0.7279, Val Accuracy: 0.7244\n", + "===== Epoch 1820/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8851. Train Loss: 0.7700, Train Accuracy: 0.6996, Val Loss: 0.7350, Val Accuracy: 0.7244\n", + "===== Epoch 1821/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8851. Train Loss: 0.7710, Train Accuracy: 0.6878, Val Loss: 0.7404, Val Accuracy: 0.7156\n", + "===== Epoch 1822/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8851. Train Loss: 0.7864, Train Accuracy: 0.6667, Val Loss: 0.7197, Val Accuracy: 0.7289\n", + "===== Epoch 1823/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8851. Train Loss: 0.7902, Train Accuracy: 0.6533, Val Loss: 0.7451, Val Accuracy: 0.6978\n", + "===== Epoch 1824/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8853, Train Loss: 0.7825, Train Accuracy: 0.6800, Val Loss: 0.7099, Val Accuracy: 0.7733\n", + "===== Epoch 1825/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8853. Train Loss: 0.7737, Train Accuracy: 0.6863, Val Loss: 0.7594, Val Accuracy: 0.7022\n", + "===== Epoch 1826/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8853. Train Loss: 0.7838, Train Accuracy: 0.6894, Val Loss: 0.7417, Val Accuracy: 0.7067\n", + "===== Epoch 1827/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8853. Train Loss: 0.7683, Train Accuracy: 0.6996, Val Loss: 0.7290, Val Accuracy: 0.7378\n", + "===== Epoch 1828/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8853. Train Loss: 0.7866, Train Accuracy: 0.6722, Val Loss: 0.7564, Val Accuracy: 0.6756\n", + "===== Epoch 1829/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8853. Train Loss: 0.7731, Train Accuracy: 0.6753, Val Loss: 0.7664, Val Accuracy: 0.6756\n", + "===== Epoch 1830/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8853. Train Loss: 0.7678, Train Accuracy: 0.6996, Val Loss: 0.7751, Val Accuracy: 0.6711\n", + "===== Epoch 1831/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8853. Train Loss: 0.7845, Train Accuracy: 0.6682, Val Loss: 0.7134, Val Accuracy: 0.7244\n", + "===== Epoch 1832/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8853. Train Loss: 0.7809, Train Accuracy: 0.6784, Val Loss: 0.7283, Val Accuracy: 0.7422\n", + "===== Epoch 1833/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8853. Train Loss: 0.7767, Train Accuracy: 0.6714, Val Loss: 0.7513, Val Accuracy: 0.7022\n", + "===== Epoch 1834/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8853. Train Loss: 0.7859, Train Accuracy: 0.6784, Val Loss: 0.7554, Val Accuracy: 0.7111\n", + "===== Epoch 1835/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8853. Train Loss: 0.7740, Train Accuracy: 0.6878, Val Loss: 0.7414, Val Accuracy: 0.7289\n", + "===== Epoch 1836/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8853. Train Loss: 0.7736, Train Accuracy: 0.6816, Val Loss: 0.7467, Val Accuracy: 0.7200\n", + "===== Epoch 1837/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8853. Train Loss: 0.7769, Train Accuracy: 0.6988, Val Loss: 0.7243, Val Accuracy: 0.7511\n", + "===== Epoch 1838/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8853. Train Loss: 0.7781, Train Accuracy: 0.6918, Val Loss: 0.7367, Val Accuracy: 0.7289\n", + "===== Epoch 1839/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8853. Train Loss: 0.7779, Train Accuracy: 0.6831, Val Loss: 0.7510, Val Accuracy: 0.6933\n", + "===== Epoch 1840/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8853. Train Loss: 0.7668, Train Accuracy: 0.6894, Val Loss: 0.7576, Val Accuracy: 0.7200\n", + "===== Epoch 1841/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8853. Train Loss: 0.7650, Train Accuracy: 0.6965, Val Loss: 0.7278, Val Accuracy: 0.7422\n", + "===== Epoch 1842/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8853. Train Loss: 0.7547, Train Accuracy: 0.7169, Val Loss: 0.7164, Val Accuracy: 0.7600\n", + "===== Epoch 1843/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8853. Train Loss: 0.7813, Train Accuracy: 0.6878, Val Loss: 0.7432, Val Accuracy: 0.6756\n", + "===== Epoch 1844/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8853. Train Loss: 0.7823, Train Accuracy: 0.6776, Val Loss: 0.7498, Val Accuracy: 0.6978\n", + "===== Epoch 1845/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8853. Train Loss: 0.7768, Train Accuracy: 0.6910, Val Loss: 0.7841, Val Accuracy: 0.6533\n", + "===== Epoch 1846/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8853. Train Loss: 0.7815, Train Accuracy: 0.6831, Val Loss: 0.7558, Val Accuracy: 0.7111\n", + "===== Epoch 1847/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8853. Train Loss: 0.7853, Train Accuracy: 0.6855, Val Loss: 0.7510, Val Accuracy: 0.7067\n", + "===== Epoch 1848/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8853. Train Loss: 0.7700, Train Accuracy: 0.6871, Val Loss: 0.7395, Val Accuracy: 0.7244\n", + "===== Epoch 1849/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8853. Train Loss: 0.7794, Train Accuracy: 0.6675, Val Loss: 0.7642, Val Accuracy: 0.7244\n", + "===== Epoch 1850/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8853. Train Loss: 0.7710, Train Accuracy: 0.6949, Val Loss: 0.7469, Val Accuracy: 0.7289\n", + "===== Epoch 1851/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8853. Train Loss: 0.7664, Train Accuracy: 0.6996, Val Loss: 0.7726, Val Accuracy: 0.6978\n", + "===== Epoch 1852/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8853. Train Loss: 0.7860, Train Accuracy: 0.6800, Val Loss: 0.7444, Val Accuracy: 0.6889\n", + "===== Epoch 1853/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8853. Train Loss: 0.7701, Train Accuracy: 0.6824, Val Loss: 0.7322, Val Accuracy: 0.7467\n", + "===== Epoch 1854/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8853. Train Loss: 0.7640, Train Accuracy: 0.6918, Val Loss: 0.7377, Val Accuracy: 0.7467\n", + "===== Epoch 1855/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8853. Train Loss: 0.7724, Train Accuracy: 0.7027, Val Loss: 0.7715, Val Accuracy: 0.7111\n", + "===== Epoch 1856/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8853. Train Loss: 0.7706, Train Accuracy: 0.6816, Val Loss: 0.7562, Val Accuracy: 0.7200\n", + "===== Epoch 1857/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8853. Train Loss: 0.7880, Train Accuracy: 0.6824, Val Loss: 0.7471, Val Accuracy: 0.7289\n", + "===== Epoch 1858/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8853. Train Loss: 0.7822, Train Accuracy: 0.6792, Val Loss: 0.7264, Val Accuracy: 0.7244\n", + "===== Epoch 1859/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6776, Val Loss: 0.7646, Val Accuracy: 0.6711\n", + "===== Epoch 1860/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8853. Train Loss: 0.7861, Train Accuracy: 0.6635, Val Loss: 0.7527, Val Accuracy: 0.7244\n", + "===== Epoch 1861/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8853. Train Loss: 0.7685, Train Accuracy: 0.6761, Val Loss: 0.7448, Val Accuracy: 0.7067\n", + "===== Epoch 1862/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8853. Train Loss: 0.7982, Train Accuracy: 0.6729, Val Loss: 0.7592, Val Accuracy: 0.7022\n", + "===== Epoch 1863/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8853. Train Loss: 0.7663, Train Accuracy: 0.7059, Val Loss: 0.7345, Val Accuracy: 0.7200\n", + "===== Epoch 1864/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8853. Train Loss: 0.7863, Train Accuracy: 0.6651, Val Loss: 0.7591, Val Accuracy: 0.7111\n", + "===== Epoch 1865/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8853. Train Loss: 0.7843, Train Accuracy: 0.6682, Val Loss: 0.7474, Val Accuracy: 0.7200\n", + "===== Epoch 1866/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8853. Train Loss: 0.7715, Train Accuracy: 0.6871, Val Loss: 0.7278, Val Accuracy: 0.7289\n", + "===== Epoch 1867/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8853. Train Loss: 0.7796, Train Accuracy: 0.6910, Val Loss: 0.7658, Val Accuracy: 0.7200\n", + "===== Epoch 1868/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8853. Train Loss: 0.7690, Train Accuracy: 0.6894, Val Loss: 0.7582, Val Accuracy: 0.6756\n", + "===== Epoch 1869/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8853. Train Loss: 0.7888, Train Accuracy: 0.6706, Val Loss: 0.7345, Val Accuracy: 0.7244\n", + "===== Epoch 1870/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8853. Train Loss: 0.7806, Train Accuracy: 0.6722, Val Loss: 0.7582, Val Accuracy: 0.6844\n", + "===== Epoch 1871/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6910, Val Loss: 0.7805, Val Accuracy: 0.6889\n", + "===== Epoch 1872/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8853. Train Loss: 0.7834, Train Accuracy: 0.6776, Val Loss: 0.7497, Val Accuracy: 0.7156\n", + "===== Epoch 1873/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8853. Train Loss: 0.7801, Train Accuracy: 0.6753, Val Loss: 0.7530, Val Accuracy: 0.7067\n", + "===== Epoch 1874/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8853. Train Loss: 0.7943, Train Accuracy: 0.6714, Val Loss: 0.7369, Val Accuracy: 0.7289\n", + "===== Epoch 1875/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8853. Train Loss: 0.7985, Train Accuracy: 0.6651, Val Loss: 0.7323, Val Accuracy: 0.7067\n", + "===== Epoch 1876/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8853. Train Loss: 0.7889, Train Accuracy: 0.6729, Val Loss: 0.8122, Val Accuracy: 0.6044\n", + "===== Epoch 1877/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8853. Train Loss: 0.8085, Train Accuracy: 0.6573, Val Loss: 0.7454, Val Accuracy: 0.7111\n", + "===== Epoch 1878/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8853. Train Loss: 0.7751, Train Accuracy: 0.6792, Val Loss: 0.7407, Val Accuracy: 0.7378\n", + "===== Epoch 1879/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8853. Train Loss: 0.8014, Train Accuracy: 0.6635, Val Loss: 0.7886, Val Accuracy: 0.6444\n", + "===== Epoch 1880/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8853. Train Loss: 0.7827, Train Accuracy: 0.6776, Val Loss: 0.7296, Val Accuracy: 0.7200\n", + "===== Epoch 1881/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8853. Train Loss: 0.7985, Train Accuracy: 0.6831, Val Loss: 0.7886, Val Accuracy: 0.6533\n", + "===== Epoch 1882/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8853. Train Loss: 0.8038, Train Accuracy: 0.6643, Val Loss: 0.7169, Val Accuracy: 0.7111\n", + "===== Epoch 1883/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8853. Train Loss: 0.7862, Train Accuracy: 0.6698, Val Loss: 0.7581, Val Accuracy: 0.6889\n", + "===== Epoch 1884/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8853. Train Loss: 0.7802, Train Accuracy: 0.6863, Val Loss: 0.7594, Val Accuracy: 0.6933\n", + "===== Epoch 1885/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8853. Train Loss: 0.8190, Train Accuracy: 0.6447, Val Loss: 0.7742, Val Accuracy: 0.6711\n", + "===== Epoch 1886/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8853. Train Loss: 0.7921, Train Accuracy: 0.6588, Val Loss: 0.7335, Val Accuracy: 0.7289\n", + "===== Epoch 1887/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8853. Train Loss: 0.7963, Train Accuracy: 0.6604, Val Loss: 0.7433, Val Accuracy: 0.7022\n", + "===== Epoch 1888/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8853. Train Loss: 0.7958, Train Accuracy: 0.6596, Val Loss: 0.7448, Val Accuracy: 0.7111\n", + "===== Epoch 1889/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8853. Train Loss: 0.7908, Train Accuracy: 0.6737, Val Loss: 0.7679, Val Accuracy: 0.7244\n", + "===== Epoch 1890/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8853. Train Loss: 0.7929, Train Accuracy: 0.6729, Val Loss: 0.7750, Val Accuracy: 0.7067\n", + "===== Epoch 1891/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8853. Train Loss: 0.8141, Train Accuracy: 0.6408, Val Loss: 0.7525, Val Accuracy: 0.7111\n", + "===== Epoch 1892/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8853. Train Loss: 0.8086, Train Accuracy: 0.6494, Val Loss: 0.7640, Val Accuracy: 0.7156\n", + "===== Epoch 1893/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8853. Train Loss: 0.7877, Train Accuracy: 0.6533, Val Loss: 0.7319, Val Accuracy: 0.7067\n", + "===== Epoch 1894/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8853. Train Loss: 0.7793, Train Accuracy: 0.6988, Val Loss: 0.7278, Val Accuracy: 0.7067\n", + "===== Epoch 1895/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8853. Train Loss: 0.7846, Train Accuracy: 0.6651, Val Loss: 0.8018, Val Accuracy: 0.6222\n", + "===== Epoch 1896/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8853. Train Loss: 0.8248, Train Accuracy: 0.6627, Val Loss: 0.8082, Val Accuracy: 0.6756\n", + "===== Epoch 1897/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8853. Train Loss: 0.7732, Train Accuracy: 0.6816, Val Loss: 0.7445, Val Accuracy: 0.6800\n", + "===== Epoch 1898/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8853. Train Loss: 0.7964, Train Accuracy: 0.6667, Val Loss: 0.7432, Val Accuracy: 0.7333\n", + "===== Epoch 1899/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8853. Train Loss: 0.8010, Train Accuracy: 0.6698, Val Loss: 0.7557, Val Accuracy: 0.7556\n", + "===== Epoch 1900/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8853. Train Loss: 0.7795, Train Accuracy: 0.6776, Val Loss: 0.7695, Val Accuracy: 0.6711\n", + "===== Epoch 1901/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8853. Train Loss: 0.7728, Train Accuracy: 0.6800, Val Loss: 0.7494, Val Accuracy: 0.6889\n", + "===== Epoch 1902/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8904, Train Loss: 0.7732, Train Accuracy: 0.6910, Val Loss: 0.7104, Val Accuracy: 0.7378\n", + "===== Epoch 1903/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8904. Train Loss: 0.7754, Train Accuracy: 0.6918, Val Loss: 0.8251, Val Accuracy: 0.6489\n", + "===== Epoch 1904/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8904. Train Loss: 0.7941, Train Accuracy: 0.6776, Val Loss: 0.7909, Val Accuracy: 0.6978\n", + "===== Epoch 1905/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8904. Train Loss: 0.7875, Train Accuracy: 0.6776, Val Loss: 0.7425, Val Accuracy: 0.6844\n", + "===== Epoch 1906/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8904. Train Loss: 0.7741, Train Accuracy: 0.6855, Val Loss: 0.7430, Val Accuracy: 0.7022\n", + "===== Epoch 1907/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8904. Train Loss: 0.7779, Train Accuracy: 0.6753, Val Loss: 0.7235, Val Accuracy: 0.7467\n", + "===== Epoch 1908/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8908, Train Loss: 0.7871, Train Accuracy: 0.6596, Val Loss: 0.7074, Val Accuracy: 0.7600\n", + "===== Epoch 1909/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8908. Train Loss: 0.7692, Train Accuracy: 0.6831, Val Loss: 0.8017, Val Accuracy: 0.6844\n", + "===== Epoch 1910/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8908. Train Loss: 0.7939, Train Accuracy: 0.6831, Val Loss: 0.7449, Val Accuracy: 0.7378\n", + "===== Epoch 1911/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8908. Train Loss: 0.7904, Train Accuracy: 0.6714, Val Loss: 0.7579, Val Accuracy: 0.6889\n", + "===== Epoch 1912/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8908. Train Loss: 0.7698, Train Accuracy: 0.6910, Val Loss: 0.7425, Val Accuracy: 0.6978\n", + "===== Epoch 1913/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8908. Train Loss: 0.7714, Train Accuracy: 0.7004, Val Loss: 0.7805, Val Accuracy: 0.6844\n", + "===== Epoch 1914/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8908. Train Loss: 0.7760, Train Accuracy: 0.6761, Val Loss: 0.7542, Val Accuracy: 0.6756\n", + "===== Epoch 1915/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8908. Train Loss: 0.7749, Train Accuracy: 0.6745, Val Loss: 0.7446, Val Accuracy: 0.7022\n", + "===== Epoch 1916/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8908. Train Loss: 0.7597, Train Accuracy: 0.6980, Val Loss: 0.7383, Val Accuracy: 0.7378\n", + "===== Epoch 1917/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8908. Train Loss: 0.7739, Train Accuracy: 0.6792, Val Loss: 0.7245, Val Accuracy: 0.7333\n", + "===== Epoch 1918/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8908. Train Loss: 0.7762, Train Accuracy: 0.6761, Val Loss: 0.7231, Val Accuracy: 0.7378\n", + "===== Epoch 1919/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8908. Train Loss: 0.7613, Train Accuracy: 0.6855, Val Loss: 0.7679, Val Accuracy: 0.6800\n", + "===== Epoch 1920/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8908. Train Loss: 0.7622, Train Accuracy: 0.6933, Val Loss: 0.7371, Val Accuracy: 0.6978\n", + "===== Epoch 1921/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8908. Train Loss: 0.7629, Train Accuracy: 0.6973, Val Loss: 0.7294, Val Accuracy: 0.7244\n", + "===== Epoch 1922/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8908. Train Loss: 0.7567, Train Accuracy: 0.7020, Val Loss: 0.7225, Val Accuracy: 0.7156\n", + "===== Epoch 1923/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8908. Train Loss: 0.7605, Train Accuracy: 0.7075, Val Loss: 0.7289, Val Accuracy: 0.7378\n", + "===== Epoch 1924/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8908. Train Loss: 0.7677, Train Accuracy: 0.6871, Val Loss: 0.7348, Val Accuracy: 0.7200\n", + "===== Epoch 1925/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8908. Train Loss: 0.7790, Train Accuracy: 0.6761, Val Loss: 0.7453, Val Accuracy: 0.7022\n", + "===== Epoch 1926/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8908. Train Loss: 0.7634, Train Accuracy: 0.6863, Val Loss: 0.7275, Val Accuracy: 0.7111\n", + "===== Epoch 1927/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8908. Train Loss: 0.7709, Train Accuracy: 0.6816, Val Loss: 0.7235, Val Accuracy: 0.7556\n", + "===== Epoch 1928/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8908. Train Loss: 0.7695, Train Accuracy: 0.6988, Val Loss: 0.7559, Val Accuracy: 0.6978\n", + "===== Epoch 1929/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8908. Train Loss: 0.7674, Train Accuracy: 0.6933, Val Loss: 0.7363, Val Accuracy: 0.6978\n", + "===== Epoch 1930/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8908. Train Loss: 0.7611, Train Accuracy: 0.6776, Val Loss: 0.7476, Val Accuracy: 0.6978\n", + "===== Epoch 1931/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8908. Train Loss: 0.7690, Train Accuracy: 0.6878, Val Loss: 0.7259, Val Accuracy: 0.7156\n", + "===== Epoch 1932/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8908. Train Loss: 0.7645, Train Accuracy: 0.7004, Val Loss: 0.7226, Val Accuracy: 0.7333\n", + "===== Epoch 1933/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8908. Train Loss: 0.7609, Train Accuracy: 0.7098, Val Loss: 0.7506, Val Accuracy: 0.7022\n", + "===== Epoch 1934/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8908. Train Loss: 0.7694, Train Accuracy: 0.6949, Val Loss: 0.7362, Val Accuracy: 0.7289\n", + "===== Epoch 1935/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8908. Train Loss: 0.7598, Train Accuracy: 0.6941, Val Loss: 0.7469, Val Accuracy: 0.7244\n", + "===== Epoch 1936/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8908. Train Loss: 0.7545, Train Accuracy: 0.7114, Val Loss: 0.7252, Val Accuracy: 0.7244\n", + "===== Epoch 1937/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8908. Train Loss: 0.7644, Train Accuracy: 0.7012, Val Loss: 0.7196, Val Accuracy: 0.7556\n", + "===== Epoch 1938/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8908. Train Loss: 0.7665, Train Accuracy: 0.6847, Val Loss: 0.7609, Val Accuracy: 0.6667\n", + "===== Epoch 1939/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8908. Train Loss: 0.7756, Train Accuracy: 0.6965, Val Loss: 0.7255, Val Accuracy: 0.7200\n", + "===== Epoch 1940/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8908. Train Loss: 0.7642, Train Accuracy: 0.6996, Val Loss: 0.7512, Val Accuracy: 0.7244\n", + "===== Epoch 1941/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8908. Train Loss: 0.7681, Train Accuracy: 0.6910, Val Loss: 0.7172, Val Accuracy: 0.7333\n", + "===== Epoch 1942/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8908. Train Loss: 0.7637, Train Accuracy: 0.6988, Val Loss: 0.7343, Val Accuracy: 0.7422\n", + "===== Epoch 1943/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8908. Train Loss: 0.7580, Train Accuracy: 0.6831, Val Loss: 0.7345, Val Accuracy: 0.6889\n", + "===== Epoch 1944/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8908. Train Loss: 0.7623, Train Accuracy: 0.6980, Val Loss: 0.7300, Val Accuracy: 0.7022\n", + "===== Epoch 1945/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8908. Train Loss: 0.7671, Train Accuracy: 0.6988, Val Loss: 0.7183, Val Accuracy: 0.7289\n", + "===== Epoch 1946/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8908. Train Loss: 0.7533, Train Accuracy: 0.7067, Val Loss: 0.7361, Val Accuracy: 0.7067\n", + "===== Epoch 1947/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8908. Train Loss: 0.7764, Train Accuracy: 0.6792, Val Loss: 0.7262, Val Accuracy: 0.7600\n", + "===== Epoch 1948/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8908. Train Loss: 0.7710, Train Accuracy: 0.6902, Val Loss: 0.7443, Val Accuracy: 0.7111\n", + "===== Epoch 1949/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8908. Train Loss: 0.7564, Train Accuracy: 0.7012, Val Loss: 0.7458, Val Accuracy: 0.7289\n", + "===== Epoch 1950/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8908. Train Loss: 0.7716, Train Accuracy: 0.7090, Val Loss: 0.7372, Val Accuracy: 0.7067\n", + "===== Epoch 1951/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8908. Train Loss: 0.7699, Train Accuracy: 0.7043, Val Loss: 0.7432, Val Accuracy: 0.6844\n", + "===== Epoch 1952/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8908. Train Loss: 0.7515, Train Accuracy: 0.7145, Val Loss: 0.7354, Val Accuracy: 0.7244\n", + "===== Epoch 1953/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8908. Train Loss: 0.7750, Train Accuracy: 0.6886, Val Loss: 0.7231, Val Accuracy: 0.7422\n", + "===== Epoch 1954/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8908. Train Loss: 0.7725, Train Accuracy: 0.6831, Val Loss: 0.7160, Val Accuracy: 0.7378\n", + "===== Epoch 1955/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8908. Train Loss: 0.7726, Train Accuracy: 0.6925, Val Loss: 0.7513, Val Accuracy: 0.7022\n", + "===== Epoch 1956/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8908. Train Loss: 0.7771, Train Accuracy: 0.6949, Val Loss: 0.7283, Val Accuracy: 0.7333\n", + "===== Epoch 1957/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8908. Train Loss: 0.7673, Train Accuracy: 0.7035, Val Loss: 0.7519, Val Accuracy: 0.6933\n", + "===== Epoch 1958/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8908. Train Loss: 0.7747, Train Accuracy: 0.6855, Val Loss: 0.7533, Val Accuracy: 0.6800\n", + "===== Epoch 1959/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8908. Train Loss: 0.7618, Train Accuracy: 0.6902, Val Loss: 0.7344, Val Accuracy: 0.7289\n", + "===== Epoch 1960/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8908. Train Loss: 0.7605, Train Accuracy: 0.6965, Val Loss: 0.7319, Val Accuracy: 0.7378\n", + "===== Epoch 1961/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8908. Train Loss: 0.7649, Train Accuracy: 0.6902, Val Loss: 0.7216, Val Accuracy: 0.7378\n", + "===== Epoch 1962/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8908. Train Loss: 0.7543, Train Accuracy: 0.6957, Val Loss: 0.7416, Val Accuracy: 0.7200\n", + "===== Epoch 1963/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8908. Train Loss: 0.7674, Train Accuracy: 0.6863, Val Loss: 0.7668, Val Accuracy: 0.6889\n", + "===== Epoch 1964/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8908. Train Loss: 0.7789, Train Accuracy: 0.6667, Val Loss: 0.7815, Val Accuracy: 0.6622\n", + "===== Epoch 1965/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8908. Train Loss: 0.7481, Train Accuracy: 0.7043, Val Loss: 0.7885, Val Accuracy: 0.6667\n", + "===== Epoch 1966/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8908. Train Loss: 0.7884, Train Accuracy: 0.6753, Val Loss: 0.7476, Val Accuracy: 0.7111\n", + "===== Epoch 1967/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8908. Train Loss: 0.7727, Train Accuracy: 0.6800, Val Loss: 0.7296, Val Accuracy: 0.7244\n", + "===== Epoch 1968/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8908. Train Loss: 0.7770, Train Accuracy: 0.6949, Val Loss: 0.7387, Val Accuracy: 0.7022\n", + "===== Epoch 1969/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8908. Train Loss: 0.7818, Train Accuracy: 0.6894, Val Loss: 0.7608, Val Accuracy: 0.7111\n", + "===== Epoch 1970/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8908. Train Loss: 0.7833, Train Accuracy: 0.6706, Val Loss: 0.7417, Val Accuracy: 0.7467\n", + "===== Epoch 1971/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8908. Train Loss: 0.7847, Train Accuracy: 0.6635, Val Loss: 0.7969, Val Accuracy: 0.6800\n", + "===== Epoch 1972/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8908. Train Loss: 0.7844, Train Accuracy: 0.6886, Val Loss: 0.7791, Val Accuracy: 0.6578\n", + "===== Epoch 1973/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8908. Train Loss: 0.7824, Train Accuracy: 0.6839, Val Loss: 0.7399, Val Accuracy: 0.7156\n", + "===== Epoch 1974/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8908. Train Loss: 0.7761, Train Accuracy: 0.6816, Val Loss: 0.7234, Val Accuracy: 0.7156\n", + "===== Epoch 1975/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8908. Train Loss: 0.7682, Train Accuracy: 0.6973, Val Loss: 0.7368, Val Accuracy: 0.6933\n", + "===== Epoch 1976/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8908. Train Loss: 0.7806, Train Accuracy: 0.6808, Val Loss: 0.7264, Val Accuracy: 0.7067\n", + "===== Epoch 1977/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8908. Train Loss: 0.7929, Train Accuracy: 0.6745, Val Loss: 0.7442, Val Accuracy: 0.7378\n", + "===== Epoch 1978/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8908. Train Loss: 0.7622, Train Accuracy: 0.7012, Val Loss: 0.7367, Val Accuracy: 0.7022\n", + "===== Epoch 1979/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8908. Train Loss: 0.7916, Train Accuracy: 0.6776, Val Loss: 0.7520, Val Accuracy: 0.6978\n", + "===== Epoch 1980/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8908. Train Loss: 0.7907, Train Accuracy: 0.6612, Val Loss: 0.7262, Val Accuracy: 0.7511\n", + "===== Epoch 1981/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8908. Train Loss: 0.7765, Train Accuracy: 0.6839, Val Loss: 0.7422, Val Accuracy: 0.6933\n", + "===== Epoch 1982/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8908. Train Loss: 0.7806, Train Accuracy: 0.6855, Val Loss: 0.7403, Val Accuracy: 0.6800\n", + "===== Epoch 1983/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8908. Train Loss: 0.7733, Train Accuracy: 0.6776, Val Loss: 0.7372, Val Accuracy: 0.7200\n", + "===== Epoch 1984/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8908. Train Loss: 0.7940, Train Accuracy: 0.6761, Val Loss: 0.7977, Val Accuracy: 0.6711\n", + "===== Epoch 1985/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8908. Train Loss: 0.7702, Train Accuracy: 0.6894, Val Loss: 0.7651, Val Accuracy: 0.6756\n", + "===== Epoch 1986/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8908. Train Loss: 0.7696, Train Accuracy: 0.6886, Val Loss: 0.7153, Val Accuracy: 0.7556\n", + "===== Epoch 1987/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8908. Train Loss: 0.7984, Train Accuracy: 0.6776, Val Loss: 0.7581, Val Accuracy: 0.7111\n", + "===== Epoch 1988/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8908. Train Loss: 0.8009, Train Accuracy: 0.6573, Val Loss: 0.7134, Val Accuracy: 0.7644\n", + "===== Epoch 1989/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8908. Train Loss: 0.7776, Train Accuracy: 0.6980, Val Loss: 0.7474, Val Accuracy: 0.6933\n", + "===== Epoch 1990/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8908. Train Loss: 0.7749, Train Accuracy: 0.6808, Val Loss: 0.7450, Val Accuracy: 0.6978\n", + "===== Epoch 1991/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8908. Train Loss: 0.7804, Train Accuracy: 0.6839, Val Loss: 0.7220, Val Accuracy: 0.6978\n", + "===== Epoch 1992/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8908. Train Loss: 0.7885, Train Accuracy: 0.6659, Val Loss: 0.7398, Val Accuracy: 0.7156\n", + "===== Epoch 1993/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8908. Train Loss: 0.7748, Train Accuracy: 0.6800, Val Loss: 0.7598, Val Accuracy: 0.6800\n", + "===== Epoch 1994/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8908. Train Loss: 0.7617, Train Accuracy: 0.6973, Val Loss: 0.7549, Val Accuracy: 0.7067\n", + "===== Epoch 1995/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8908. Train Loss: 0.7821, Train Accuracy: 0.6690, Val Loss: 0.7602, Val Accuracy: 0.6978\n", + "===== Epoch 1996/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8908. Train Loss: 0.7856, Train Accuracy: 0.6698, Val Loss: 0.7234, Val Accuracy: 0.7467\n", + "===== Epoch 1997/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8908. Train Loss: 0.7681, Train Accuracy: 0.6824, Val Loss: 0.8035, Val Accuracy: 0.6667\n", + "===== Epoch 1998/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8908. Train Loss: 0.7755, Train Accuracy: 0.6816, Val Loss: 0.7754, Val Accuracy: 0.6844\n", + "===== Epoch 1999/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8908. Train Loss: 0.7888, Train Accuracy: 0.6690, Val Loss: 0.7423, Val Accuracy: 0.7156\n", + "===== Epoch 2000/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8908. Train Loss: 0.7923, Train Accuracy: 0.6518, Val Loss: 0.7454, Val Accuracy: 0.7156\n", + "\n", + "Training Complete!\n", + "\n", + "ROC curve plot saved as roc_curve.png\n" + ] + }, + { + "data": { + "image/png": "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REREucTLly9RokQJk52vwCVZdnZ2AFQPpL29vcjREBERERGRWCIiIlCyZEl1jmAqBS7JSp4iaG9vzySLiIiIiIhMvoyIhS+IiIiIiIhMiEkWERERERGRCTHJIiIiIiIiMiEmWURERERERCbEJIuIiIiIiMiEmGQRERERERGZEJMsIiIiIiIiE2KSRUREREREZEJMsoiIiIiIiEyISRYREREREZEJMckiIiIiIiIyISZZREREREREJsQki4iIiIiIyISYZBEREREREZkQkywiIiIiIiITYpJFRERERERkQkyyiIiIiIiITIhJFhERERERkQkxySIiIiIiIjIhJllEREREREQmxCSLiIiIiIjIhJhkERERERERmZCoSdaff/6Jzp07o1ixYpBIJNi/f7/ePmfOnEGdOnVgYWGB8uXLY9OmTdkeJxERERERkaHMxLzz6Oho1KxZE0OGDEG3bt30Hv/06VN07NgRI0aMwPbt23Hy5El8/vnncHNzQ7t27XIgYiIiIspQhwDttq4VAd+aGfcLDAZm/qXdPrcp4Fk0477rbgD7H2i3H/HOuB8A+B4DXkRottUpCnzbNON+72KAAb9rtw+rCXSrmHHfo0+B5YHa7WvaAmUcMu777UXg3CvNtsJWwLZOGfcDgG77gdhEzba27sAEz4z73XkPfHlau31aA6BZyYz7br0N7Lij3b6nK2BjnnHfCaeAex802yoVBpa21GjavPk6duy4ldKgUALX3+JAnZKwlKUaT+hTBehfVaPvmDGH8eBBaEpDWByqvo3FksppnnOLWwBViqivRkTEw9s7zXP9eTgGWFigb7FU/4dW5sC+rhqHnT79FAsXntfse/MdfiznjE9sLVLampQApjfUOOyHHy7g+PEnKQ2xibB7EIY9tdP8P4zzBNq7azT17r0XoaGxKQ0h0Wgeo8S0ckU0+27pCDhbq68+eRKGkSPTPNcfhuHLwrZoW8Q2pa2UPbBO8/N4QMBtrF9/TbPvP8HYUbM4CstTpSE63iOmTj2Ba9eCUxoi4uH+Ohprq7ppni/Ne4RCocSnn+7QPOZVJHpIZBhW0kmz3ZD3iEwSNcnq0KEDOnToYPDxa9euhbu7OxYvXgwAqFy5Ms6dO4elS5cyySIiIsoNAkO02/QlSQAQEa+7b0S8/r6vInT3NcTtD8D9UM02W7n+folK3ff5v2j9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ZcuWidTUVPHHH38IIYQIDw8XQ4cOlepfuHBBmJqaiqlTp4r09HSxZs0aYWhoKGJjY/Xqt8ElWUIIsXr1amFvby/kcrno2LGj+Omnn6TXunXrJkJCQnTqb9++XTg7Owu5XC5efPFFsX///lqOmOorfcaag4ODAFDuERERUfuBU72j7+fa/ZhkkT70HWtHjx4VPj4+wsTERDg6Oor58+eL0tLSWo6a6iN9xlpJSYmYM2eOcHJyEgqFQtjZ2YmxY8eKmzdv1n7gVK8cOnSowu9fZeMrJCREdOvWrdwx7dq1E3K5XDg6Ooovv/xS734NhOAcKxERERERUU1pUNdkERERERER1TUmWURERERERDWISRYREREREVENYpJFRERERERUg5hkERERERER1SAmWURERERERDWISRYREREREVENYpJFRERERERUg5hkERFRtURFReG5556r6zCqzcDAALt3766yzjvvvIM+ffrUSjxERNRwMMkiInqGvfPOOzAwMCj3OHfuXF2HhqioKCkemUyGFi1aYPjw4bh27VqNtH/58mW8/vrrAIDs7GwYGBggLS1Np87KlSsRFRVVI/1VZs6cOdJ5Ghoaws7ODqNHj8bff/+tVztMCImInh5GdR0AERHVrYCAAHz55Zc6Zc2bN6+jaHSZm5sjIyMDWq0WJ0+exPDhw/HXX38hLi7usdu2trZ+aJ3GjRs/dj+P4sUXX0RCQgI0Gg3S09MxYsQI5OXlISYmplb6JyKimsWZLCKiZ5yJiQmsra11HoaGhli2bBnc3NxgZmYGOzs7jB07Fnfu3Km0nZMnT6J79+5QqVQwNzeHl5cXfvnlF+n1I0eOoGvXrlAqlbCzs8OECROQn59fZWwGBgawtraGWq3G66+/jgkTJiAhIQEFBQXQarX4+OOP0aJFC5iYmKBdu3aIjY2Vji0uLkZoaChsbGygUCjg4OCABQsW6LRdtlzw+eefBwC0b98eBgYGeOWVVwDozg6tX78earUaWq1WJ8agoCCMGDFCer5nzx54enpCoVDA0dERc+fORWlpaZXnaWRkBGtra9ja2sLPzw8DBgxAfHy89LpGo8HIkSPx/PPPQ6lUwsXFBStXrpRenzNnDr766ivs2bNHmhVLTEwEAFy8eBHBwcF47rnnYGFhgaCgIGRnZ1cZDxERPR4mWUREVCGZTIZVq1bh999/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"\"\"\n", + "Args:\n", + " image_size (int): Size of the input image (e.g., 224).\n", + " patch_size (int): Size of each patch (e.g., 16).\n", + " in_channels (int): Number of input channels (e.g., 1 for your task).\n", + " num_classes (int): Number of output classes (e.g., 3 for your task).\n", + " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", + " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", + " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", + " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", + " dropout (float): Dropout probability.\n", + "\"\"\"\n", + "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", + "batch_size = 32\n", + "learning_rate = 1e-4\n", + "weight_decay = 0.05\n", + "num_epochs = 2000\n", + "warmup_epochs = 10\n", + "model = SwinTransformerForClassification(\n", + " img_size=(150, 150),\n", + " patch_size=(10, 10),\n", + " in_chans=1,\n", + " num_classes=3, # Same number of classes as the ViT example\n", + " embed_dim=48,\n", + " depths=[2, 2, 2, 2],\n", + " num_heads=[3, 6, 12, 24],\n", + " window_size=(5, 5),\n", + " drop_path_rate=0.2,\n", + " )\n", + "\n", + "\n", + "criterion = nn.CrossEntropyLoss(label_smoothing=0.1)\n", + "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=0.05)\n", + "\n", + "\n", + "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", + "def warmup_lambda(current_epoch):\n", + " if current_epoch < warmup_epochs:\n", + " return float(current_epoch) / float(max(1, warmup_epochs))\n", + " return 1.0\n", + "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", + "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", + "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", + "\n", + "\n", + "print(\"Optimizer: Adam\")\n", + "print(f\"Learning Rate: {learning_rate}\")\n", + "\n", + "# Train Model\n", + "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_-lEQtu_txF" + }, + "source": [ + "\"\"\" ROC Curve Plotting Function\"\"\"\n", + "def plot_roc_curve(all_preds, all_labels):\n", + " print(\"Generating ROC Curve\")\n", + "\n", + " # Convert predictions and labels to numpy arrays\n", + " all_preds = np.array(all_preds)\n", + " all_labels = np.array(all_labels)\n", + "\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " n_classes = 3\n", + "\n", + " for i in range(n_classes):\n", + " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", + "\n", + " # Plot ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + " colors = ['blue', 'red', 'green']\n", + " class_names = ['Axion', 'CDM', 'No Substructure']\n", + "\n", + " for i, color in zip(range(n_classes), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color,\n", + " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_heal_swin.png')\n", + " plt.close()\n", + "\n", + " print(\"ROC Curve saved as roc_curve.png\")\n", + "\n", + "\n", + "plot_roc_curve(all_probs, all_labels)\n", + "\n", + "print(\"Training and Evaluation Complete!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MZ59pFZa_txG" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "machine_shape": "hm", + "provenance": [ + { + "file_id": "1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf", + "timestamp": 1756245539652 + }, + { + "file_id": "1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28", + "timestamp": 1756243482189 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin+pinn.ipynb b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin+pinn.ipynb index a443df8..17a5441 100644 --- a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin+pinn.ipynb +++ b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin+pinn.ipynb @@ -1 +1,1600 @@ -{"cells":[{"cell_type":"markdown","metadata":{"id":"X7Ekxmo1XV5I"},"source":[]},{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":37268,"status":"ok","timestamp":1758703101532,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"_mFRKD8F__hl","outputId":"975ec840-9641-4c82-8b36-6165eb48a3fb"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"code","execution_count":2,"metadata":{"executionInfo":{"elapsed":9777,"status":"ok","timestamp":1758703111314,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"vRM2kxST8KJZ"},"outputs":[],"source":["\n","\"\"\"Import dependencies\"\"\"\n","import os\n","import numpy as np\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import Dataset, DataLoader\n","from torchvision.models import resnet18\n","from sklearn.metrics import roc_curve, auc\n","import matplotlib.pyplot as plt"]},{"cell_type":"code","execution_count":3,"metadata":{"executionInfo":{"elapsed":51,"status":"ok","timestamp":1758703111368,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"9Dm6SC1o_txB"},"outputs":[],"source":["\n","class MyDatasetViT(Dataset):\n"," def __init__(self, data_dir, transform=None):\n"," self.data = []\n"," self.labels = []\n"," self.class_names = ['axion', 'cdm', 'no_sub']\n"," self.transform = transform\n","\n"," print(f\"Loading dataset from: {data_dir}\")\n"," print(f\"Looking for classes: {self.class_names}\")\n","\n"," for idx, class_name in enumerate(self.class_names):\n"," class_dir = os.path.join(data_dir, class_name)\n"," print(f\"--- Processing class: {class_name} ---\")\n","\n"," if not os.path.exists(class_dir):\n"," print(f\"[ERROR] Directory not found: {class_dir}\")\n"," continue\n","\n"," files = os.listdir(class_dir)\n","\n"," for file_name in files:\n"," if file_name.endswith('.npy'):\n"," file_path = os.path.join(class_dir, file_name)\n"," loaded_data = np.load(file_path, allow_pickle=True)\n","\n"," if class_name == 'axion':\n"," image = loaded_data[0]\n"," else:\n"," image = loaded_data\n","\n"," # [DEBUG] Print the shape of the raw numpy array\n"," print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n","\n"," # Ensure the image is a 2D array (H, W) before adding channel dimension.\n"," if image.ndim != 2:\n"," image = np.squeeze(image)\n","\n"," # Convert to a float tensor and add a channel dimension -> [1, H, W]\n"," image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n","\n"," # [DEBUG] Print the shape of the final tensor being stored in the dataset\n"," print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n","\n"," self.data.append(image_tensor)\n"," self.labels.append(idx)\n","\n"," print(\"\\n--- Dataset Loading Complete ---\")\n"," print(f\"Total images loaded: {len(self.data)}\")\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," \"\"\"\n"," This method is called by the DataLoader to get one item from the dataset.\n"," The debug prints here are CRITICAL for finding the error.\n"," \"\"\"\n"," #print(f\"--- Getting item index: {idx} ---\")\n","\n"," # Retrieve the pre-loaded tensor and its label\n"," image = self.data[idx]\n"," label = self.labels[idx]\n","\n"," # [DEBUG] Print shape BEFORE the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n","\n"," # Apply transformations (e.g., resizing) if they are provided\n"," if self.transform:\n"," image = self.transform(image)\n"," # [DEBUG] Print shape AFTER the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n"," else:\n"," #print(\" [DEBUG] No transform was applied.\")\n"," pass\n","\n"," return image, label"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":8,"status":"ok","timestamp":1758703111378,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"VJEgowwT_txC","outputId":"1e1ea89a-3c06-4103-8f99-9ee8e1d8eb61"},"outputs":[{"output_type":"stream","name":"stdout","text":["Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n"]}],"source":["\n","# Import the transforms module\n","from torchvision import transforms\n","# Hyperparameters\n","batch_size = 32\n","learning_rate = 0.001\n","num_epochs = 100\n","\n","# Data Directories\n","train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n","#val_dir = '../dataset/dataset/val'\n","\n","print(f\"Training Directory: {train_dir}\")\n","#print(f\"Validation Directory: {val_dir}\")\n","\n","vit_transforms = transforms.Compose([\n"," # transforms.ToTensor(), # Removed ToTensor()\n"," transforms.RandomHorizontalFlip(p=0.5),\n"," transforms.RandomVerticalFlip(p=0.5),\n"," transforms.RandomRotation(degrees=90), # Can be any angle range\n","])\n","\n","# Create Datasets and Dataloaders\n","#train_dataset = MyDataset(train_dir)\n","#val_dataset = MyDataset(val_dir)\n","#dataset = MyDatasetViT(train_dir, vit_transforms)\n","#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n","\n","#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n","#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n","\n","#print(f\"Batch Size: {batch_size}\")\n","#print(f\"Number of Training Batches: {len(train_loader)}\")\n","#print(f\"Number of Validation Batches: {len(val_loader)}\")\n","\n","#Save the dataloader so that we don't have to bear with this pain again\n","#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n","#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')"]},{"cell_type":"code","execution_count":5,"metadata":{"executionInfo":{"elapsed":39905,"status":"ok","timestamp":1758703151285,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"gvqsjdgzKmOL"},"outputs":[],"source":["#import data loaders from file\n","train_loader = torch.load('/content/drive/MyDrive/train_loader.pth', weights_only=False)\n","val_loader = torch.load('/content/drive/MyDrive/val_loader.pth', weights_only=False)"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3568,"status":"ok","timestamp":1758703154850,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"y6Q9I1Hw_txD","outputId":"dd980201-6599-4a8e-d9da-200bf20eaac3"},"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n"," warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n"]}],"source":["import torch\n","import torch.nn as nn\n","import torch.utils.checkpoint as checkpoint\n","from timm.models.layers import DropPath, trunc_normal_\n","from torch import Tensor\n","\n","# --- Helper Classes from Original Swin Transformer ---\n","\n","class Mlp(nn.Module):\n"," \"\"\" Multi-Layer Perceptron \"\"\"\n"," def __init__(\n"," self,\n"," in_features,\n"," hidden_features=None,\n"," out_features=None,\n"," act_layer=nn.GELU,\n"," drop=0.0,\n"," ):\n"," super().__init__()\n"," out_features = out_features or in_features\n"," hidden_features = hidden_features or in_features\n"," self.fc1 = nn.Linear(in_features, hidden_features)\n"," self.act = act_layer()\n"," self.fc2 = nn.Linear(hidden_features, out_features)\n"," self.drop = nn.Dropout(drop)\n","\n"," def forward(self, x):\n"," x = self.fc1(x)\n"," x = self.act(x)\n"," x = self.drop(x)\n"," x = self.fc2(x)\n"," x = self.drop(x)\n"," return x\n","\n","\n","def window_partition(x, window_size):\n"," \"\"\"\n"," Partitions the input tensor into non-overlapping windows.\n"," Args:\n"," x: (B, H, W, C)\n"," window_size (tuple[int]): Window size (height, width).\n","\n"," Returns:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," \"\"\"\n"," B, H, W, C = x.shape\n"," x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n"," windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n"," return windows\n","\n","\n","def window_reverse(windows, window_size, H, W):\n"," \"\"\"\n"," Reverses the window partitioning.\n"," Args:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," window_size (tuple[int]): Window size (height, width).\n"," H (int): Height of image.\n"," W (int): Width of image.\n","\n"," Returns:\n"," x: (B, H, W, C)\n"," \"\"\"\n"," B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n"," x = windows.view(\n"," B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n"," )\n"," x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n"," return x\n","\n","\n","class WindowAttention(nn.Module):\n"," r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n"," It supports both shifted and non-shifted windows.\n"," \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," window_size,\n"," num_heads,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," attn_drop=0.0,\n"," proj_drop=0.0,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.window_size = window_size\n"," self.num_heads = num_heads\n"," head_dim = dim // num_heads\n"," self.scale = qk_scale or head_dim**-0.5\n","\n"," self.relative_position_bias_table = nn.Parameter(\n"," torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n"," )\n","\n"," coords_h = torch.arange(self.window_size[0])\n"," coords_w = torch.arange(self.window_size[1])\n"," coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n"," coords_flatten = torch.flatten(coords, 1)\n"," relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n"," relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n"," relative_coords[:, :, 0] += self.window_size[0] - 1\n"," relative_coords[:, :, 1] += self.window_size[1] - 1\n"," relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n"," relative_position_index = relative_coords.sum(-1)\n"," self.register_buffer(\"relative_position_index\", relative_position_index)\n","\n"," self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n"," self.attn_drop = nn.Dropout(attn_drop)\n"," self.proj = nn.Linear(dim, dim)\n"," self.proj_drop = nn.Dropout(proj_drop)\n","\n"," trunc_normal_(self.relative_position_bias_table, std=0.02)\n"," self.softmax = nn.Softmax(dim=-1)\n","\n"," def forward(self, x, mask=None):\n"," B_, N, C = x.shape\n"," qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n"," q, k, v = qkv[0], qkv[1], qkv[2]\n","\n"," q = q * self.scale\n"," attn = q @ k.transpose(-2, -1)\n","\n"," relative_position_bias = self.relative_position_bias_table[\n"," self.relative_position_index.view(-1)\n"," ].view(\n"," self.window_size[0] * self.window_size[1],\n"," self.window_size[0] * self.window_size[1],\n"," -1,\n"," )\n"," relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n"," attn = attn + relative_position_bias.unsqueeze(0)\n","\n"," if mask is not None:\n"," nW = mask.shape[0]\n"," attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n"," attn = attn.view(-1, self.num_heads, N, N)\n"," attn = self.softmax(attn)\n"," else:\n"," attn = self.softmax(attn)\n","\n"," attn = self.attn_drop(attn)\n","\n"," x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n"," x = self.proj(x)\n"," x = self.proj_drop(x)\n"," return x\n","\n","\n","class SwinTransformerBlock(nn.Module):\n"," r\"\"\" Swin Transformer Block.\"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," num_heads,\n"," window_size=(5, 5),\n"," shift_size=(0, 0),\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," act_layer=nn.GELU,\n"," norm_layer=nn.LayerNorm,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.num_heads = num_heads\n"," self.window_size = window_size\n"," self.shift_size = shift_size\n"," self.mlp_ratio = mlp_ratio\n","\n"," if min(self.input_resolution) <= min(self.window_size):\n"," self.shift_size = (0, 0)\n"," self.window_size = self.input_resolution\n","\n"," assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n"," assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n","\n"," self.norm1 = norm_layer(dim)\n"," self.attn = WindowAttention(\n"," dim,\n"," window_size=self.window_size,\n"," num_heads=num_heads,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," attn_drop=attn_drop,\n"," proj_drop=drop,\n"," )\n","\n"," self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n"," self.norm2 = norm_layer(dim)\n"," mlp_hidden_dim = int(dim * mlp_ratio)\n"," self.mlp = Mlp(\n"," in_features=dim,\n"," hidden_features=mlp_hidden_dim,\n"," act_layer=act_layer,\n"," drop=drop,\n"," )\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," H, W = self.input_resolution\n"," img_mask = torch.zeros((1, H, W, 1))\n"," h_slices = (\n"," slice(0, -self.window_size[0]),\n"," slice(-self.window_size[0], -self.shift_size[0]),\n"," slice(-self.shift_size[0], None),\n"," )\n"," w_slices = (\n"," slice(0, -self.window_size[1]),\n"," slice(-self.window_size[1], -self.shift_size[1]),\n"," slice(-self.shift_size[1], None),\n"," )\n"," cnt = 0\n"," for h in h_slices:\n"," for w in w_slices:\n"," img_mask[:, h, w, :] = cnt\n"," cnt += 1\n","\n"," mask_windows = window_partition(img_mask, self.window_size)\n"," mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n"," attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n"," attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n"," attn_mask == 0, float(0.0)\n"," )\n"," else:\n"," attn_mask = None\n","\n"," self.register_buffer(\"attn_mask\", attn_mask)\n","\n"," def forward(self, x):\n"," H, W = self.input_resolution\n"," B, L, C = x.shape\n"," assert L == H * W, \"input feature has wrong size\"\n","\n"," shortcut = x\n"," x = self.norm1(x)\n"," x = x.view(B, H, W, C)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n"," else:\n"," shifted_x = x\n","\n"," x_windows = window_partition(shifted_x, self.window_size)\n"," x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n","\n"," attn_windows = self.attn(x_windows, mask=self.attn_mask)\n","\n"," attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n"," shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n"," else:\n"," x = shifted_x\n"," x = x.view(B, H * W, C)\n","\n"," x = shortcut + self.drop_path(x)\n"," x = x + self.drop_path(self.mlp(self.norm2(x)))\n","\n"," return x\n","\n","\n","class BasicLayer(nn.Module):\n"," \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," depth,\n"," num_heads,\n"," window_size,\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," norm_layer=nn.LayerNorm,\n"," downsample=None,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.depth = depth\n","\n"," self.blocks = nn.ModuleList(\n"," [\n"," SwinTransformerBlock(\n"," dim=dim,\n"," input_resolution=input_resolution,\n"," num_heads=num_heads,\n"," window_size=window_size,\n"," shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n"," mlp_ratio=mlp_ratio,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," drop=drop,\n"," attn_drop=attn_drop,\n"," drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n"," norm_layer=norm_layer,\n"," )\n"," for i in range(depth)\n"," ]\n"," )\n","\n"," if downsample is not None:\n"," self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n"," else:\n"," self.downsample = None\n","\n"," def forward(self, x):\n"," for blk in self.blocks:\n"," x = blk(x)\n"," if self.downsample is not None:\n"," x = self.downsample(x)\n"," return x\n","\n","\n","class PatchEmbed(nn.Module):\n"," r\"\"\" Image to Patch Embedding \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n"," super().__init__()\n"," self.img_size = img_size\n"," self.patch_size = patch_size\n"," self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n"," self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n"," self.in_chans = in_chans\n"," self.embed_dim = embed_dim\n","\n"," self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n"," if norm_layer is not None:\n"," self.norm = norm_layer(embed_dim)\n"," else:\n"," self.norm = None\n","\n"," def forward(self, x):\n"," B, C, H, W = x.shape\n"," assert H == self.img_size[0] and W == self.img_size[1], \\\n"," f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n"," x = self.proj(x).flatten(2).transpose(1, 2)\n"," if self.norm is not None:\n"," x = self.norm(x)\n"," return x\n","\n","\n","class TransformerLSABlock(nn.Module):\n"," \"\"\"\n"," A standard Transformer block with Multi-Head Self-Attention and a Feed-Forward Network.\n"," This is a placeholder for the block used in the RelativisticPhysicalInformedEncoder.\n"," \"\"\"\n"," def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n"," super().__init__()\n"," self.norm1 = nn.LayerNorm(embed_dim)\n"," self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n"," self.norm2 = nn.LayerNorm(embed_dim)\n"," self.mlp = nn.Sequential(\n"," nn.Linear(embed_dim, num_hidden_neurons),\n"," activation_function,\n"," nn.Dropout(dropout),\n"," nn.Linear(num_hidden_neurons, embed_dim),\n"," nn.Dropout(dropout)\n"," )\n"," self.dropout = nn.Dropout(dropout)\n","\n"," def forward(self, x):\n"," # Attention part\n"," shortcut = x\n"," x = self.norm1(x)\n"," x, _ = self.attn(x, x, x)\n"," x = self.dropout(x)\n"," x = x + shortcut\n","\n"," # MLP part\n"," shortcut = x\n"," x = self.norm2(x)\n"," x = self.mlp(x)\n"," x = x + shortcut\n"," return x\n","\n","\n","class RelativisticPhysicalInformedEncoder(nn.Module):\n"," \"\"\"\n"," A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n"," \"\"\"\n"," def __init__( self,\n"," image_size: int,\n"," patch_size: int,\n"," embed_dim: int,\n"," num_patches: int,\n"," num_heads: int,\n"," num_hidden_neurons: int,\n"," transformer_activation_function: nn.Module,\n"," num_transformer_blocks: int,\n"," dropout: float = 0.1,\n"," pixel_scale:float =0.101,\n"," k_min: float = 0.8,\n"," k_max: float = 1.2,\n"," eps: float = 1e-8\n"," ):\n"," super(RelativisticPhysicalInformedEncoder, self).__init__()\n"," self.pixel_scale = pixel_scale\n"," self.profile_size = image_size\n"," self.half_profile_size = self.profile_size // 2\n"," self.num_patches = num_patches\n"," self.embed_dim = embed_dim\n"," self.num_heads = num_heads\n"," self.num_hidden_neurons = num_hidden_neurons\n"," self.transformer_activation_function = transformer_activation_function\n"," self.num_transformer_blocks = num_transformer_blocks\n"," self.k_min = k_min\n"," self.k_max = k_max\n"," self.eps = eps\n","\n"," self.transformer = nn.ModuleList()\n"," self.num_neurons_flatten = (self.num_patches) * embed_dim # Removed +1 for CLS token as it's not used\n","\n"," for _ in range(num_transformer_blocks):\n"," self.transformer.append(\n"," TransformerLSABlock(embed_dim,\n"," num_heads,\n"," self.num_patches,\n"," num_hidden_neurons,\n"," transformer_activation_function,\n"," None, # Device is handled in forward pass\n"," dropout)\n"," )\n","\n"," self.compressor = nn.Sequential(\n"," nn.Flatten(),\n"," nn.Linear(self.num_neurons_flatten, self.profile_size * self.profile_size),\n"," nn.Sigmoid()\n"," )\n","\n"," # Create coordinate grids, but don't move to device yet\n"," x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n"," y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n"," grid_x, grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n"," self.register_buffer('grid_x', grid_x)\n"," self.register_buffer('grid_y', grid_y)\n","\n","\n"," def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n"," \"\"\"\n"," Forward pass through the module.\n"," \"\"\"\n"," # Ensure input_images is 2D (B, H*W) if it's not already\n"," if input_images.dim() == 3:\n"," input_images = input_images.squeeze(1)\n","\n"," batch_size = input_images.shape[0]\n"," device = input_images.device\n","\n"," # Move grid tensors to the correct device\n"," flat_grid_x = self.grid_x.flatten().to(device)\n"," flat_grid_y = self.grid_y.flatten().to(device)\n","\n"," # Pass patches through transformer blocks\n"," k_transformed = patches\n"," for layer in self.transformer:\n"," k_transformed = layer(k_transformed)\n","\n"," # Generate k using the compressor\n"," k_sigmoid = self.compressor(k_transformed)\n","\n"," k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n"," k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size * self.profile_size)\n"," k_sigmoid_flat = self.k_min + (self.k_max - self.k_min) * k_sigmoid_flat\n","\n"," flat_input_images = input_images.view(batch_size, -1)\n"," non_zero_mask = (flat_grid_x != 0) | (flat_grid_y != 0)\n"," k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n","\n"," shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n"," k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n","\n"," non_zero_x = flat_grid_x[non_zero_mask]\n"," non_zero_y = flat_grid_y[non_zero_mask]\n"," non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n"," non_zero_radius = non_zero_radius[None, None, None, :]\n","\n"," shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps))\n"," shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps))\n","\n"," shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n"," shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n","\n"," # Clamp indices to be within the valid range [0, profile_size-1]\n"," shifted_x_idx.clamp_(0, self.profile_size - 1)\n"," shifted_y_idx.clamp_(0, self.profile_size - 1)\n","\n"," output_images = torch.zeros(batch_size, self.profile_size, self.profile_size, device=device)\n"," flat_output_images = output_images.view(batch_size, -1)\n","\n"," one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n"," one_d_indices = one_d_indices.view(batch_size, -1)\n","\n"," input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n","\n"," # Use scatter_add_ for safe parallel updates\n"," # To handle multiple source pixels mapping to the same target pixel, we average them.\n"," # We need a count tensor for averaging.\n"," counts = torch.zeros_like(flat_output_images)\n"," ones = torch.ones_like(input_values_at_original_positions)\n","\n"," flat_output_images.scatter_add_(1, one_d_indices, input_values_at_original_positions)\n"," counts.scatter_add_(1, one_d_indices, ones)\n","\n"," # Avoid division by zero\n"," flat_output_images = torch.where(counts > 0, flat_output_images / counts, 0)\n","\n"," output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n","\n"," max_values = torch.amax(output_images, dim=(1, 2), keepdim=True)\n"," output_images = output_images / (max_values + self.eps)\n","\n"," return output_images\n","\n","\n","class SwinTransformerForClassification(nn.Module):\n"," \"\"\"\n"," Swin Transformer with an optional Relativistic Physics Informed Encoder.\n"," \"\"\"\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n"," embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n"," window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n"," drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n"," norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n"," use_relativistic_encoder=False, relativistic_encoder_blocks=2, **kwargs):\n"," super().__init__()\n","\n"," self.num_classes = num_classes\n"," self.num_layers = len(depths)\n"," self.embed_dim = embed_dim\n"," self.ape = ape\n"," self.patch_norm = patch_norm\n"," self.num_features = int(embed_dim)\n"," self.mlp_ratio = mlp_ratio\n"," self.use_relativistic_encoder = use_relativistic_encoder\n","\n"," self.patch_embed = PatchEmbed(\n"," img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n"," norm_layer=norm_layer if self.patch_norm else None)\n"," num_patches = self.patch_embed.num_patches\n"," patches_resolution = self.patch_embed.patches_resolution\n"," self.patches_resolution = patches_resolution\n","\n"," if self.use_relativistic_encoder:\n"," self.relativistic_encoder = RelativisticPhysicalInformedEncoder(\n"," image_size=img_size[0],\n"," patch_size=patch_size[0],\n"," embed_dim=embed_dim,\n"," num_patches=num_patches,\n"," num_heads=num_heads[0], # Use heads from the first Swin stage\n"," num_hidden_neurons=int(embed_dim * mlp_ratio),\n"," transformer_activation_function=nn.GELU(),\n"," num_transformer_blocks=relativistic_encoder_blocks,\n"," dropout=drop_rate\n"," )\n","\n"," if self.ape:\n"," self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n"," trunc_normal_(self.absolute_pos_embed, std=.02)\n","\n"," self.pos_drop = nn.Dropout(p=drop_rate)\n"," dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n","\n"," self.layers = nn.ModuleList()\n"," layer = BasicLayer(dim=int(embed_dim),\n"," input_resolution=patches_resolution,\n"," depth=sum(depths),\n"," num_heads=num_heads[0],\n"," window_size=window_size,\n"," mlp_ratio=self.mlp_ratio,\n"," qkv_bias=qkv_bias, qk_scale=qk_scale,\n"," drop=drop_rate, attn_drop=attn_drop_rate,\n"," drop_path=dpr,\n"," norm_layer=norm_layer,\n"," downsample=None)\n"," self.layers.append(layer)\n","\n"," self.norm = norm_layer(self.num_features)\n"," self.avgpool = nn.AdaptiveAvgPool1d(1)\n"," self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n","\n"," self.apply(self._init_weights)\n","\n"," def _init_weights(self, m):\n"," if isinstance(m, nn.Linear):\n"," trunc_normal_(m.weight, std=.02)\n"," if isinstance(m, nn.Linear) and m.bias is not None:\n"," nn.init.constant_(m.bias, 0)\n"," elif isinstance(m, nn.LayerNorm):\n"," nn.init.constant_(m.bias, 0)\n"," nn.init.constant_(m.weight, 1.0)\n","\n"," @torch.jit.ignore\n"," def no_weight_decay(self):\n"," return {'absolute_pos_embed'}\n","\n"," @torch.jit.ignore\n"," def no_weight_decay_keywords(self):\n"," return {'relative_position_bias_table'}\n","\n"," def forward_features(self, x):\n"," x = self.patch_embed(x)\n"," if self.ape:\n"," x = x + self.absolute_pos_embed\n"," x = self.pos_drop(x)\n","\n"," for layer in self.layers:\n"," x = layer(x)\n","\n"," x = self.norm(x)\n"," x = self.avgpool(x.transpose(1, 2))\n"," x = torch.flatten(x, 1)\n"," return x\n","\n"," def forward(self, x):\n"," if self.use_relativistic_encoder:\n"," # The input 'x' is expected to be (B, C, H, W)\n"," # The relativistic encoder needs the initial patches for its internal transformer\n"," initial_patches = self.patch_embed(x)\n"," # The encoder also needs the 2D image (B, H, W)\n"," x_encoded = self.relativistic_encoder(x.squeeze(1), initial_patches)\n"," # Reshape the output to (B, 1, H, W) to proceed with feature extraction\n"," x = x_encoded.unsqueeze(1)\n","\n"," # The rest of the forward pass proceeds from here\n"," x = self.forward_features(x)\n"," x = self.head(x)\n"," return x\n"]},{"cell_type":"code","execution_count":7,"metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1758703154860,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"hivvAHcI41JJ"},"outputs":[],"source":["\n","\n","#!pip install torch_xla[tpu]"]},{"cell_type":"code","execution_count":8,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1758703154874,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"GtiRNfT34-6a"},"outputs":[],"source":["#import torch_xla"]},{"cell_type":"code","execution_count":9,"metadata":{"executionInfo":{"elapsed":55,"status":"ok","timestamp":1758703154943,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"Q3rnNlt1_txE"},"outputs":[],"source":["import torch\n","import numpy as np\n","from sklearn.metrics import roc_auc_score, roc_curve, auc\n","from sklearn.preprocessing import label_binarize\n","import copy\n","import matplotlib.pyplot as plt\n","from itertools import cycle\n","\n","def plot_roc_curve(all_labels, all_probs, class_names):\n"," \"\"\"\n"," Plots the ROC curve for each class and the micro/macro averages.\n"," \"\"\"\n"," # Binarize the labels for multi-class ROC analysis\n"," all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n"," all_probs = np.array(all_probs)\n","\n"," # Compute ROC curve and ROC area for each class\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," for i in range(len(class_names)):\n"," fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," # Compute micro-average ROC curve and ROC area\n"," fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n"," roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n","\n"," # Compute macro-average ROC curve and ROC area\n"," # First aggregate all false positive rates\n"," all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n"," # Then interpolate all ROC curves at these points\n"," mean_tpr = np.zeros_like(all_fpr)\n"," for i in range(len(class_names)):\n"," mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n"," # Finally average it and compute AUC\n"," mean_tpr /= len(class_names)\n"," fpr[\"macro\"] = all_fpr\n"," tpr[\"macro\"] = mean_tpr\n"," roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n","\n"," # Plot all ROC curves\n"," plt.figure(figsize=(10, 8))\n","\n"," plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n"," label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n"," color='deeppink', linestyle=':', linewidth=4)\n","\n"," plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n"," label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n"," color='navy', linestyle=':', linewidth=4)\n","\n"," colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n"," for i, color in zip(range(len(class_names)), colors):\n"," plt.plot(fpr[i], tpr[i], color=color, lw=2,\n"," label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--', lw=2)\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_swin_pinn.png\")\n"," print(\"\\nROC curve plot saved as roc_curve.png\")\n","\n","\"\"\"Training and Evaluation with Early Stopping\"\"\"\n","def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n"," \"\"\"\n"," Trains the model with early stopping based on validation ROC AUC score.\n","\n"," Args:\n"," model (torch.nn.Module): The neural network model to train.\n"," train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n"," val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n"," criterion: The loss function.\n"," optimizer: The optimization algorithm.\n"," scheduler: The learning rate scheduler.\n"," num_epochs (int): The maximum number of epochs to train for.\n"," patience (int): Number of epochs to wait for improvement before stopping.\n"," \"\"\"\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Training on device: {device}\")\n","\n"," model.to(device)\n","\n"," best_roc_auc = 0.0\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = []\n"," best_labels = []\n","\n"," class_names = ['axion', 'cdm', 'no_sub']\n","\n"," for epoch in range(num_epochs):\n"," print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n","\n"," # --- Training Phase ---\n"," model.train()\n"," train_loss = 0.0\n"," train_correct = 0\n","\n"," for images, labels in train_loader:\n"," images, labels = images.to(device), labels.to(device)\n","\n"," optimizer.zero_grad()\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," scheduler.step()\n","\n"," train_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," train_correct += (predicted == labels).sum().item()\n","\n"," # --- Validation Phase ---\n"," model.eval()\n"," val_loss = 0.0\n"," val_correct = 0\n"," all_probs = []\n"," all_labels = []\n","\n"," with torch.no_grad():\n"," for images, labels in val_loader:\n"," images, labels = images.to(device), labels.to(device)\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n","\n"," val_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," val_correct += (predicted == labels).sum().item()\n","\n"," probs = torch.softmax(outputs, dim=1)\n"," all_probs.extend(probs.cpu().numpy())\n"," all_labels.extend(labels.cpu().numpy())\n","\n"," # --- Calculate Metrics ---\n"," train_loss = train_loss / len(train_loader.dataset)\n"," val_loss = val_loss / len(val_loader.dataset)\n"," train_accuracy = train_correct / len(train_loader.dataset)\n"," val_accuracy = val_correct / len(val_loader.dataset)\n","\n"," # Calculate multi-class ROC AUC score\n"," all_labels_np = np.array(all_labels)\n"," all_probs_np = np.array(all_probs)\n"," try:\n"," val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n"," except ValueError as e:\n"," print(f\"Could not calculate ROC AUC: {e}\")\n"," val_roc_auc = 0.0\n","\n"," # Epoch-level summary\n"," #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n"," #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n"," #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n","\n"," if val_roc_auc > best_roc_auc:\n"," best_roc_auc = val_roc_auc\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = all_probs\n"," best_labels = all_labels\n"," #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n"," print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n"," else:\n"," epochs_no_improve += 1\n"," print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n","\n"," if epochs_no_improve >= patience:\n"," print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n"," model.load_state_dict(best_model_wts)\n"," break\n","\n"," print(\"\\nTraining Complete!\")\n"," model.load_state_dict(best_model_wts)\n","\n"," # After the training loop, plot the ROC curve for the best model\n"," if best_probs and best_labels:\n"," plot_roc_curve(best_labels, best_probs, class_names)\n","\n"," return model, best_probs, best_labels"]},{"cell_type":"code","execution_count":10,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1758703154958,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"9QBIRCLEkikD"},"outputs":[],"source":["#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-ZJepKUw_txF","outputId":"76291ff9-d31b-40d3-e3a5-01f0e8302d38"},"outputs":[{"metadata":{"tags":null},"name":"stdout","output_type":"stream","text":["Optimizer: Adam\n","Learning Rate: 0.0001\n","Training on device: cuda\n","===== Epoch 1/2000 =====\n"]},{"metadata":{"tags":null},"name":"stderr","output_type":"stream","text":["/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n"," warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["New best model saved with Val ROC AUC: 0.5015, Train Loss: 0.9679, Train Accuracy: 0.5034, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 2/2000 =====\n","New best model saved with Val ROC AUC: 0.5015, Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 3/2000 =====\n","New best model saved with Val ROC AUC: 0.5084, Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n","===== Epoch 4/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5084. Train Loss: 0.9652, Train Accuracy: 0.5069, Val Loss: 0.9625, Val Accuracy: 0.5186\n","===== Epoch 5/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5084. Train Loss: 0.9647, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 6/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 7/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9647, Val Accuracy: 0.5186\n","===== Epoch 8/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5084. Train Loss: 0.9647, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n","===== Epoch 9/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 10/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n","===== Epoch 11/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5084. Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9622, Val Accuracy: 0.5186\n","===== Epoch 12/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 13/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 14/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 15/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 16/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 17/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 18/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 19/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5084. Train Loss: 0.9646, Train Accuracy: 0.5069, Val Loss: 0.9610, Val Accuracy: 0.5186\n","===== Epoch 20/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 21/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 22/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 23/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5084. Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 24/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 25/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 26/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9633, Val Accuracy: 0.5186\n","===== Epoch 27/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n","===== Epoch 28/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n","===== Epoch 29/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 30/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 31/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 32/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 33/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 34/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 35/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 36/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 37/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 38/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 39/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 40/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 41/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n","===== Epoch 42/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 43/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 44/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n","===== Epoch 45/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n","===== Epoch 46/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 47/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 48/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9622, Val Accuracy: 0.5186\n","===== Epoch 49/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 50/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 51/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 52/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 53/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 54/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 55/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9633, Val Accuracy: 0.5186\n","===== Epoch 56/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 57/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 58/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 59/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 60/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 61/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 62/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9627, Val Accuracy: 0.5186\n","===== Epoch 63/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9627, Val Accuracy: 0.5186\n","===== Epoch 64/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n","===== Epoch 65/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 66/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 67/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 68/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 69/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 70/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 71/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n","===== Epoch 72/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5084. Train Loss: 0.9638, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 73/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 74/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 75/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n","===== Epoch 76/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 77/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 78/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 79/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 80/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5084. Train Loss: 0.9638, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 81/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 82/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n","===== Epoch 83/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 84/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 85/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 86/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 87/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 88/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 89/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 90/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 91/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n","===== Epoch 92/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n","===== Epoch 93/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 94/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 95/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 96/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n","===== Epoch 97/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 98/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n","===== Epoch 99/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n","===== Epoch 100/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n","===== Epoch 101/2000 =====\n"]}],"source":["\"\"\"\n","Args:\n"," image_size (int): Size of the input image (e.g., 224).\n"," patch_size (int): Size of each patch (e.g., 16).\n"," in_channels (int): Number of input channels (e.g., 1 for your task).\n"," num_classes (int): Number of output classes (e.g., 3 for your task).\n"," embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n"," depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n"," num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n"," mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n"," dropout (float): Dropout probability.\n","\"\"\"\n","from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n","batch_size = 32\n","learning_rate = 1e-4\n","weight_decay = 0.05\n","num_epochs = 2000\n","warmup_epochs = 10\n","model = SwinTransformerForClassification(\n"," img_size=(64, 64),\n"," patch_size=(10, 10),\n"," in_chans=1,\n"," num_classes=3,\n"," embed_dim=96,\n"," depths=[2, 2, 2],\n"," num_heads=[3, 6, 12],\n"," window_size=(3, 3), # Changed window size to 3x3\n"," use_relativistic_encoder=True, # <-- Set to True\n"," relativistic_encoder_blocks=2 # <-- Hyperparameter for the new encoder\n"," )\n","\n","\n","criterion = nn.CrossEntropyLoss()\n","optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n","\n","\n","#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n","def warmup_lambda(current_epoch):\n"," if current_epoch < warmup_epochs:\n"," return float(current_epoch) / float(max(1, warmup_epochs))\n"," return 1.0\n","warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n","main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n","scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n","\n","\n","print(\"Optimizer: Adam\")\n","print(f\"Learning Rate: {learning_rate}\")\n","\n","# Train Model\n","model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)"]},{"cell_type":"markdown","metadata":{"id":"G_-lEQtu_txF"},"source":["\"\"\" ROC Curve Plotting Function\"\"\"\n","def plot_roc_curve(all_preds, all_labels):\n"," print(\"Generating ROC Curve\")\n","\n"," # Convert predictions and labels to numpy arrays\n"," all_preds = np.array(all_preds)\n"," all_labels = np.array(all_labels)\n","\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," n_classes = 3\n","\n"," for i in range(n_classes):\n"," fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n","\n"," # Plot ROC curves\n"," plt.figure(figsize=(10, 8))\n"," colors = ['blue', 'red', 'green']\n"," class_names = ['Axion', 'CDM', 'No Substructure']\n","\n"," for i, color in zip(range(n_classes), colors):\n"," plt.plot(fpr[i], tpr[i], color=color,\n"," label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_swin_pinn.png')\n"," plt.close()\n","\n"," print(\"ROC Curve saved as roc_curve.png\")\n","\n","\n","plot_roc_curve(all_probs, all_labels)\n","\n","print(\"Training and Evaluation Complete!\")"]},{"cell_type":"code","execution_count":null,"metadata":{"executionInfo":{"elapsed":91655,"status":"aborted","timestamp":1758703155727,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"},"user_tz":300},"id":"MZ59pFZa_txG"},"outputs":[],"source":[]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"A100","machine_shape":"hm","provenance":[{"file_id":"1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28","timestamp":1756243482189}]},"kernelspec":{"display_name":"Python 3","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.11.2"}},"nbformat":4,"nbformat_minor":0} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "X7Ekxmo1XV5I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 37268, + "status": "ok", + "timestamp": 1758703101532, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "_mFRKD8F__hl", + "outputId": "975ec840-9641-4c82-8b36-6165eb48a3fb" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mounted at /content/drive\n" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "executionInfo": { + "elapsed": 9777, + "status": "ok", + "timestamp": 1758703111314, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "vRM2kxST8KJZ" + }, + "outputs": [], + "source": [ + "\n", + "\"\"\"Import dependencies\"\"\"\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import Dataset, DataLoader\n", + "from torchvision.models import resnet18\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "executionInfo": { + "elapsed": 51, + "status": "ok", + "timestamp": 1758703111368, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "9Dm6SC1o_txB" + }, + "outputs": [], + "source": [ + "\n", + "class MyDatasetViT(Dataset):\n", + " def __init__(self, data_dir, transform=None):\n", + " self.data = []\n", + " self.labels = []\n", + " self.class_names = ['axion', 'cdm', 'no_sub']\n", + " self.transform = transform\n", + "\n", + " print(f\"Loading dataset from: {data_dir}\")\n", + " print(f\"Looking for classes: {self.class_names}\")\n", + "\n", + " for idx, class_name in enumerate(self.class_names):\n", + " class_dir = os.path.join(data_dir, class_name)\n", + " print(f\"--- Processing class: {class_name} ---\")\n", + "\n", + " if not os.path.exists(class_dir):\n", + " print(f\"[ERROR] Directory not found: {class_dir}\")\n", + " continue\n", + "\n", + " files = os.listdir(class_dir)\n", + "\n", + " for file_name in files:\n", + " if file_name.endswith('.npy'):\n", + " file_path = os.path.join(class_dir, file_name)\n", + " loaded_data = np.load(file_path, allow_pickle=True)\n", + "\n", + " if class_name == 'axion':\n", + " image = loaded_data[0]\n", + " else:\n", + " image = loaded_data\n", + "\n", + " # [DEBUG] Print the shape of the raw numpy array\n", + " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", + "\n", + " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", + " if image.ndim != 2:\n", + " image = np.squeeze(image)\n", + "\n", + " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", + " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", + "\n", + " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", + " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", + "\n", + " self.data.append(image_tensor)\n", + " self.labels.append(idx)\n", + "\n", + " print(\"\\n--- Dataset Loading Complete ---\")\n", + " print(f\"Total images loaded: {len(self.data)}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " \"\"\"\n", + " This method is called by the DataLoader to get one item from the dataset.\n", + " The debug prints here are CRITICAL for finding the error.\n", + " \"\"\"\n", + " #print(f\"--- Getting item index: {idx} ---\")\n", + "\n", + " # Retrieve the pre-loaded tensor and its label\n", + " image = self.data[idx]\n", + " label = self.labels[idx]\n", + "\n", + " # [DEBUG] Print shape BEFORE the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", + "\n", + " # Apply transformations (e.g., resizing) if they are provided\n", + " if self.transform:\n", + " image = self.transform(image)\n", + " # [DEBUG] Print shape AFTER the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", + " else:\n", + " #print(\" [DEBUG] No transform was applied.\")\n", + " pass\n", + "\n", + " return image, label" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 8, + "status": "ok", + "timestamp": 1758703111378, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "VJEgowwT_txC", + "outputId": "1e1ea89a-3c06-4103-8f99-9ee8e1d8eb61" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n" + ] + } + ], + "source": [ + "\n", + "# Import the transforms module\n", + "from torchvision import transforms\n", + "# Hyperparameters\n", + "batch_size = 32\n", + "learning_rate = 0.001\n", + "num_epochs = 100\n", + "\n", + "# Data Directories\n", + "train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n", + "#val_dir = '../dataset/dataset/val'\n", + "\n", + "print(f\"Training Directory: {train_dir}\")\n", + "#print(f\"Validation Directory: {val_dir}\")\n", + "\n", + "vit_transforms = transforms.Compose([\n", + " # transforms.ToTensor(), # Removed ToTensor()\n", + " transforms.RandomHorizontalFlip(p=0.5),\n", + " transforms.RandomVerticalFlip(p=0.5),\n", + " transforms.RandomRotation(degrees=90), # Can be any angle range\n", + "])\n", + "\n", + "# Create Datasets and Dataloaders\n", + "#train_dataset = MyDataset(train_dir)\n", + "#val_dataset = MyDataset(val_dir)\n", + "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", + "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", + "\n", + "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", + "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", + "\n", + "#print(f\"Batch Size: {batch_size}\")\n", + "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", + "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", + "\n", + "#Save the dataloader so that we don't have to bear with this pain again\n", + "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", + "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "executionInfo": { + "elapsed": 39905, + "status": "ok", + "timestamp": 1758703151285, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "gvqsjdgzKmOL" + }, + "outputs": [], + "source": [ + "#import data loaders from file\n", + "train_loader = torch.load('/content/drive/MyDrive/train_loader.pth', weights_only=False)\n", + "val_loader = torch.load('/content/drive/MyDrive/val_loader.pth', weights_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 3568, + "status": "ok", + "timestamp": 1758703154850, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "y6Q9I1Hw_txD", + "outputId": "dd980201-6599-4a8e-d9da-200bf20eaac3" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n", + " warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n" + ] + } + ], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.utils.checkpoint as checkpoint\n", + "from timm.layers import DropPath, trunc_normal_\n", + "from torch import Tensor\n", + "\n", + "# --- Helper Classes from Original Swin Transformer ---\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\" Multi-Layer Perceptron \"\"\"\n", + " def __init__(\n", + " self,\n", + " in_features,\n", + " hidden_features=None,\n", + " out_features=None,\n", + " act_layer=nn.GELU,\n", + " drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " out_features = out_features or in_features\n", + " hidden_features = hidden_features or in_features\n", + " self.fc1 = nn.Linear(in_features, hidden_features)\n", + " self.act = act_layer()\n", + " self.fc2 = nn.Linear(hidden_features, out_features)\n", + " self.drop = nn.Dropout(drop)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.act(x)\n", + " x = self.drop(x)\n", + " x = self.fc2(x)\n", + " x = self.drop(x)\n", + " return x\n", + "\n", + "\n", + "def window_partition(x, window_size):\n", + " \"\"\"\n", + " Partitions the input tensor into non-overlapping windows.\n", + " Args:\n", + " x: (B, H, W, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + "\n", + " Returns:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " \"\"\"\n", + " B, H, W, C = x.shape\n", + " x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n", + " windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n", + " return windows\n", + "\n", + "\n", + "def window_reverse(windows, window_size, H, W):\n", + " \"\"\"\n", + " Reverses the window partitioning.\n", + " Args:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + " H (int): Height of image.\n", + " W (int): Width of image.\n", + "\n", + " Returns:\n", + " x: (B, H, W, C)\n", + " \"\"\"\n", + " B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n", + " x = windows.view(\n", + " B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n", + " )\n", + " x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n", + " return x\n", + "\n", + "\n", + "class WindowAttention(nn.Module):\n", + " r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n", + " It supports both shifted and non-shifted windows.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " window_size,\n", + " num_heads,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " attn_drop=0.0,\n", + " proj_drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.window_size = window_size\n", + " self.num_heads = num_heads\n", + " head_dim = dim // num_heads\n", + " self.scale = qk_scale or head_dim**-0.5\n", + "\n", + " self.relative_position_bias_table = nn.Parameter(\n", + " torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n", + " )\n", + "\n", + " coords_h = torch.arange(self.window_size[0])\n", + " coords_w = torch.arange(self.window_size[1])\n", + " coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n", + " coords_flatten = torch.flatten(coords, 1)\n", + " relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n", + " relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n", + " relative_coords[:, :, 0] += self.window_size[0] - 1\n", + " relative_coords[:, :, 1] += self.window_size[1] - 1\n", + " relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n", + " relative_position_index = relative_coords.sum(-1)\n", + " self.register_buffer(\"relative_position_index\", relative_position_index)\n", + "\n", + " self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n", + " self.attn_drop = nn.Dropout(attn_drop)\n", + " self.proj = nn.Linear(dim, dim)\n", + " self.proj_drop = nn.Dropout(proj_drop)\n", + "\n", + " trunc_normal_(self.relative_position_bias_table, std=0.02)\n", + " self.softmax = nn.Softmax(dim=-1)\n", + "\n", + " def forward(self, x, mask=None):\n", + " B_, N, C = x.shape\n", + " qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n", + " q, k, v = qkv[0], qkv[1], qkv[2]\n", + "\n", + " q = q * self.scale\n", + " attn = q @ k.transpose(-2, -1)\n", + "\n", + " relative_position_bias = self.relative_position_bias_table[\n", + " self.relative_position_index.view(-1)\n", + " ].view(\n", + " self.window_size[0] * self.window_size[1],\n", + " self.window_size[0] * self.window_size[1],\n", + " -1,\n", + " )\n", + " relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n", + " attn = attn + relative_position_bias.unsqueeze(0)\n", + "\n", + " if mask is not None:\n", + " nW = mask.shape[0]\n", + " attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n", + " attn = attn.view(-1, self.num_heads, N, N)\n", + " attn = self.softmax(attn)\n", + " else:\n", + " attn = self.softmax(attn)\n", + "\n", + " attn = self.attn_drop(attn)\n", + "\n", + " x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n", + " x = self.proj(x)\n", + " x = self.proj_drop(x)\n", + " return x\n", + "\n", + "\n", + "class SwinTransformerBlock(nn.Module):\n", + " r\"\"\" Swin Transformer Block.\"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " num_heads,\n", + " window_size=(5, 5),\n", + " shift_size=(0, 0),\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " act_layer=nn.GELU,\n", + " norm_layer=nn.LayerNorm,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.num_heads = num_heads\n", + " self.window_size = window_size\n", + " self.shift_size = shift_size\n", + " self.mlp_ratio = mlp_ratio\n", + "\n", + " if min(self.input_resolution) <= min(self.window_size):\n", + " self.shift_size = (0, 0)\n", + " self.window_size = self.input_resolution\n", + "\n", + " assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n", + " assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n", + "\n", + " self.norm1 = norm_layer(dim)\n", + " self.attn = WindowAttention(\n", + " dim,\n", + " window_size=self.window_size,\n", + " num_heads=num_heads,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " attn_drop=attn_drop,\n", + " proj_drop=drop,\n", + " )\n", + "\n", + " self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n", + " self.norm2 = norm_layer(dim)\n", + " mlp_hidden_dim = int(dim * mlp_ratio)\n", + " self.mlp = Mlp(\n", + " in_features=dim,\n", + " hidden_features=mlp_hidden_dim,\n", + " act_layer=act_layer,\n", + " drop=drop,\n", + " )\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " H, W = self.input_resolution\n", + " img_mask = torch.zeros((1, H, W, 1))\n", + " h_slices = (\n", + " slice(0, -self.window_size[0]),\n", + " slice(-self.window_size[0], -self.shift_size[0]),\n", + " slice(-self.shift_size[0], None),\n", + " )\n", + " w_slices = (\n", + " slice(0, -self.window_size[1]),\n", + " slice(-self.window_size[1], -self.shift_size[1]),\n", + " slice(-self.shift_size[1], None),\n", + " )\n", + " cnt = 0\n", + " for h in h_slices:\n", + " for w in w_slices:\n", + " img_mask[:, h, w, :] = cnt\n", + " cnt += 1\n", + "\n", + " mask_windows = window_partition(img_mask, self.window_size)\n", + " mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n", + " attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n", + " attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n", + " attn_mask == 0, float(0.0)\n", + " )\n", + " else:\n", + " attn_mask = None\n", + "\n", + " self.register_buffer(\"attn_mask\", attn_mask)\n", + "\n", + " def forward(self, x):\n", + " H, W = self.input_resolution\n", + " B, L, C = x.shape\n", + " assert L == H * W, \"input feature has wrong size\"\n", + "\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x = x.view(B, H, W, C)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " shifted_x = x\n", + "\n", + " x_windows = window_partition(shifted_x, self.window_size)\n", + " x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n", + "\n", + " attn_windows = self.attn(x_windows, mask=self.attn_mask)\n", + "\n", + " attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n", + " shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " x = shifted_x\n", + " x = x.view(B, H * W, C)\n", + "\n", + " x = shortcut + self.drop_path(x)\n", + " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", + "\n", + " return x\n", + "\n", + "\n", + "class BasicLayer(nn.Module):\n", + " \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " depth,\n", + " num_heads,\n", + " window_size,\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " norm_layer=nn.LayerNorm,\n", + " downsample=None,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.depth = depth\n", + "\n", + " self.blocks = nn.ModuleList(\n", + " [\n", + " SwinTransformerBlock(\n", + " dim=dim,\n", + " input_resolution=input_resolution,\n", + " num_heads=num_heads,\n", + " window_size=window_size,\n", + " shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n", + " mlp_ratio=mlp_ratio,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " drop=drop,\n", + " attn_drop=attn_drop,\n", + " drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n", + " norm_layer=norm_layer,\n", + " )\n", + " for i in range(depth)\n", + " ]\n", + " )\n", + "\n", + " if downsample is not None:\n", + " self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n", + " else:\n", + " self.downsample = None\n", + "\n", + " def forward(self, x):\n", + " for blk in self.blocks:\n", + " x = blk(x)\n", + " if self.downsample is not None:\n", + " x = self.downsample(x)\n", + " return x\n", + "\n", + "\n", + "class PatchEmbed(nn.Module):\n", + " r\"\"\" Image to Patch Embedding \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n", + " super().__init__()\n", + " self.img_size = img_size\n", + " self.patch_size = patch_size\n", + " self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n", + " self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n", + " self.in_chans = in_chans\n", + " self.embed_dim = embed_dim\n", + "\n", + " self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n", + " if norm_layer is not None:\n", + " self.norm = norm_layer(embed_dim)\n", + " else:\n", + " self.norm = None\n", + "\n", + " def forward(self, x):\n", + " B, C, H, W = x.shape\n", + " assert H == self.img_size[0] and W == self.img_size[1], \\\n", + " f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n", + " x = self.proj(x).flatten(2).transpose(1, 2)\n", + " if self.norm is not None:\n", + " x = self.norm(x)\n", + " return x\n", + "\n", + "\n", + "class TransformerLSABlock(nn.Module):\n", + " \"\"\"\n", + " A standard Transformer block with Multi-Head Self-Attention and a Feed-Forward Network.\n", + " This is a placeholder for the block used in the RelativisticPhysicalInformedEncoder.\n", + " \"\"\"\n", + " def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n", + " super().__init__()\n", + " self.norm1 = nn.LayerNorm(embed_dim)\n", + " self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n", + " self.norm2 = nn.LayerNorm(embed_dim)\n", + " self.mlp = nn.Sequential(\n", + " nn.Linear(embed_dim, num_hidden_neurons),\n", + " activation_function,\n", + " nn.Dropout(dropout),\n", + " nn.Linear(num_hidden_neurons, embed_dim),\n", + " nn.Dropout(dropout)\n", + " )\n", + " self.dropout = nn.Dropout(dropout)\n", + "\n", + " def forward(self, x):\n", + " # Attention part\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x, _ = self.attn(x, x, x)\n", + " x = self.dropout(x)\n", + " x = x + shortcut\n", + "\n", + " # MLP part\n", + " shortcut = x\n", + " x = self.norm2(x)\n", + " x = self.mlp(x)\n", + " x = x + shortcut\n", + " return x\n", + "\n", + "\n", + "class RelativisticPhysicalInformedEncoder(nn.Module):\n", + " \"\"\"\n", + " A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n", + " \"\"\"\n", + " def __init__( self,\n", + " image_size: int,\n", + " patch_size: int,\n", + " embed_dim: int,\n", + " num_patches: int,\n", + " num_heads: int,\n", + " num_hidden_neurons: int,\n", + " transformer_activation_function: nn.Module,\n", + " num_transformer_blocks: int,\n", + " dropout: float = 0.1,\n", + " pixel_scale:float =0.101,\n", + " k_min: float = 0.8,\n", + " k_max: float = 1.2,\n", + " eps: float = 1e-8\n", + " ):\n", + " super(RelativisticPhysicalInformedEncoder, self).__init__()\n", + " self.pixel_scale = pixel_scale\n", + " self.profile_size = image_size\n", + " self.half_profile_size = self.profile_size // 2\n", + " self.num_patches = num_patches\n", + " self.embed_dim = embed_dim\n", + " self.num_heads = num_heads\n", + " self.num_hidden_neurons = num_hidden_neurons\n", + " self.transformer_activation_function = transformer_activation_function\n", + " self.num_transformer_blocks = num_transformer_blocks\n", + " self.k_min = k_min\n", + " self.k_max = k_max\n", + " self.eps = eps\n", + "\n", + " self.transformer = nn.ModuleList()\n", + " self.num_neurons_flatten = (self.num_patches) * embed_dim # Removed +1 for CLS token as it's not used\n", + "\n", + " for _ in range(num_transformer_blocks):\n", + " self.transformer.append(\n", + " TransformerLSABlock(embed_dim,\n", + " num_heads,\n", + " self.num_patches,\n", + " num_hidden_neurons,\n", + " transformer_activation_function,\n", + " None, # Device is handled in forward pass\n", + " dropout)\n", + " )\n", + "\n", + " self.compressor = nn.Sequential(\n", + " nn.Flatten(),\n", + " nn.Linear(self.num_neurons_flatten, self.profile_size * self.profile_size),\n", + " nn.Sigmoid()\n", + " )\n", + "\n", + " # Create coordinate grids, but don't move to device yet\n", + " x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n", + " y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n", + " grid_x, grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n", + " self.register_buffer('grid_x', grid_x)\n", + " self.register_buffer('grid_y', grid_y)\n", + "\n", + "\n", + " def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n", + " \"\"\"\n", + " Forward pass through the module.\n", + " \"\"\"\n", + " # Ensure input_images is 2D (B, H*W) if it's not already\n", + " if input_images.dim() == 3:\n", + " input_images = input_images.squeeze(1)\n", + "\n", + " batch_size = input_images.shape[0]\n", + " device = input_images.device\n", + "\n", + " # Move grid tensors to the correct device\n", + " flat_grid_x = self.grid_x.flatten().to(device)\n", + " flat_grid_y = self.grid_y.flatten().to(device)\n", + "\n", + " # Pass patches through transformer blocks\n", + " k_transformed = patches\n", + " for layer in self.transformer:\n", + " k_transformed = layer(k_transformed)\n", + "\n", + " # Generate k using the compressor\n", + " k_sigmoid = self.compressor(k_transformed)\n", + "\n", + " k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n", + " k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size * self.profile_size)\n", + " k_sigmoid_flat = self.k_min + (self.k_max - self.k_min) * k_sigmoid_flat\n", + "\n", + " flat_input_images = input_images.view(batch_size, -1)\n", + " non_zero_mask = (flat_grid_x != 0) | (flat_grid_y != 0)\n", + " k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n", + "\n", + " shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n", + " k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n", + "\n", + " non_zero_x = flat_grid_x[non_zero_mask]\n", + " non_zero_y = flat_grid_y[non_zero_mask]\n", + " non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n", + " non_zero_radius = non_zero_radius[None, None, None, :]\n", + "\n", + " shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps))\n", + " shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps))\n", + "\n", + " shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n", + " shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n", + "\n", + " # Clamp indices to be within the valid range [0, profile_size-1]\n", + " shifted_x_idx.clamp_(0, self.profile_size - 1)\n", + " shifted_y_idx.clamp_(0, self.profile_size - 1)\n", + "\n", + " output_images = torch.zeros(batch_size, self.profile_size, self.profile_size, device=device)\n", + " flat_output_images = output_images.view(batch_size, -1)\n", + "\n", + " one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n", + " one_d_indices = one_d_indices.view(batch_size, -1)\n", + "\n", + " input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n", + "\n", + " # Use scatter_add_ for safe parallel updates\n", + " # To handle multiple source pixels mapping to the same target pixel, we average them.\n", + " # We need a count tensor for averaging.\n", + " counts = torch.zeros_like(flat_output_images)\n", + " ones = torch.ones_like(input_values_at_original_positions)\n", + "\n", + " flat_output_images.scatter_add_(1, one_d_indices, input_values_at_original_positions)\n", + " counts.scatter_add_(1, one_d_indices, ones)\n", + "\n", + " # Avoid division by zero\n", + " flat_output_images = torch.where(counts > 0, flat_output_images / counts, 0)\n", + "\n", + " output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n", + "\n", + " max_values = torch.amax(output_images, dim=(1, 2), keepdim=True)\n", + " output_images = output_images / (max_values + self.eps)\n", + "\n", + " return output_images\n", + "\n", + "\n", + "class SwinTransformerForClassification(nn.Module):\n", + " \"\"\"\n", + " Swin Transformer with an optional Relativistic Physics Informed Encoder.\n", + " \"\"\"\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n", + " embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n", + " window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n", + " drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n", + " norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n", + " use_relativistic_encoder=False, relativistic_encoder_blocks=2, **kwargs):\n", + " super().__init__()\n", + "\n", + " self.num_classes = num_classes\n", + " self.num_layers = len(depths)\n", + " self.embed_dim = embed_dim\n", + " self.ape = ape\n", + " self.patch_norm = patch_norm\n", + " self.num_features = int(embed_dim)\n", + " self.mlp_ratio = mlp_ratio\n", + " self.use_relativistic_encoder = use_relativistic_encoder\n", + "\n", + " self.patch_embed = PatchEmbed(\n", + " img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n", + " norm_layer=norm_layer if self.patch_norm else None)\n", + " num_patches = self.patch_embed.num_patches\n", + " patches_resolution = self.patch_embed.patches_resolution\n", + " self.patches_resolution = patches_resolution\n", + "\n", + " if self.use_relativistic_encoder:\n", + " self.relativistic_encoder = RelativisticPhysicalInformedEncoder(\n", + " image_size=img_size[0],\n", + " patch_size=patch_size[0],\n", + " embed_dim=embed_dim,\n", + " num_patches=num_patches,\n", + " num_heads=num_heads[0], # Use heads from the first Swin stage\n", + " num_hidden_neurons=int(embed_dim * mlp_ratio),\n", + " transformer_activation_function=nn.GELU(),\n", + " num_transformer_blocks=relativistic_encoder_blocks,\n", + " dropout=drop_rate\n", + " )\n", + "\n", + " if self.ape:\n", + " self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n", + " trunc_normal_(self.absolute_pos_embed, std=.02)\n", + "\n", + " self.pos_drop = nn.Dropout(p=drop_rate)\n", + " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n", + "\n", + " self.layers = nn.ModuleList()\n", + " layer = BasicLayer(dim=int(embed_dim),\n", + " input_resolution=patches_resolution,\n", + " depth=sum(depths),\n", + " num_heads=num_heads[0],\n", + " window_size=window_size,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=qkv_bias, qk_scale=qk_scale,\n", + " drop=drop_rate, attn_drop=attn_drop_rate,\n", + " drop_path=dpr,\n", + " norm_layer=norm_layer,\n", + " downsample=None)\n", + " self.layers.append(layer)\n", + "\n", + " self.norm = norm_layer(self.num_features)\n", + " self.avgpool = nn.AdaptiveAvgPool1d(1)\n", + " self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n", + "\n", + " self.apply(self._init_weights)\n", + "\n", + " def _init_weights(self, m):\n", + " if isinstance(m, nn.Linear):\n", + " trunc_normal_(m.weight, std=.02)\n", + " if isinstance(m, nn.Linear) and m.bias is not None:\n", + " nn.init.constant_(m.bias, 0)\n", + " elif isinstance(m, nn.LayerNorm):\n", + " nn.init.constant_(m.bias, 0)\n", + " nn.init.constant_(m.weight, 1.0)\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay(self):\n", + " return {'absolute_pos_embed'}\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay_keywords(self):\n", + " return {'relative_position_bias_table'}\n", + "\n", + " def forward_features(self, x):\n", + " x = self.patch_embed(x)\n", + " if self.ape:\n", + " x = x + self.absolute_pos_embed\n", + " x = self.pos_drop(x)\n", + "\n", + " for layer in self.layers:\n", + " x = layer(x)\n", + "\n", + " x = self.norm(x)\n", + " x = self.avgpool(x.transpose(1, 2))\n", + " x = torch.flatten(x, 1)\n", + " return x\n", + "\n", + " def forward(self, x):\n", + " if self.use_relativistic_encoder:\n", + " # The input 'x' is expected to be (B, C, H, W)\n", + " # The relativistic encoder needs the initial patches for its internal transformer\n", + " initial_patches = self.patch_embed(x)\n", + " # The encoder also needs the 2D image (B, H, W)\n", + " x_encoded = self.relativistic_encoder(x.squeeze(1), initial_patches)\n", + " # Reshape the output to (B, 1, H, W) to proceed with feature extraction\n", + " x = x_encoded.unsqueeze(1)\n", + "\n", + " # The rest of the forward pass proceeds from here\n", + " x = self.forward_features(x)\n", + " x = self.head(x)\n", + " return x\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "executionInfo": { + "elapsed": 5, + "status": "ok", + "timestamp": 1758703154860, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "hivvAHcI41JJ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "#!pip install torch_xla[tpu]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "executionInfo": { + "elapsed": 2, + "status": "ok", + "timestamp": 1758703154874, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "GtiRNfT34-6a" + }, + "outputs": [], + "source": [ + "#import torch_xla" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "executionInfo": { + "elapsed": 55, + "status": "ok", + "timestamp": 1758703154943, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "Q3rnNlt1_txE" + }, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from sklearn.metrics import roc_auc_score, roc_curve, auc\n", + "from sklearn.preprocessing import label_binarize\n", + "import copy\n", + "import matplotlib.pyplot as plt\n", + "from itertools import cycle\n", + "\n", + "def plot_roc_curve(all_labels, all_probs, class_names):\n", + " \"\"\"\n", + " Plots the ROC curve for each class and the micro/macro averages.\n", + " \"\"\"\n", + " # Binarize the labels for multi-class ROC analysis\n", + " all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n", + " all_probs = np.array(all_probs)\n", + "\n", + " # Compute ROC curve and ROC area for each class\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " for i in range(len(class_names)):\n", + " fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " # Compute micro-average ROC curve and ROC area\n", + " fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n", + " roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", + "\n", + " # Compute macro-average ROC curve and ROC area\n", + " # First aggregate all false positive rates\n", + " all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n", + " # Then interpolate all ROC curves at these points\n", + " mean_tpr = np.zeros_like(all_fpr)\n", + " for i in range(len(class_names)):\n", + " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", + " # Finally average it and compute AUC\n", + " mean_tpr /= len(class_names)\n", + " fpr[\"macro\"] = all_fpr\n", + " tpr[\"macro\"] = mean_tpr\n", + " roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", + "\n", + " # Plot all ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + "\n", + " plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n", + " label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n", + " color='deeppink', linestyle=':', linewidth=4)\n", + "\n", + " plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n", + " label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n", + " color='navy', linestyle=':', linewidth=4)\n", + "\n", + " colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n", + " for i, color in zip(range(len(class_names)), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color, lw=2,\n", + " label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--', lw=2)\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_swin_pinn.png\")\n", + " print(\"\\nROC curve plot saved as roc_curve.png\")\n", + "\n", + "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", + "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n", + " \"\"\"\n", + " Trains the model with early stopping based on validation ROC AUC score.\n", + "\n", + " Args:\n", + " model (torch.nn.Module): The neural network model to train.\n", + " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", + " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", + " criterion: The loss function.\n", + " optimizer: The optimization algorithm.\n", + " scheduler: The learning rate scheduler.\n", + " num_epochs (int): The maximum number of epochs to train for.\n", + " patience (int): Number of epochs to wait for improvement before stopping.\n", + " \"\"\"\n", + " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + " print(f\"Training on device: {device}\")\n", + "\n", + " model.to(device)\n", + "\n", + " best_roc_auc = 0.0\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = []\n", + " best_labels = []\n", + "\n", + " class_names = ['axion', 'cdm', 'no_sub']\n", + "\n", + " for epoch in range(num_epochs):\n", + " print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n", + "\n", + " # --- Training Phase ---\n", + " model.train()\n", + " train_loss = 0.0\n", + " train_correct = 0\n", + "\n", + " for images, labels in train_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " scheduler.step()\n", + "\n", + " train_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " train_correct += (predicted == labels).sum().item()\n", + "\n", + " # --- Validation Phase ---\n", + " model.eval()\n", + " val_loss = 0.0\n", + " val_correct = 0\n", + " all_probs = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for images, labels in val_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " val_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " val_correct += (predicted == labels).sum().item()\n", + "\n", + " probs = torch.softmax(outputs, dim=1)\n", + " all_probs.extend(probs.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " # --- Calculate Metrics ---\n", + " train_loss = train_loss / len(train_loader.dataset)\n", + " val_loss = val_loss / len(val_loader.dataset)\n", + " train_accuracy = train_correct / len(train_loader.dataset)\n", + " val_accuracy = val_correct / len(val_loader.dataset)\n", + "\n", + " # Calculate multi-class ROC AUC score\n", + " all_labels_np = np.array(all_labels)\n", + " all_probs_np = np.array(all_probs)\n", + " try:\n", + " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", + " except ValueError as e:\n", + " print(f\"Could not calculate ROC AUC: {e}\")\n", + " val_roc_auc = 0.0\n", + "\n", + " # Epoch-level summary\n", + " #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", + " #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", + " #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", + "\n", + " if val_roc_auc > best_roc_auc:\n", + " best_roc_auc = val_roc_auc\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = all_probs\n", + " best_labels = all_labels\n", + " #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", + " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + " else:\n", + " epochs_no_improve += 1\n", + " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + "\n", + " if epochs_no_improve >= patience:\n", + " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", + " model.load_state_dict(best_model_wts)\n", + " break\n", + "\n", + " print(\"\\nTraining Complete!\")\n", + " model.load_state_dict(best_model_wts)\n", + "\n", + " # After the training loop, plot the ROC curve for the best model\n", + " if best_probs and best_labels:\n", + " plot_roc_curve(best_labels, best_probs, class_names)\n", + "\n", + " return model, best_probs, best_labels" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1758703154958, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "9QBIRCLEkikD" + }, + "outputs": [], + "source": [ + "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-ZJepKUw_txF", + "outputId": "76291ff9-d31b-40d3-e3a5-01f0e8302d38" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimizer: Adam\n", + "Learning Rate: 0.0001\n", + "Training on device: cuda\n", + "===== Epoch 1/2000 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n", + " warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New best model saved with Val ROC AUC: 0.5015, Train Loss: 0.9679, Train Accuracy: 0.5034, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 2/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5015, Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 3/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5084, Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n", + "===== Epoch 4/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5084. Train Loss: 0.9652, Train Accuracy: 0.5069, Val Loss: 0.9625, Val Accuracy: 0.5186\n", + "===== Epoch 5/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5084. Train Loss: 0.9647, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 6/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 7/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9647, Val Accuracy: 0.5186\n", + "===== Epoch 8/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5084. Train Loss: 0.9647, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n", + "===== Epoch 9/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 10/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n", + "===== Epoch 11/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5084. Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9622, Val Accuracy: 0.5186\n", + "===== Epoch 12/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 13/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 14/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 15/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 16/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 17/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 18/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 19/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5084. Train Loss: 0.9646, Train Accuracy: 0.5069, Val Loss: 0.9610, Val Accuracy: 0.5186\n", + "===== Epoch 20/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 21/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 22/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 23/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5084. Train Loss: 0.9644, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 24/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 25/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 26/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9633, Val Accuracy: 0.5186\n", + "===== Epoch 27/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n", + "===== Epoch 28/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n", + "===== Epoch 29/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 30/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5084. Train Loss: 0.9645, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 31/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 32/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 33/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 34/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 35/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 36/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 37/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 38/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 39/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 40/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 41/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9611, Val Accuracy: 0.5186\n", + "===== Epoch 42/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 43/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 44/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9612, Val Accuracy: 0.5186\n", + "===== Epoch 45/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n", + "===== Epoch 46/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 47/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 48/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9622, Val Accuracy: 0.5186\n", + "===== Epoch 49/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 50/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 51/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 52/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 53/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 54/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 55/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9633, Val Accuracy: 0.5186\n", + "===== Epoch 56/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 57/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 58/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 59/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 60/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 61/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 62/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9627, Val Accuracy: 0.5186\n", + "===== Epoch 63/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9627, Val Accuracy: 0.5186\n", + "===== Epoch 64/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9613, Val Accuracy: 0.5186\n", + "===== Epoch 65/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 66/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 67/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 68/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 69/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 70/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 71/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9620, Val Accuracy: 0.5186\n", + "===== Epoch 72/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5084. Train Loss: 0.9638, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 73/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 74/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 75/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n", + "===== Epoch 76/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 77/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 78/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 79/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 80/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5084. Train Loss: 0.9638, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 81/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 82/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9619, Val Accuracy: 0.5186\n", + "===== Epoch 83/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 84/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 85/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 86/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5084. Train Loss: 0.9643, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 87/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 88/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 89/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 90/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 91/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9616, Val Accuracy: 0.5186\n", + "===== Epoch 92/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9621, Val Accuracy: 0.5186\n", + "===== Epoch 93/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 94/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 95/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 96/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9615, Val Accuracy: 0.5186\n", + "===== Epoch 97/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5084. Train Loss: 0.9641, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 98/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5084. Train Loss: 0.9640, Train Accuracy: 0.5069, Val Loss: 0.9614, Val Accuracy: 0.5186\n", + "===== Epoch 99/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5084. Train Loss: 0.9639, Train Accuracy: 0.5069, Val Loss: 0.9618, Val Accuracy: 0.5186\n", + "===== Epoch 100/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5084. Train Loss: 0.9642, Train Accuracy: 0.5069, Val Loss: 0.9617, Val Accuracy: 0.5186\n", + "===== Epoch 101/2000 =====\n" + ] + } + ], + "source": [ + "\"\"\"\n", + "Args:\n", + " image_size (int): Size of the input image (e.g., 224).\n", + " patch_size (int): Size of each patch (e.g., 16).\n", + " in_channels (int): Number of input channels (e.g., 1 for your task).\n", + " num_classes (int): Number of output classes (e.g., 3 for your task).\n", + " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", + " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", + " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", + " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", + " dropout (float): Dropout probability.\n", + "\"\"\"\n", + "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", + "batch_size = 32\n", + "learning_rate = 1e-4\n", + "weight_decay = 0.05\n", + "num_epochs = 2000\n", + "warmup_epochs = 10\n", + "model = SwinTransformerForClassification(\n", + " img_size=(64, 64),\n", + " patch_size=(10, 10),\n", + " in_chans=1,\n", + " num_classes=3,\n", + " embed_dim=96,\n", + " depths=[2, 2, 2],\n", + " num_heads=[3, 6, 12],\n", + " window_size=(3, 3), # Changed window size to 3x3\n", + " use_relativistic_encoder=True, # <-- Set to True\n", + " relativistic_encoder_blocks=2 # <-- Hyperparameter for the new encoder\n", + " )\n", + "\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n", + "\n", + "\n", + "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", + "def warmup_lambda(current_epoch):\n", + " if current_epoch < warmup_epochs:\n", + " return float(current_epoch) / float(max(1, warmup_epochs))\n", + " return 1.0\n", + "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", + "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", + "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", + "\n", + "\n", + "print(\"Optimizer: Adam\")\n", + "print(f\"Learning Rate: {learning_rate}\")\n", + "\n", + "# Train Model\n", + "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_-lEQtu_txF" + }, + "source": [ + "\"\"\" ROC Curve Plotting Function\"\"\"\n", + "def plot_roc_curve(all_preds, all_labels):\n", + " print(\"Generating ROC Curve\")\n", + "\n", + " # Convert predictions and labels to numpy arrays\n", + " all_preds = np.array(all_preds)\n", + " all_labels = np.array(all_labels)\n", + "\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " n_classes = 3\n", + "\n", + " for i in range(n_classes):\n", + " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", + "\n", + " # Plot ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + " colors = ['blue', 'red', 'green']\n", + " class_names = ['Axion', 'CDM', 'No Substructure']\n", + "\n", + " for i, color in zip(range(n_classes), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color,\n", + " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_swin_pinn.png')\n", + " plt.close()\n", + "\n", + " print(\"ROC Curve saved as roc_curve.png\")\n", + "\n", + "\n", + "plot_roc_curve(all_probs, all_labels)\n", + "\n", + "print(\"Training and Evaluation Complete!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 91655, + "status": "aborted", + "timestamp": 1758703155727, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "MZ59pFZa_txG" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "machine_shape": "hm", + "provenance": [ + { + "file_id": "1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28", + "timestamp": 1756243482189 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin.ipynb b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin.ipynb index bc0cf6f..5fd941b 100644 --- a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin.ipynb +++ b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/HEAL-PINN-sparse-dataset/vision transformer swin.ipynb @@ -1 +1,5327 @@ -{"cells":[{"cell_type":"markdown","source":[],"metadata":{"id":"X7Ekxmo1XV5I"}},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_mFRKD8F__hl","executionInfo":{"status":"ok","timestamp":1756379455134,"user_tz":300,"elapsed":443,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}},"outputId":"3c0de2ad-ccfe-4495-aba8-a4b41cfa5e01"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vRM2kxST8KJZ"},"outputs":[],"source":["\n","\n","\"\"\"Import dependencies\"\"\"\n","import os\n","import numpy as np\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import Dataset, DataLoader\n","from torchvision.models import resnet18\n","from sklearn.metrics import roc_curve, auc\n","import matplotlib.pyplot as plt"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9Dm6SC1o_txB"},"outputs":[],"source":["\n","class MyDatasetViT(Dataset):\n"," def __init__(self, data_dir, transform=None):\n"," self.data = []\n"," self.labels = []\n"," self.class_names = ['axion', 'cdm', 'no_sub']\n"," self.transform = transform\n","\n"," print(f\"Loading dataset from: {data_dir}\")\n"," print(f\"Looking for classes: {self.class_names}\")\n","\n"," for idx, class_name in enumerate(self.class_names):\n"," class_dir = os.path.join(data_dir, class_name)\n"," print(f\"--- Processing class: {class_name} ---\")\n","\n"," if not os.path.exists(class_dir):\n"," print(f\"[ERROR] Directory not found: {class_dir}\")\n"," continue\n","\n"," files = os.listdir(class_dir)\n","\n"," for file_name in files:\n"," if file_name.endswith('.npy'):\n"," file_path = os.path.join(class_dir, file_name)\n"," loaded_data = np.load(file_path, allow_pickle=True)\n","\n"," if class_name == 'axion':\n"," image = loaded_data[0]\n"," else:\n"," image = loaded_data\n","\n"," # [DEBUG] Print the shape of the raw numpy array\n"," print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n","\n"," # Ensure the image is a 2D array (H, W) before adding channel dimension.\n"," if image.ndim != 2:\n"," image = np.squeeze(image)\n","\n"," # Convert to a float tensor and add a channel dimension -> [1, H, W]\n"," image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n","\n"," # [DEBUG] Print the shape of the final tensor being stored in the dataset\n"," print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n","\n"," self.data.append(image_tensor)\n"," self.labels.append(idx)\n","\n"," print(\"\\n--- Dataset Loading Complete ---\")\n"," print(f\"Total images loaded: {len(self.data)}\")\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," \"\"\"\n"," This method is called by the DataLoader to get one item from the dataset.\n"," The debug prints here are CRITICAL for finding the error.\n"," \"\"\"\n"," #print(f\"--- Getting item index: {idx} ---\")\n","\n"," # Retrieve the pre-loaded tensor and its label\n"," image = self.data[idx]\n"," label = self.labels[idx]\n","\n"," # [DEBUG] Print shape BEFORE the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n","\n"," # Apply transformations (e.g., resizing) if they are provided\n"," if self.transform:\n"," image = self.transform(image)\n"," # [DEBUG] Print shape AFTER the transform is applied\n"," #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n"," else:\n"," #print(\" [DEBUG] No transform was applied.\")\n"," pass\n","\n"," return image, label"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"VJEgowwT_txC","outputId":"b782b3c2-133f-40c7-8fcf-e2e1b5ff8b24","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1756379455158,"user_tz":300,"elapsed":9,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n"]}],"source":["\n","# Import the transforms module\n","from torchvision import transforms\n","# Hyperparameters\n","batch_size = 32\n","learning_rate = 0.001\n","num_epochs = 100\n","\n","# Data Directories\n","train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n","#val_dir = '../dataset/dataset/val'\n","\n","print(f\"Training Directory: {train_dir}\")\n","#print(f\"Validation Directory: {val_dir}\")\n","\n","vit_transforms = transforms.Compose([\n"," # transforms.ToTensor(), # Removed ToTensor()\n"," transforms.RandomHorizontalFlip(p=0.5),\n"," transforms.RandomVerticalFlip(p=0.5),\n"," transforms.RandomRotation(degrees=90), # Can be any angle range\n","])\n","\n","# Create Datasets and Dataloaders\n","#train_dataset = MyDataset(train_dir)\n","#val_dataset = MyDataset(val_dir)\n","#dataset = MyDatasetViT(train_dir, vit_transforms)\n","#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n","\n","#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n","#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n","\n","#print(f\"Batch Size: {batch_size}\")\n","#print(f\"Number of Training Batches: {len(train_loader)}\")\n","#print(f\"Number of Validation Batches: {len(val_loader)}\")\n","\n","#Save the dataloader so that we don't have to bear with this pain again\n","#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n","#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')"]},{"cell_type":"code","source":["#import data loaders from file\n","train_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_train_loader.pth', weights_only=False)\n","val_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_val_loader.pth', weights_only=False)"],"metadata":{"id":"gvqsjdgzKmOL"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"y6Q9I1Hw_txD"},"outputs":[],"source":["import torch\n","import torch.nn as nn\n","import torch.utils.checkpoint as checkpoint\n","from timm.models.layers import DropPath, trunc_normal_\n","from torch import Tensor\n","\n","# --- Helper Classes from Original Swin Transformer ---\n","\n","class Mlp(nn.Module):\n"," \"\"\" Multi-Layer Perceptron \"\"\"\n"," def __init__(\n"," self,\n"," in_features,\n"," hidden_features=None,\n"," out_features=None,\n"," act_layer=nn.GELU,\n"," drop=0.0,\n"," ):\n"," super().__init__()\n"," out_features = out_features or in_features\n"," hidden_features = hidden_features or in_features\n"," self.fc1 = nn.Linear(in_features, hidden_features)\n"," self.act = act_layer()\n"," self.fc2 = nn.Linear(hidden_features, out_features)\n"," self.drop = nn.Dropout(drop)\n","\n"," def forward(self, x):\n"," x = self.fc1(x)\n"," x = self.act(x)\n"," x = self.drop(x)\n"," x = self.fc2(x)\n"," x = self.drop(x)\n"," return x\n","\n","\n","def window_partition(x, window_size):\n"," \"\"\"\n"," Partitions the input tensor into non-overlapping windows.\n"," Args:\n"," x: (B, H, W, C)\n"," window_size (tuple[int]): Window size (height, width).\n","\n"," Returns:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," \"\"\"\n"," B, H, W, C = x.shape\n"," x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n"," windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n"," return windows\n","\n","\n","def window_reverse(windows, window_size, H, W):\n"," \"\"\"\n"," Reverses the window partitioning.\n"," Args:\n"," windows: (num_windows*B, window_size, window_size, C)\n"," window_size (tuple[int]): Window size (height, width).\n"," H (int): Height of image.\n"," W (int): Width of image.\n","\n"," Returns:\n"," x: (B, H, W, C)\n"," \"\"\"\n"," B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n"," x = windows.view(\n"," B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n"," )\n"," x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n"," return x\n","\n","\n","class WindowAttention(nn.Module):\n"," r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n"," It supports both shifted and non-shifted windows.\n"," \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," window_size,\n"," num_heads,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," attn_drop=0.0,\n"," proj_drop=0.0,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.window_size = window_size\n"," self.num_heads = num_heads\n"," head_dim = dim // num_heads\n"," self.scale = qk_scale or head_dim**-0.5\n","\n"," self.relative_position_bias_table = nn.Parameter(\n"," torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n"," )\n","\n"," coords_h = torch.arange(self.window_size[0])\n"," coords_w = torch.arange(self.window_size[1])\n"," coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n"," coords_flatten = torch.flatten(coords, 1)\n"," relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n"," relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n"," relative_coords[:, :, 0] += self.window_size[0] - 1\n"," relative_coords[:, :, 1] += self.window_size[1] - 1\n"," relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n"," relative_position_index = relative_coords.sum(-1)\n"," self.register_buffer(\"relative_position_index\", relative_position_index)\n","\n"," self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n"," self.attn_drop = nn.Dropout(attn_drop)\n"," self.proj = nn.Linear(dim, dim)\n"," self.proj_drop = nn.Dropout(proj_drop)\n","\n"," trunc_normal_(self.relative_position_bias_table, std=0.02)\n"," self.softmax = nn.Softmax(dim=-1)\n","\n"," def forward(self, x, mask=None):\n"," B_, N, C = x.shape\n"," qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n"," q, k, v = qkv[0], qkv[1], qkv[2]\n","\n"," q = q * self.scale\n"," attn = q @ k.transpose(-2, -1)\n","\n"," relative_position_bias = self.relative_position_bias_table[\n"," self.relative_position_index.view(-1)\n"," ].view(\n"," self.window_size[0] * self.window_size[1],\n"," self.window_size[0] * self.window_size[1],\n"," -1,\n"," )\n"," relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n"," attn = attn + relative_position_bias.unsqueeze(0)\n","\n"," if mask is not None:\n"," nW = mask.shape[0]\n"," attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n"," attn = attn.view(-1, self.num_heads, N, N)\n"," attn = self.softmax(attn)\n"," else:\n"," attn = self.softmax(attn)\n","\n"," attn = self.attn_drop(attn)\n","\n"," x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n"," x = self.proj(x)\n"," x = self.proj_drop(x)\n"," return x\n","\n","\n","class SwinTransformerBlock(nn.Module):\n"," r\"\"\" Swin Transformer Block.\"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," num_heads,\n"," window_size=(5, 5),\n"," shift_size=(0, 0),\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," act_layer=nn.GELU,\n"," norm_layer=nn.LayerNorm,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.num_heads = num_heads\n"," self.window_size = window_size\n"," self.shift_size = shift_size\n"," self.mlp_ratio = mlp_ratio\n","\n"," if min(self.input_resolution) <= min(self.window_size):\n"," self.shift_size = (0, 0)\n"," self.window_size = self.input_resolution\n","\n"," assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n"," assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n","\n"," self.norm1 = norm_layer(dim)\n"," self.attn = WindowAttention(\n"," dim,\n"," window_size=self.window_size,\n"," num_heads=num_heads,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," attn_drop=attn_drop,\n"," proj_drop=drop,\n"," )\n","\n"," self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n"," self.norm2 = norm_layer(dim)\n"," mlp_hidden_dim = int(dim * mlp_ratio)\n"," self.mlp = Mlp(\n"," in_features=dim,\n"," hidden_features=mlp_hidden_dim,\n"," act_layer=act_layer,\n"," drop=drop,\n"," )\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," H, W = self.input_resolution\n"," img_mask = torch.zeros((1, H, W, 1))\n"," h_slices = (\n"," slice(0, -self.window_size[0]),\n"," slice(-self.window_size[0], -self.shift_size[0]),\n"," slice(-self.shift_size[0], None),\n"," )\n"," w_slices = (\n"," slice(0, -self.window_size[1]),\n"," slice(-self.window_size[1], -self.shift_size[1]),\n"," slice(-self.shift_size[1], None),\n"," )\n"," cnt = 0\n"," for h in h_slices:\n"," for w in w_slices:\n"," img_mask[:, h, w, :] = cnt\n"," cnt += 1\n","\n"," mask_windows = window_partition(img_mask, self.window_size)\n"," mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n"," attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n"," attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n"," attn_mask == 0, float(0.0)\n"," )\n"," else:\n"," attn_mask = None\n","\n"," self.register_buffer(\"attn_mask\", attn_mask)\n","\n"," def forward(self, x):\n"," H, W = self.input_resolution\n"," B, L, C = x.shape\n"," assert L == H * W, \"input feature has wrong size\"\n","\n"," shortcut = x\n"," x = self.norm1(x)\n"," x = x.view(B, H, W, C)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n"," else:\n"," shifted_x = x\n","\n"," x_windows = window_partition(shifted_x, self.window_size)\n"," x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n","\n"," attn_windows = self.attn(x_windows, mask=self.attn_mask)\n","\n"," attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n"," shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n","\n"," if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n"," x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n"," else:\n"," x = shifted_x\n"," x = x.view(B, H * W, C)\n","\n"," x = shortcut + self.drop_path(x)\n"," x = x + self.drop_path(self.mlp(self.norm2(x)))\n","\n"," return x\n","\n","\n","class BasicLayer(nn.Module):\n"," \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n","\n"," def __init__(\n"," self,\n"," dim,\n"," input_resolution,\n"," depth,\n"," num_heads,\n"," window_size,\n"," mlp_ratio=4.0,\n"," qkv_bias=True,\n"," qk_scale=None,\n"," drop=0.0,\n"," attn_drop=0.0,\n"," drop_path=0.0,\n"," norm_layer=nn.LayerNorm,\n"," downsample=None,\n"," ):\n"," super().__init__()\n"," self.dim = dim\n"," self.input_resolution = input_resolution\n"," self.depth = depth\n","\n"," self.blocks = nn.ModuleList(\n"," [\n"," SwinTransformerBlock(\n"," dim=dim,\n"," input_resolution=input_resolution,\n"," num_heads=num_heads,\n"," window_size=window_size,\n"," shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n"," mlp_ratio=mlp_ratio,\n"," qkv_bias=qkv_bias,\n"," qk_scale=qk_scale,\n"," drop=drop,\n"," attn_drop=attn_drop,\n"," drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n"," norm_layer=norm_layer,\n"," )\n"," for i in range(depth)\n"," ]\n"," )\n","\n"," if downsample is not None:\n"," self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n"," else:\n"," self.downsample = None\n","\n"," def forward(self, x):\n"," for blk in self.blocks:\n"," x = blk(x)\n"," if self.downsample is not None:\n"," x = self.downsample(x)\n"," return x\n","\n","\n","class PatchEmbed(nn.Module):\n"," r\"\"\" Image to Patch Embedding \"\"\"\n","\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n"," super().__init__()\n"," self.img_size = img_size\n"," self.patch_size = patch_size\n"," self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n"," self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n"," self.in_chans = in_chans\n"," self.embed_dim = embed_dim\n","\n"," self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n"," if norm_layer is not None:\n"," self.norm = norm_layer(embed_dim)\n"," else:\n"," self.norm = None\n","\n"," def forward(self, x):\n"," B, C, H, W = x.shape\n"," assert H == self.img_size[0] and W == self.img_size[1], \\\n"," f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n"," x = self.proj(x).flatten(2).transpose(1, 2)\n"," if self.norm is not None:\n"," x = self.norm(x)\n"," return x\n","\n","# --- New and Modified Classes ---\n","\n","class TransformerLSABlock(nn.Module):\n"," \"\"\"\n"," A standard Transformer block with Multi-Head Self-Attention and a Feed-Forward Network.\n"," This is a placeholder for the block used in the RelativisticPhysicalInformedEncoder.\n"," \"\"\"\n"," def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n"," super().__init__()\n"," self.norm1 = nn.LayerNorm(embed_dim)\n"," self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n"," self.norm2 = nn.LayerNorm(embed_dim)\n"," self.mlp = nn.Sequential(\n"," nn.Linear(embed_dim, num_hidden_neurons),\n"," activation_function,\n"," nn.Dropout(dropout),\n"," nn.Linear(num_hidden_neurons, embed_dim),\n"," nn.Dropout(dropout)\n"," )\n"," self.dropout = nn.Dropout(dropout)\n","\n"," def forward(self, x):\n"," # Attention part\n"," shortcut = x\n"," x = self.norm1(x)\n"," x, _ = self.attn(x, x, x)\n"," x = self.dropout(x)\n"," x = x + shortcut\n","\n"," # MLP part\n"," shortcut = x\n"," x = self.norm2(x)\n"," x = self.mlp(x)\n"," x = x + shortcut\n"," return x\n","\n","\n","class RelativisticPhysicalInformedEncoder(nn.Module):\n"," \"\"\"\n"," A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n"," \"\"\"\n"," def __init__( self,\n"," image_size: int,\n"," patch_size: int,\n"," embed_dim: int,\n"," num_patches: int,\n"," num_heads: int,\n"," num_hidden_neurons: int,\n"," transformer_activation_function: nn.Module,\n"," num_transformer_blocks: int,\n"," dropout: float = 0.1,\n"," pixel_scale:float =0.101,\n"," k_min: float = 0.8,\n"," k_max: float = 1.2,\n"," eps: float = 1e-8\n"," ):\n"," super(RelativisticPhysicalInformedEncoder, self).__init__()\n"," self.pixel_scale = pixel_scale\n"," self.profile_size = image_size\n"," self.half_profile_size = self.profile_size // 2\n"," self.num_patches = num_patches\n"," self.embed_dim = embed_dim\n"," self.num_heads = num_heads\n"," self.num_hidden_neurons = num_hidden_neurons\n"," self.transformer_activation_function = transformer_activation_function\n"," self.num_transformer_blocks = num_transformer_blocks\n"," self.k_min = k_min\n"," self.k_max = k_max\n"," self.eps = eps\n","\n"," self.transformer = nn.ModuleList()\n"," self.num_neurons_flatten = (self.num_patches) * embed_dim # Removed +1 for CLS token as it's not used\n","\n"," for _ in range(num_transformer_blocks):\n"," self.transformer.append(\n"," TransformerLSABlock(embed_dim,\n"," num_heads,\n"," self.num_patches,\n"," num_hidden_neurons,\n"," transformer_activation_function,\n"," None, # Device is handled in forward pass\n"," dropout)\n"," )\n","\n"," self.compressor = nn.Sequential(\n"," nn.Flatten(),\n"," nn.Linear(self.num_neurons_flatten, self.profile_size * self.profile_size),\n"," nn.Sigmoid()\n"," )\n","\n"," # Create coordinate grids, but don't move to device yet\n"," x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n"," y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n"," grid_x, grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n"," self.register_buffer('grid_x', grid_x)\n"," self.register_buffer('grid_y', grid_y)\n","\n","\n"," def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n"," \"\"\"\n"," Forward pass through the module.\n"," \"\"\"\n"," # Ensure input_images is 2D (B, H*W) if it's not already\n"," if input_images.dim() == 3:\n"," input_images = input_images.squeeze(1)\n","\n"," batch_size = input_images.shape[0]\n"," device = input_images.device\n","\n"," # Move grid tensors to the correct device\n"," flat_grid_x = self.grid_x.flatten().to(device)\n"," flat_grid_y = self.grid_y.flatten().to(device)\n","\n"," # Pass patches through transformer blocks\n"," k_transformed = patches\n"," for layer in self.transformer:\n"," k_transformed = layer(k_transformed)\n","\n"," # Generate k using the compressor\n"," k_sigmoid = self.compressor(k_transformed)\n","\n"," k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n"," k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size * self.profile_size)\n"," k_sigmoid_flat = self.k_min + (self.k_max - self.k_min) * k_sigmoid_flat\n","\n"," flat_input_images = input_images.view(batch_size, -1)\n"," non_zero_mask = (flat_grid_x != 0) | (flat_grid_y != 0)\n"," k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n","\n"," shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n"," k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n","\n"," non_zero_x = flat_grid_x[non_zero_mask]\n"," non_zero_y = flat_grid_y[non_zero_mask]\n"," non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n"," non_zero_radius = non_zero_radius[None, None, None, :]\n","\n"," shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps))\n"," shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps))\n","\n"," shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n"," shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n","\n"," # Clamp indices to be within the valid range [0, profile_size-1]\n"," shifted_x_idx.clamp_(0, self.profile_size - 1)\n"," shifted_y_idx.clamp_(0, self.profile_size - 1)\n","\n"," output_images = torch.zeros(batch_size, self.profile_size, self.profile_size, device=device)\n"," flat_output_images = output_images.view(batch_size, -1)\n","\n"," one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n"," one_d_indices = one_d_indices.view(batch_size, -1)\n","\n"," input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n","\n"," # Use scatter_add_ for safe parallel updates\n"," # To handle multiple source pixels mapping to the same target pixel, we average them.\n"," # We need a count tensor for averaging.\n"," counts = torch.zeros_like(flat_output_images)\n"," ones = torch.ones_like(input_values_at_original_positions)\n","\n"," flat_output_images.scatter_add_(1, one_d_indices, input_values_at_original_positions)\n"," counts.scatter_add_(1, one_d_indices, ones)\n","\n"," # Avoid division by zero\n"," flat_output_images = torch.where(counts > 0, flat_output_images / counts, 0)\n","\n"," output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n","\n"," max_values = torch.amax(output_images, dim=(1, 2), keepdim=True)\n"," output_images = output_images / (max_values + self.eps)\n","\n"," return output_images\n","\n","\n","class SwinTransformerForClassification(nn.Module):\n"," \"\"\"\n"," Swin Transformer with an optional Relativistic Physics Informed Encoder.\n"," \"\"\"\n"," def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n"," embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n"," window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n"," drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n"," norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n"," use_relativistic_encoder=False, relativistic_encoder_blocks=2, **kwargs):\n"," super().__init__()\n","\n"," self.num_classes = num_classes\n"," self.num_layers = len(depths)\n"," self.embed_dim = embed_dim\n"," self.ape = ape\n"," self.patch_norm = patch_norm\n"," self.num_features = int(embed_dim)\n"," self.mlp_ratio = mlp_ratio\n"," self.use_relativistic_encoder = use_relativistic_encoder\n","\n"," self.patch_embed = PatchEmbed(\n"," img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n"," norm_layer=norm_layer if self.patch_norm else None)\n"," num_patches = self.patch_embed.num_patches\n"," patches_resolution = self.patch_embed.patches_resolution\n"," self.patches_resolution = patches_resolution\n","\n"," if self.use_relativistic_encoder:\n"," self.relativistic_encoder = RelativisticPhysicalInformedEncoder(\n"," image_size=img_size[0],\n"," patch_size=patch_size[0],\n"," embed_dim=embed_dim,\n"," num_patches=num_patches,\n"," num_heads=num_heads[0], # Use heads from the first Swin stage\n"," num_hidden_neurons=int(embed_dim * mlp_ratio),\n"," transformer_activation_function=nn.GELU(),\n"," num_transformer_blocks=relativistic_encoder_blocks,\n"," dropout=drop_rate\n"," )\n","\n"," if self.ape:\n"," self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n"," trunc_normal_(self.absolute_pos_embed, std=.02)\n","\n"," self.pos_drop = nn.Dropout(p=drop_rate)\n"," dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n","\n"," self.layers = nn.ModuleList()\n"," layer = BasicLayer(dim=int(embed_dim),\n"," input_resolution=patches_resolution,\n"," depth=sum(depths),\n"," num_heads=num_heads[0],\n"," window_size=window_size,\n"," mlp_ratio=self.mlp_ratio,\n"," qkv_bias=qkv_bias, qk_scale=qk_scale,\n"," drop=drop_rate, attn_drop=attn_drop_rate,\n"," drop_path=dpr,\n"," norm_layer=norm_layer,\n"," downsample=None)\n"," self.layers.append(layer)\n","\n"," self.norm = norm_layer(self.num_features)\n"," self.avgpool = nn.AdaptiveAvgPool1d(1)\n"," self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n","\n"," self.apply(self._init_weights)\n","\n"," def _init_weights(self, m):\n"," if isinstance(m, nn.Linear):\n"," trunc_normal_(m.weight, std=.02)\n"," if isinstance(m, nn.Linear) and m.bias is not None:\n"," nn.init.constant_(m.bias, 0)\n"," elif isinstance(m, nn.LayerNorm):\n"," nn.init.constant_(m.bias, 0)\n"," nn.init.constant_(m.weight, 1.0)\n","\n"," @torch.jit.ignore\n"," def no_weight_decay(self):\n"," return {'absolute_pos_embed'}\n","\n"," @torch.jit.ignore\n"," def no_weight_decay_keywords(self):\n"," return {'relative_position_bias_table'}\n","\n"," def forward_features(self, x):\n"," x = self.patch_embed(x)\n"," if self.ape:\n"," x = x + self.absolute_pos_embed\n"," x = self.pos_drop(x)\n","\n"," for layer in self.layers:\n"," x = layer(x)\n","\n"," x = self.norm(x)\n"," x = self.avgpool(x.transpose(1, 2))\n"," x = torch.flatten(x, 1)\n"," return x\n","\n"," def forward(self, x):\n"," if self.use_relativistic_encoder:\n"," # The input 'x' is expected to be (B, C, H, W)\n"," # The relativistic encoder needs the initial patches for its internal transformer\n"," initial_patches = self.patch_embed(x)\n"," # The encoder also needs the 2D image (B, H, W)\n"," x_encoded = self.relativistic_encoder(x.squeeze(1), initial_patches)\n"," # Reshape the output to (B, 1, H, W) to proceed with feature extraction\n"," x = x_encoded.unsqueeze(1)\n","\n"," # The rest of the forward pass proceeds from here\n"," x = self.forward_features(x)\n"," x = self.head(x)\n"," return x\n"]},{"cell_type":"code","source":["\n","\n","#!pip install torch_xla[tpu]"],"metadata":{"id":"hivvAHcI41JJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["#import torch_xla"],"metadata":{"id":"GtiRNfT34-6a"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Q3rnNlt1_txE"},"outputs":[],"source":["import torch\n","import numpy as np\n","from sklearn.metrics import roc_auc_score, roc_curve, auc\n","from sklearn.preprocessing import label_binarize\n","import copy\n","import matplotlib.pyplot as plt\n","from itertools import cycle\n","\n","def plot_roc_curve(all_labels, all_probs, class_names):\n"," \"\"\"\n"," Plots the ROC curve for each class and the micro/macro averages.\n"," \"\"\"\n"," # Binarize the labels for multi-class ROC analysis\n"," all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n"," all_probs = np.array(all_probs)\n","\n"," # Compute ROC curve and ROC area for each class\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," for i in range(len(class_names)):\n"," fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," # Compute micro-average ROC curve and ROC area\n"," fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n"," roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n","\n"," # Compute macro-average ROC curve and ROC area\n"," # First aggregate all false positive rates\n"," all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n"," # Then interpolate all ROC curves at these points\n"," mean_tpr = np.zeros_like(all_fpr)\n"," for i in range(len(class_names)):\n"," mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n"," # Finally average it and compute AUC\n"," mean_tpr /= len(class_names)\n"," fpr[\"macro\"] = all_fpr\n"," tpr[\"macro\"] = mean_tpr\n"," roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n","\n"," # Plot all ROC curves\n"," plt.figure(figsize=(10, 8))\n","\n"," plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n"," label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n"," color='deeppink', linestyle=':', linewidth=4)\n","\n"," plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n"," label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n"," color='navy', linestyle=':', linewidth=4)\n","\n"," colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n"," for i, color in zip(range(len(class_names)), colors):\n"," plt.plot(fpr[i], tpr[i], color=color, lw=2,\n"," label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--', lw=2)\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_swin.png\")\n"," print(\"\\nROC curve plot saved as roc_curve.png\")\n","\n","\"\"\"Training and Evaluation with Early Stopping\"\"\"\n","def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n"," \"\"\"\n"," Trains the model with early stopping based on validation ROC AUC score.\n","\n"," Args:\n"," model (torch.nn.Module): The neural network model to train.\n"," train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n"," val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n"," criterion: The loss function.\n"," optimizer: The optimization algorithm.\n"," scheduler: The learning rate scheduler.\n"," num_epochs (int): The maximum number of epochs to train for.\n"," patience (int): Number of epochs to wait for improvement before stopping.\n"," \"\"\"\n"," device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n"," print(f\"Training on device: {device}\")\n","\n"," model.to(device)\n","\n"," best_roc_auc = 0.0\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = []\n"," best_labels = []\n","\n"," class_names = ['axion', 'cdm', 'no_sub']\n","\n"," for epoch in range(num_epochs):\n"," print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n","\n"," # --- Training Phase ---\n"," model.train()\n"," train_loss = 0.0\n"," train_correct = 0\n","\n"," for images, labels in train_loader:\n"," images, labels = images.to(device), labels.to(device)\n","\n"," optimizer.zero_grad()\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," scheduler.step()\n","\n"," train_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," train_correct += (predicted == labels).sum().item()\n","\n"," # --- Validation Phase ---\n"," model.eval()\n"," val_loss = 0.0\n"," val_correct = 0\n"," all_probs = []\n"," all_labels = []\n","\n"," with torch.no_grad():\n"," for images, labels in val_loader:\n"," images, labels = images.to(device), labels.to(device)\n"," outputs = model(images)\n"," loss = criterion(outputs, labels)\n","\n"," val_loss += loss.item() * images.size(0)\n"," _, predicted = torch.max(outputs.data, 1)\n"," val_correct += (predicted == labels).sum().item()\n","\n"," probs = torch.softmax(outputs, dim=1)\n"," all_probs.extend(probs.cpu().numpy())\n"," all_labels.extend(labels.cpu().numpy())\n","\n"," # --- Calculate Metrics ---\n"," train_loss = train_loss / len(train_loader.dataset)\n"," val_loss = val_loss / len(val_loader.dataset)\n"," train_accuracy = train_correct / len(train_loader.dataset)\n"," val_accuracy = val_correct / len(val_loader.dataset)\n","\n"," # Calculate multi-class ROC AUC score\n"," all_labels_np = np.array(all_labels)\n"," all_probs_np = np.array(all_probs)\n"," try:\n"," val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n"," except ValueError as e:\n"," print(f\"Could not calculate ROC AUC: {e}\")\n"," val_roc_auc = 0.0\n","\n"," # Epoch-level summary\n"," #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n"," #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n"," #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n","\n"," if val_roc_auc > best_roc_auc:\n"," best_roc_auc = val_roc_auc\n"," epochs_no_improve = 0\n"," best_model_wts = copy.deepcopy(model.state_dict())\n"," best_probs = all_probs\n"," best_labels = all_labels\n"," #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n"," print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n"," else:\n"," epochs_no_improve += 1\n"," print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n","\n"," if epochs_no_improve >= patience:\n"," print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n"," model.load_state_dict(best_model_wts)\n"," break\n","\n"," print(\"\\nTraining Complete!\")\n"," model.load_state_dict(best_model_wts)\n","\n"," # After the training loop, plot the ROC curve for the best model\n"," if best_probs and best_labels:\n"," plot_roc_curve(best_labels, best_probs, class_names)\n","\n"," return model, best_probs, best_labels"]},{"cell_type":"code","source":["#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')"],"metadata":{"id":"9QBIRCLEkikD"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-ZJepKUw_txF","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"44cf084f-d4e6-4899-c1bf-d322c7c89863","executionInfo":{"status":"ok","timestamp":1756364272381,"user_tz":300,"elapsed":0,"user":{"displayName":"Dhruv Srivastava","userId":"05383083715668215672"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["Optimizer: Adam\n","Learning Rate: 0.0001\n","Training on device: cuda\n","===== Epoch 1/2000 =====\n"]},{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n"," warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n"]},{"output_type":"stream","name":"stdout","text":["New best model saved with Val ROC AUC: 0.5687, Train Loss: 1.0999, Train Accuracy: 0.3443, Val Loss: 1.0993, Val Accuracy: 0.2978\n","===== Epoch 2/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5687. Train Loss: 1.0991, Train Accuracy: 0.3404, Val Loss: 1.0990, Val Accuracy: 0.3556\n","===== Epoch 3/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5687. Train Loss: 1.0998, Train Accuracy: 0.3341, Val Loss: 1.1006, Val Accuracy: 0.3244\n","===== Epoch 4/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3286, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 5/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3200, Val Loss: 1.1007, Val Accuracy: 0.2978\n","===== Epoch 6/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 7/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3459, Val Loss: 1.1009, Val Accuracy: 0.2800\n","===== Epoch 8/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3184, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 9/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5687. Train Loss: 1.0992, Train Accuracy: 0.3451, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 10/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5687. Train Loss: 1.0997, Train Accuracy: 0.3427, Val Loss: 1.1031, Val Accuracy: 0.2844\n","===== Epoch 11/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5687. Train Loss: 1.1001, Train Accuracy: 0.3106, Val Loss: 1.1020, Val Accuracy: 0.2844\n","===== Epoch 12/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1028, Val Accuracy: 0.2844\n","===== Epoch 13/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5687. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 14/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5687. Train Loss: 1.1000, Train Accuracy: 0.3420, Val Loss: 1.0998, Val Accuracy: 0.2844\n","===== Epoch 15/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5687. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3200\n","===== Epoch 16/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5687. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 17/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1021, Val Accuracy: 0.2844\n","===== Epoch 18/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.2933\n","===== Epoch 19/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5687. Train Loss: 1.0994, Train Accuracy: 0.3310, Val Loss: 1.1035, Val Accuracy: 0.2844\n","===== Epoch 20/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 21/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 22/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3341, Val Loss: 1.0986, Val Accuracy: 0.3200\n","===== Epoch 23/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5687. Train Loss: 1.0988, Train Accuracy: 0.3333, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 24/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1022, Val Accuracy: 0.2844\n","===== Epoch 25/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5687. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 26/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5687. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n","===== Epoch 27/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 28/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 29/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5687. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1020, Val Accuracy: 0.2844\n","===== Epoch 30/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5687. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 31/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 32/2000 =====\n","New best model saved with Val ROC AUC: 0.5766, Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 33/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 34/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 35/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 36/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 37/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 38/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 39/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 40/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 41/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 42/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 43/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 44/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 45/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 46/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 47/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 48/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 49/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 50/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 51/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 52/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 53/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 54/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 55/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 56/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 57/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 58/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 59/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 60/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 61/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 62/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3388, Val Loss: 1.1023, Val Accuracy: 0.2889\n","===== Epoch 63/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 64/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3310, Val Loss: 1.1023, Val Accuracy: 0.2889\n","===== Epoch 65/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 66/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1026, Val Accuracy: 0.2844\n","===== Epoch 67/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3239, Val Loss: 1.1003, Val Accuracy: 0.2933\n","===== Epoch 68/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 69/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 70/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 71/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.0992, Val Accuracy: 0.2978\n","===== Epoch 72/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3365, Val Loss: 1.1009, Val Accuracy: 0.2711\n","===== Epoch 73/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1027, Val Accuracy: 0.2756\n","===== Epoch 74/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 75/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1020, Val Accuracy: 0.2844\n","===== Epoch 76/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 77/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3388, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 78/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3467, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 79/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 80/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 81/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1021, Val Accuracy: 0.2844\n","===== Epoch 82/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 83/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3302, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 84/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5766. Train Loss: 1.0997, Train Accuracy: 0.3224, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 85/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 86/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 87/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3239, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 88/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 89/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3161, Val Loss: 1.1014, Val Accuracy: 0.2756\n","===== Epoch 90/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3325, Val Loss: 1.1025, Val Accuracy: 0.2844\n","===== Epoch 91/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1036, Val Accuracy: 0.2844\n","===== Epoch 92/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3294, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 93/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1025, Val Accuracy: 0.2844\n","===== Epoch 94/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5766. Train Loss: 1.0996, Train Accuracy: 0.3114, Val Loss: 1.1000, Val Accuracy: 0.3422\n","===== Epoch 95/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 96/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 97/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3318, Val Loss: 1.1021, Val Accuracy: 0.3600\n","===== Epoch 98/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5766. Train Loss: 1.1000, Train Accuracy: 0.3082, Val Loss: 1.0998, Val Accuracy: 0.3333\n","===== Epoch 99/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 100/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 101/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 102/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 103/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3090, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 104/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 105/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n","===== Epoch 106/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3459, Val Loss: 1.1024, Val Accuracy: 0.2844\n","===== Epoch 107/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 108/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3271, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 109/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3216, Val Loss: 1.0997, Val Accuracy: 0.2844\n","===== Epoch 110/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3420, Val Loss: 1.1021, Val Accuracy: 0.2844\n","===== Epoch 111/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3098, Val Loss: 1.1001, Val Accuracy: 0.3156\n","===== Epoch 112/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 113/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 114/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5766. Train Loss: 1.1001, Train Accuracy: 0.3090, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 115/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1025, Val Accuracy: 0.2844\n","===== Epoch 116/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3271, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 117/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 118/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1022, Val Accuracy: 0.2844\n","===== Epoch 119/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 120/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 121/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 122/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 123/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 124/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 125/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n","===== Epoch 126/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 127/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 128/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 129/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 130/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 131/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 132/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 133/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 134/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 135/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 136/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 137/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 138/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 139/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 140/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 141/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 142/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 143/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 144/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 145/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 146/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 147/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 148/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 149/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 150/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 151/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 152/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 153/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 154/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 155/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 156/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 157/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 158/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 159/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 160/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 161/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 162/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 163/2000 =====\n","No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 164/2000 =====\n","No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 165/2000 =====\n","No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 166/2000 =====\n","No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 167/2000 =====\n","No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 168/2000 =====\n","No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 169/2000 =====\n","No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3169, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 170/2000 =====\n","No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 171/2000 =====\n","No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 172/2000 =====\n","No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 173/2000 =====\n","No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 174/2000 =====\n","No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n","===== Epoch 175/2000 =====\n","No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 176/2000 =====\n","No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 177/2000 =====\n","No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1020, Val Accuracy: 0.2844\n","===== Epoch 178/2000 =====\n","No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1029, Val Accuracy: 0.2844\n","===== Epoch 179/2000 =====\n","No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.0996, Val Accuracy: 0.2844\n","===== Epoch 180/2000 =====\n","No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3373, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 181/2000 =====\n","No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 182/2000 =====\n","No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3161, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 183/2000 =====\n","No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 184/2000 =====\n","No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 185/2000 =====\n","No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 186/2000 =====\n","No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 187/2000 =====\n","No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3271, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 188/2000 =====\n","No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3443, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 189/2000 =====\n","No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 190/2000 =====\n","No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 191/2000 =====\n","No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 192/2000 =====\n","No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2800\n","===== Epoch 193/2000 =====\n","No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 194/2000 =====\n","No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 195/2000 =====\n","No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 196/2000 =====\n","No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3231, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 197/2000 =====\n","No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 198/2000 =====\n","No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 199/2000 =====\n","No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 200/2000 =====\n","No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 201/2000 =====\n","No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 202/2000 =====\n","No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 203/2000 =====\n","No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3302, Val Loss: 1.1012, Val Accuracy: 0.2889\n","===== Epoch 204/2000 =====\n","No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1023, Val Accuracy: 0.2844\n","===== Epoch 205/2000 =====\n","No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3263, Val Loss: 1.0994, Val Accuracy: 0.3156\n","===== Epoch 206/2000 =====\n","No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3365, Val Loss: 1.1008, Val Accuracy: 0.2978\n","===== Epoch 207/2000 =====\n","No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1034, Val Accuracy: 0.2844\n","===== Epoch 208/2000 =====\n","No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.3467\n","===== Epoch 209/2000 =====\n","No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1003, Val Accuracy: 0.3111\n","===== Epoch 210/2000 =====\n","No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 211/2000 =====\n","No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 212/2000 =====\n","No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 213/2000 =====\n","No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 214/2000 =====\n","No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2800\n","===== Epoch 215/2000 =====\n","No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 216/2000 =====\n","No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 217/2000 =====\n","No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 218/2000 =====\n","No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 219/2000 =====\n","No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1001, Val Accuracy: 0.2933\n","===== Epoch 220/2000 =====\n","No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 221/2000 =====\n","No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 222/2000 =====\n","No improvement in Val ROC AUC for 190 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 223/2000 =====\n","No improvement in Val ROC AUC for 191 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 224/2000 =====\n","No improvement in Val ROC AUC for 192 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 225/2000 =====\n","No improvement in Val ROC AUC for 193 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 226/2000 =====\n","No improvement in Val ROC AUC for 194 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n","===== Epoch 227/2000 =====\n","No improvement in Val ROC AUC for 195 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 228/2000 =====\n","No improvement in Val ROC AUC for 196 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 229/2000 =====\n","No improvement in Val ROC AUC for 197 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 230/2000 =====\n","No improvement in Val ROC AUC for 198 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 231/2000 =====\n","No improvement in Val ROC AUC for 199 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 232/2000 =====\n","No improvement in Val ROC AUC for 200 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 233/2000 =====\n","No improvement in Val ROC AUC for 201 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 234/2000 =====\n","No improvement in Val ROC AUC for 202 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 235/2000 =====\n","No improvement in Val ROC AUC for 203 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 236/2000 =====\n","No improvement in Val ROC AUC for 204 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 237/2000 =====\n","No improvement in Val ROC AUC for 205 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 238/2000 =====\n","No improvement in Val ROC AUC for 206 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 239/2000 =====\n","No improvement in Val ROC AUC for 207 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 240/2000 =====\n","No improvement in Val ROC AUC for 208 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 241/2000 =====\n","No improvement in Val ROC AUC for 209 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 242/2000 =====\n","No improvement in Val ROC AUC for 210 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 243/2000 =====\n","No improvement in Val ROC AUC for 211 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 244/2000 =====\n","No improvement in Val ROC AUC for 212 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 245/2000 =====\n","No improvement in Val ROC AUC for 213 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 246/2000 =====\n","No improvement in Val ROC AUC for 214 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 247/2000 =====\n","No improvement in Val ROC AUC for 215 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 248/2000 =====\n","No improvement in Val ROC AUC for 216 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 249/2000 =====\n","No improvement in Val ROC AUC for 217 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 250/2000 =====\n","No improvement in Val ROC AUC for 218 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 251/2000 =====\n","No improvement in Val ROC AUC for 219 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 252/2000 =====\n","No improvement in Val ROC AUC for 220 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 253/2000 =====\n","No improvement in Val ROC AUC for 221 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 254/2000 =====\n","No improvement in Val ROC AUC for 222 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 255/2000 =====\n","No improvement in Val ROC AUC for 223 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 256/2000 =====\n","No improvement in Val ROC AUC for 224 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 257/2000 =====\n","No improvement in Val ROC AUC for 225 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 258/2000 =====\n","No improvement in Val ROC AUC for 226 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 259/2000 =====\n","No improvement in Val ROC AUC for 227 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 260/2000 =====\n","No improvement in Val ROC AUC for 228 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n","===== Epoch 261/2000 =====\n","No improvement in Val ROC AUC for 229 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 262/2000 =====\n","No improvement in Val ROC AUC for 230 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 263/2000 =====\n","No improvement in Val ROC AUC for 231 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 264/2000 =====\n","No improvement in Val ROC AUC for 232 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 265/2000 =====\n","No improvement in Val ROC AUC for 233 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 266/2000 =====\n","No improvement in Val ROC AUC for 234 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 267/2000 =====\n","No improvement in Val ROC AUC for 235 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 268/2000 =====\n","No improvement in Val ROC AUC for 236 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 269/2000 =====\n","No improvement in Val ROC AUC for 237 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 270/2000 =====\n","No improvement in Val ROC AUC for 238 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 271/2000 =====\n","No improvement in Val ROC AUC for 239 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 272/2000 =====\n","No improvement in Val ROC AUC for 240 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 273/2000 =====\n","No improvement in Val ROC AUC for 241 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 274/2000 =====\n","No improvement in Val ROC AUC for 242 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 275/2000 =====\n","No improvement in Val ROC AUC for 243 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 276/2000 =====\n","No improvement in Val ROC AUC for 244 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 277/2000 =====\n","No improvement in Val ROC AUC for 245 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3365, Val Loss: 1.1006, Val Accuracy: 0.3067\n","===== Epoch 278/2000 =====\n","No improvement in Val ROC AUC for 246 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3341, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 279/2000 =====\n","No improvement in Val ROC AUC for 247 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 280/2000 =====\n","No improvement in Val ROC AUC for 248 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 281/2000 =====\n","No improvement in Val ROC AUC for 249 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 282/2000 =====\n","No improvement in Val ROC AUC for 250 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 283/2000 =====\n","No improvement in Val ROC AUC for 251 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 284/2000 =====\n","No improvement in Val ROC AUC for 252 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 285/2000 =====\n","No improvement in Val ROC AUC for 253 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 286/2000 =====\n","No improvement in Val ROC AUC for 254 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1024, Val Accuracy: 0.2844\n","===== Epoch 287/2000 =====\n","No improvement in Val ROC AUC for 255 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 288/2000 =====\n","No improvement in Val ROC AUC for 256 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 289/2000 =====\n","No improvement in Val ROC AUC for 257 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 290/2000 =====\n","No improvement in Val ROC AUC for 258 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 291/2000 =====\n","No improvement in Val ROC AUC for 259 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 292/2000 =====\n","No improvement in Val ROC AUC for 260 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 293/2000 =====\n","No improvement in Val ROC AUC for 261 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1000, Val Accuracy: 0.2844\n","===== Epoch 294/2000 =====\n","No improvement in Val ROC AUC for 262 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 295/2000 =====\n","No improvement in Val ROC AUC for 263 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 296/2000 =====\n","No improvement in Val ROC AUC for 264 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3396, Val Loss: 1.0998, Val Accuracy: 0.3111\n","===== Epoch 297/2000 =====\n","No improvement in Val ROC AUC for 265 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3443, Val Loss: 1.1021, Val Accuracy: 0.2844\n","===== Epoch 298/2000 =====\n","No improvement in Val ROC AUC for 266 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 299/2000 =====\n","No improvement in Val ROC AUC for 267 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2889\n","===== Epoch 300/2000 =====\n","No improvement in Val ROC AUC for 268 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3412, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 301/2000 =====\n","No improvement in Val ROC AUC for 269 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 302/2000 =====\n","No improvement in Val ROC AUC for 270 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 303/2000 =====\n","No improvement in Val ROC AUC for 271 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2889\n","===== Epoch 304/2000 =====\n","No improvement in Val ROC AUC for 272 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 305/2000 =====\n","No improvement in Val ROC AUC for 273 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 306/2000 =====\n","No improvement in Val ROC AUC for 274 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 307/2000 =====\n","No improvement in Val ROC AUC for 275 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3333, Val Loss: 1.1007, Val Accuracy: 0.2978\n","===== Epoch 308/2000 =====\n","No improvement in Val ROC AUC for 276 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3302, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 309/2000 =====\n","No improvement in Val ROC AUC for 277 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 310/2000 =====\n","No improvement in Val ROC AUC for 278 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 311/2000 =====\n","No improvement in Val ROC AUC for 279 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n","===== Epoch 312/2000 =====\n","No improvement in Val ROC AUC for 280 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2800\n","===== Epoch 313/2000 =====\n","No improvement in Val ROC AUC for 281 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 314/2000 =====\n","No improvement in Val ROC AUC for 282 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 315/2000 =====\n","No improvement in Val ROC AUC for 283 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 316/2000 =====\n","No improvement in Val ROC AUC for 284 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 317/2000 =====\n","No improvement in Val ROC AUC for 285 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 318/2000 =====\n","No improvement in Val ROC AUC for 286 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 319/2000 =====\n","No improvement in Val ROC AUC for 287 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3325, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 320/2000 =====\n","No improvement in Val ROC AUC for 288 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2889\n","===== Epoch 321/2000 =====\n","No improvement in Val ROC AUC for 289 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2933\n","===== Epoch 322/2000 =====\n","No improvement in Val ROC AUC for 290 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 323/2000 =====\n","No improvement in Val ROC AUC for 291 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 324/2000 =====\n","No improvement in Val ROC AUC for 292 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 325/2000 =====\n","No improvement in Val ROC AUC for 293 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n","===== Epoch 326/2000 =====\n","No improvement in Val ROC AUC for 294 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 327/2000 =====\n","No improvement in Val ROC AUC for 295 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1007, Val Accuracy: 0.2844\n","===== Epoch 328/2000 =====\n","No improvement in Val ROC AUC for 296 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 329/2000 =====\n","No improvement in Val ROC AUC for 297 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3365, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 330/2000 =====\n","No improvement in Val ROC AUC for 298 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 331/2000 =====\n","No improvement in Val ROC AUC for 299 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2800\n","===== Epoch 332/2000 =====\n","No improvement in Val ROC AUC for 300 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1014, Val Accuracy: 0.2756\n","===== Epoch 333/2000 =====\n","No improvement in Val ROC AUC for 301 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2800\n","===== Epoch 334/2000 =====\n","No improvement in Val ROC AUC for 302 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2800\n","===== Epoch 335/2000 =====\n","No improvement in Val ROC AUC for 303 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2800\n","===== Epoch 336/2000 =====\n","No improvement in Val ROC AUC for 304 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3443, Val Loss: 1.1001, Val Accuracy: 0.2889\n","===== Epoch 337/2000 =====\n","No improvement in Val ROC AUC for 305 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3373, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 338/2000 =====\n","No improvement in Val ROC AUC for 306 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2800\n","===== Epoch 339/2000 =====\n","No improvement in Val ROC AUC for 307 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3388, Val Loss: 1.1011, Val Accuracy: 0.2800\n","===== Epoch 340/2000 =====\n","No improvement in Val ROC AUC for 308 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n","===== Epoch 341/2000 =====\n","No improvement in Val ROC AUC for 309 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 342/2000 =====\n","No improvement in Val ROC AUC for 310 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3459, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 343/2000 =====\n","No improvement in Val ROC AUC for 311 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2800\n","===== Epoch 344/2000 =====\n","No improvement in Val ROC AUC for 312 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n","===== Epoch 345/2000 =====\n","No improvement in Val ROC AUC for 313 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 346/2000 =====\n","No improvement in Val ROC AUC for 314 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1016, Val Accuracy: 0.2800\n","===== Epoch 347/2000 =====\n","No improvement in Val ROC AUC for 315 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n","===== Epoch 348/2000 =====\n","No improvement in Val ROC AUC for 316 epoch(s). Best is 0.5766. Train Loss: 1.0978, Train Accuracy: 0.3404, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 349/2000 =====\n","No improvement in Val ROC AUC for 317 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1012, Val Accuracy: 0.2889\n","===== Epoch 350/2000 =====\n","No improvement in Val ROC AUC for 318 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2889\n","===== Epoch 351/2000 =====\n","No improvement in Val ROC AUC for 319 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n","===== Epoch 352/2000 =====\n","No improvement in Val ROC AUC for 320 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n","===== Epoch 353/2000 =====\n","No improvement in Val ROC AUC for 321 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 354/2000 =====\n","No improvement in Val ROC AUC for 322 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 355/2000 =====\n","No improvement in Val ROC AUC for 323 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1016, Val Accuracy: 0.2800\n","===== Epoch 356/2000 =====\n","No improvement in Val ROC AUC for 324 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 357/2000 =====\n","No improvement in Val ROC AUC for 325 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1013, Val Accuracy: 0.2844\n","===== Epoch 358/2000 =====\n","No improvement in Val ROC AUC for 326 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2889\n","===== Epoch 359/2000 =====\n","No improvement in Val ROC AUC for 327 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 360/2000 =====\n","No improvement in Val ROC AUC for 328 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3396, Val Loss: 1.1012, Val Accuracy: 0.2844\n","===== Epoch 361/2000 =====\n","No improvement in Val ROC AUC for 329 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2756\n","===== Epoch 362/2000 =====\n","No improvement in Val ROC AUC for 330 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2800\n","===== Epoch 363/2000 =====\n","No improvement in Val ROC AUC for 331 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 364/2000 =====\n","No improvement in Val ROC AUC for 332 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2800\n","===== Epoch 365/2000 =====\n","No improvement in Val ROC AUC for 333 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2889\n","===== Epoch 366/2000 =====\n","No improvement in Val ROC AUC for 334 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.3022\n","===== Epoch 367/2000 =====\n","No improvement in Val ROC AUC for 335 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2933\n","===== Epoch 368/2000 =====\n","No improvement in Val ROC AUC for 336 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2889\n","===== Epoch 369/2000 =====\n","No improvement in Val ROC AUC for 337 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2800\n","===== Epoch 370/2000 =====\n","No improvement in Val ROC AUC for 338 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 371/2000 =====\n","No improvement in Val ROC AUC for 339 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n","===== Epoch 372/2000 =====\n","No improvement in Val ROC AUC for 340 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1017, Val Accuracy: 0.2756\n","===== Epoch 373/2000 =====\n","No improvement in Val ROC AUC for 341 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3396, Val Loss: 1.1015, Val Accuracy: 0.2978\n","===== Epoch 374/2000 =====\n","No improvement in Val ROC AUC for 342 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.1022, Val Accuracy: 0.2844\n","===== Epoch 375/2000 =====\n","No improvement in Val ROC AUC for 343 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1014, Val Accuracy: 0.2844\n","===== Epoch 376/2000 =====\n","No improvement in Val ROC AUC for 344 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3396, Val Loss: 1.0995, Val Accuracy: 0.3244\n","===== Epoch 377/2000 =====\n","No improvement in Val ROC AUC for 345 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3475, Val Loss: 1.1006, Val Accuracy: 0.2933\n","===== Epoch 378/2000 =====\n","No improvement in Val ROC AUC for 346 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1020, Val Accuracy: 0.2889\n","===== Epoch 379/2000 =====\n","No improvement in Val ROC AUC for 347 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3388, Val Loss: 1.1013, Val Accuracy: 0.2933\n","===== Epoch 380/2000 =====\n","No improvement in Val ROC AUC for 348 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1024, Val Accuracy: 0.2933\n","===== Epoch 381/2000 =====\n","No improvement in Val ROC AUC for 349 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.3067\n","===== Epoch 382/2000 =====\n","No improvement in Val ROC AUC for 350 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3467, Val Loss: 1.1008, Val Accuracy: 0.2844\n","===== Epoch 383/2000 =====\n","No improvement in Val ROC AUC for 351 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 384/2000 =====\n","No improvement in Val ROC AUC for 352 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1013, Val Accuracy: 0.2800\n","===== Epoch 385/2000 =====\n","No improvement in Val ROC AUC for 353 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n","===== Epoch 386/2000 =====\n","No improvement in Val ROC AUC for 354 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1009, Val Accuracy: 0.2889\n","===== Epoch 387/2000 =====\n","No improvement in Val ROC AUC for 355 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3333, Val Loss: 1.1000, Val Accuracy: 0.2933\n","===== Epoch 388/2000 =====\n","No improvement in Val ROC AUC for 356 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2800\n","===== Epoch 389/2000 =====\n","No improvement in Val ROC AUC for 357 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1027, Val Accuracy: 0.2800\n","===== Epoch 390/2000 =====\n","No improvement in Val ROC AUC for 358 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.3111\n","===== Epoch 391/2000 =====\n","No improvement in Val ROC AUC for 359 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.0998, Val Accuracy: 0.3111\n","===== Epoch 392/2000 =====\n","No improvement in Val ROC AUC for 360 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3459, Val Loss: 1.0999, Val Accuracy: 0.3111\n","===== Epoch 393/2000 =====\n","No improvement in Val ROC AUC for 361 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3498, Val Loss: 1.1023, Val Accuracy: 0.3289\n","===== Epoch 394/2000 =====\n","No improvement in Val ROC AUC for 362 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3388, Val Loss: 1.0997, Val Accuracy: 0.3244\n","===== Epoch 395/2000 =====\n","No improvement in Val ROC AUC for 363 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3482, Val Loss: 1.0996, Val Accuracy: 0.3111\n","===== Epoch 396/2000 =====\n","No improvement in Val ROC AUC for 364 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3545, Val Loss: 1.0965, Val Accuracy: 0.3422\n","===== Epoch 397/2000 =====\n","No improvement in Val ROC AUC for 365 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3111\n","===== Epoch 398/2000 =====\n","No improvement in Val ROC AUC for 366 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.3289\n","===== Epoch 399/2000 =====\n","No improvement in Val ROC AUC for 367 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3373, Val Loss: 1.1011, Val Accuracy: 0.2844\n","===== Epoch 400/2000 =====\n","No improvement in Val ROC AUC for 368 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3569, Val Loss: 1.0972, Val Accuracy: 0.3644\n","===== Epoch 401/2000 =====\n","No improvement in Val ROC AUC for 369 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1047, Val Accuracy: 0.3156\n","===== Epoch 402/2000 =====\n","No improvement in Val ROC AUC for 370 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3655, Val Loss: 1.0986, Val Accuracy: 0.3467\n","===== Epoch 403/2000 =====\n","No improvement in Val ROC AUC for 371 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3310, Val Loss: 1.0999, Val Accuracy: 0.3200\n","===== Epoch 404/2000 =====\n","No improvement in Val ROC AUC for 372 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3333, Val Loss: 1.1005, Val Accuracy: 0.3022\n","===== Epoch 405/2000 =====\n","No improvement in Val ROC AUC for 373 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.0969, Val Accuracy: 0.3644\n","===== Epoch 406/2000 =====\n","No improvement in Val ROC AUC for 374 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3341, Val Loss: 1.1013, Val Accuracy: 0.3511\n","===== Epoch 407/2000 =====\n","No improvement in Val ROC AUC for 375 epoch(s). Best is 0.5766. Train Loss: 1.0971, Train Accuracy: 0.3639, Val Loss: 1.1021, Val Accuracy: 0.3022\n","===== Epoch 408/2000 =====\n","No improvement in Val ROC AUC for 376 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1032, Val Accuracy: 0.2889\n","===== Epoch 409/2000 =====\n","No improvement in Val ROC AUC for 377 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.0980, Val Accuracy: 0.3378\n","===== Epoch 410/2000 =====\n","No improvement in Val ROC AUC for 378 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3427, Val Loss: 1.1015, Val Accuracy: 0.3244\n","===== Epoch 411/2000 =====\n","No improvement in Val ROC AUC for 379 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3435, Val Loss: 1.0985, Val Accuracy: 0.3289\n","===== Epoch 412/2000 =====\n","No improvement in Val ROC AUC for 380 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.0989, Val Accuracy: 0.3156\n","===== Epoch 413/2000 =====\n","No improvement in Val ROC AUC for 381 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3451, Val Loss: 1.0973, Val Accuracy: 0.3467\n","===== Epoch 414/2000 =====\n","No improvement in Val ROC AUC for 382 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3467, Val Loss: 1.1013, Val Accuracy: 0.3200\n","===== Epoch 415/2000 =====\n","No improvement in Val ROC AUC for 383 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3592, Val Loss: 1.1037, Val Accuracy: 0.3067\n","===== Epoch 416/2000 =====\n","No improvement in Val ROC AUC for 384 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3373, Val Loss: 1.0974, Val Accuracy: 0.3289\n","===== Epoch 417/2000 =====\n","No improvement in Val ROC AUC for 385 epoch(s). Best is 0.5766. Train Loss: 1.0978, Train Accuracy: 0.3459, Val Loss: 1.1025, Val Accuracy: 0.3156\n","===== Epoch 418/2000 =====\n","No improvement in Val ROC AUC for 386 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3333, Val Loss: 1.0994, Val Accuracy: 0.3156\n","===== Epoch 419/2000 =====\n","No improvement in Val ROC AUC for 387 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1034, Val Accuracy: 0.2933\n","===== Epoch 420/2000 =====\n","No improvement in Val ROC AUC for 388 epoch(s). Best is 0.5766. Train Loss: 1.0973, Train Accuracy: 0.3451, Val Loss: 1.1024, Val Accuracy: 0.3200\n","===== Epoch 421/2000 =====\n","No improvement in Val ROC AUC for 389 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3576, Val Loss: 1.0991, Val Accuracy: 0.3067\n","===== Epoch 422/2000 =====\n","No improvement in Val ROC AUC for 390 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3545, Val Loss: 1.0983, Val Accuracy: 0.3511\n","===== Epoch 423/2000 =====\n","No improvement in Val ROC AUC for 391 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3511\n","===== Epoch 424/2000 =====\n","No improvement in Val ROC AUC for 392 epoch(s). Best is 0.5766. Train Loss: 1.0968, Train Accuracy: 0.3490, Val Loss: 1.1002, Val Accuracy: 0.3244\n","===== Epoch 425/2000 =====\n","No improvement in Val ROC AUC for 393 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.0985, Val Accuracy: 0.3200\n","===== Epoch 426/2000 =====\n","No improvement in Val ROC AUC for 394 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3482, Val Loss: 1.0981, Val Accuracy: 0.3200\n","===== Epoch 427/2000 =====\n","No improvement in Val ROC AUC for 395 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3443, Val Loss: 1.0958, Val Accuracy: 0.3244\n","===== Epoch 428/2000 =====\n","No improvement in Val ROC AUC for 396 epoch(s). Best is 0.5766. Train Loss: 1.0963, Train Accuracy: 0.3553, Val Loss: 1.1000, Val Accuracy: 0.3111\n","===== Epoch 429/2000 =====\n","No improvement in Val ROC AUC for 397 epoch(s). Best is 0.5766. Train Loss: 1.0959, Train Accuracy: 0.3671, Val Loss: 1.1031, Val Accuracy: 0.3244\n","===== Epoch 430/2000 =====\n","No improvement in Val ROC AUC for 398 epoch(s). Best is 0.5766. Train Loss: 1.0957, Train Accuracy: 0.3600, Val Loss: 1.0984, Val Accuracy: 0.3244\n","===== Epoch 431/2000 =====\n","No improvement in Val ROC AUC for 399 epoch(s). Best is 0.5766. Train Loss: 1.0960, Train Accuracy: 0.3576, Val Loss: 1.1011, Val Accuracy: 0.3244\n","===== Epoch 432/2000 =====\n","No improvement in Val ROC AUC for 400 epoch(s). Best is 0.5766. Train Loss: 1.0973, Train Accuracy: 0.3475, Val Loss: 1.0997, Val Accuracy: 0.3200\n","===== Epoch 433/2000 =====\n","No improvement in Val ROC AUC for 401 epoch(s). Best is 0.5766. Train Loss: 1.0960, Train Accuracy: 0.3435, Val Loss: 1.0980, Val Accuracy: 0.3378\n","===== Epoch 434/2000 =====\n","No improvement in Val ROC AUC for 402 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3561, Val Loss: 1.1022, Val Accuracy: 0.3022\n","===== Epoch 435/2000 =====\n","No improvement in Val ROC AUC for 403 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3271, Val Loss: 1.1015, Val Accuracy: 0.3467\n","===== Epoch 436/2000 =====\n","No improvement in Val ROC AUC for 404 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3427, Val Loss: 1.0988, Val Accuracy: 0.3111\n","===== Epoch 437/2000 =====\n","No improvement in Val ROC AUC for 405 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3373, Val Loss: 1.0982, Val Accuracy: 0.3289\n","===== Epoch 438/2000 =====\n","No improvement in Val ROC AUC for 406 epoch(s). Best is 0.5766. Train Loss: 1.0965, Train Accuracy: 0.3514, Val Loss: 1.0989, Val Accuracy: 0.3467\n","===== Epoch 439/2000 =====\n","New best model saved with Val ROC AUC: 0.5831, Train Loss: 1.0967, Train Accuracy: 0.3388, Val Loss: 1.0929, Val Accuracy: 0.3867\n","===== Epoch 440/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3263, Val Loss: 1.1007, Val Accuracy: 0.3111\n","===== Epoch 441/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3624, Val Loss: 1.0990, Val Accuracy: 0.3111\n","===== Epoch 442/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5831. Train Loss: 1.0959, Train Accuracy: 0.3639, Val Loss: 1.1013, Val Accuracy: 0.3156\n","===== Epoch 443/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3569, Val Loss: 1.1033, Val Accuracy: 0.3067\n","===== Epoch 444/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3451, Val Loss: 1.0989, Val Accuracy: 0.3422\n","===== Epoch 445/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5831. Train Loss: 1.0956, Train Accuracy: 0.3616, Val Loss: 1.1015, Val Accuracy: 0.2844\n","===== Epoch 446/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5831. Train Loss: 1.0960, Train Accuracy: 0.3522, Val Loss: 1.1002, Val Accuracy: 0.3111\n","===== Epoch 447/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3459, Val Loss: 1.1016, Val Accuracy: 0.2933\n","===== Epoch 448/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3569, Val Loss: 1.1037, Val Accuracy: 0.2711\n","===== Epoch 449/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3506, Val Loss: 1.0972, Val Accuracy: 0.3244\n","===== Epoch 450/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3435, Val Loss: 1.0972, Val Accuracy: 0.3556\n","===== Epoch 451/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3694, Val Loss: 1.1022, Val Accuracy: 0.2978\n","===== Epoch 452/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3529, Val Loss: 1.1036, Val Accuracy: 0.2756\n","===== Epoch 453/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3357, Val Loss: 1.1027, Val Accuracy: 0.2978\n","===== Epoch 454/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3388, Val Loss: 1.0998, Val Accuracy: 0.3244\n","===== Epoch 455/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5831. Train Loss: 1.0972, Train Accuracy: 0.3475, Val Loss: 1.1018, Val Accuracy: 0.2978\n","===== Epoch 456/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3592, Val Loss: 1.0998, Val Accuracy: 0.3378\n","===== Epoch 457/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3686, Val Loss: 1.1005, Val Accuracy: 0.3067\n","===== Epoch 458/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3639, Val Loss: 1.1010, Val Accuracy: 0.3200\n","===== Epoch 459/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3475, Val Loss: 1.0976, Val Accuracy: 0.3422\n","===== Epoch 460/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3545, Val Loss: 1.0949, Val Accuracy: 0.3689\n","===== Epoch 461/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5831. Train Loss: 1.0974, Train Accuracy: 0.3459, Val Loss: 1.1003, Val Accuracy: 0.3200\n","===== Epoch 462/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3420, Val Loss: 1.1024, Val Accuracy: 0.3111\n","===== Epoch 463/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3459, Val Loss: 1.1047, Val Accuracy: 0.2489\n","===== Epoch 464/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1003, Val Accuracy: 0.3111\n","===== Epoch 465/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3522, Val Loss: 1.0987, Val Accuracy: 0.3200\n","===== Epoch 466/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3451, Val Loss: 1.0990, Val Accuracy: 0.3333\n","===== Epoch 467/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3490, Val Loss: 1.0999, Val Accuracy: 0.3200\n","===== Epoch 468/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3600, Val Loss: 1.0968, Val Accuracy: 0.3378\n","===== Epoch 469/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3569, Val Loss: 1.1012, Val Accuracy: 0.3244\n","===== Epoch 470/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3475, Val Loss: 1.0987, Val Accuracy: 0.3244\n","===== Epoch 471/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3537, Val Loss: 1.1021, Val Accuracy: 0.2978\n","===== Epoch 472/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5831. Train Loss: 1.0972, Train Accuracy: 0.3459, Val Loss: 1.1012, Val Accuracy: 0.2800\n","===== Epoch 473/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3592, Val Loss: 1.1024, Val Accuracy: 0.3156\n","===== Epoch 474/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3318, Val Loss: 1.0980, Val Accuracy: 0.3244\n","===== Epoch 475/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3678, Val Loss: 1.0997, Val Accuracy: 0.3556\n","===== Epoch 476/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3420, Val Loss: 1.0982, Val Accuracy: 0.3378\n","===== Epoch 477/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3514, Val Loss: 1.1067, Val Accuracy: 0.2978\n","===== Epoch 478/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5831. Train Loss: 1.0992, Train Accuracy: 0.3427, Val Loss: 1.0960, Val Accuracy: 0.3511\n","===== Epoch 479/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0969, Val Accuracy: 0.3422\n","===== Epoch 480/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3655, Val Loss: 1.1005, Val Accuracy: 0.3111\n","===== Epoch 481/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3522, Val Loss: 1.0986, Val Accuracy: 0.3244\n","===== Epoch 482/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5831. Train Loss: 1.0969, Train Accuracy: 0.3443, Val Loss: 1.0968, Val Accuracy: 0.3556\n","===== Epoch 483/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3498, Val Loss: 1.1013, Val Accuracy: 0.3067\n","===== Epoch 484/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3459, Val Loss: 1.0989, Val Accuracy: 0.3156\n","===== Epoch 485/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5831. Train Loss: 1.0981, Train Accuracy: 0.3584, Val Loss: 1.0984, Val Accuracy: 0.3289\n","===== Epoch 486/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3435, Val Loss: 1.0969, Val Accuracy: 0.3600\n","===== Epoch 487/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.1027, Val Accuracy: 0.2978\n","===== Epoch 488/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3694, Val Loss: 1.0967, Val Accuracy: 0.3378\n","===== Epoch 489/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3443, Val Loss: 1.1023, Val Accuracy: 0.3244\n","===== Epoch 490/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3655, Val Loss: 1.1013, Val Accuracy: 0.3022\n","===== Epoch 491/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3537, Val Loss: 1.1038, Val Accuracy: 0.3067\n","===== Epoch 492/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3467, Val Loss: 1.1032, Val Accuracy: 0.2978\n","===== Epoch 493/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3498, Val Loss: 1.0972, Val Accuracy: 0.3644\n","===== Epoch 494/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3522, Val Loss: 1.0978, Val Accuracy: 0.3644\n","===== Epoch 495/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3576, Val Loss: 1.0952, Val Accuracy: 0.3378\n","===== Epoch 496/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5831. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.0984, Val Accuracy: 0.3600\n","===== Epoch 497/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3616, Val Loss: 1.1029, Val Accuracy: 0.2978\n","===== Epoch 498/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3608, Val Loss: 1.1000, Val Accuracy: 0.3378\n","===== Epoch 499/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3592, Val Loss: 1.1045, Val Accuracy: 0.2889\n","===== Epoch 500/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5831. Train Loss: 1.0969, Train Accuracy: 0.3475, Val Loss: 1.0999, Val Accuracy: 0.3067\n","===== Epoch 501/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3537, Val Loss: 1.0999, Val Accuracy: 0.3378\n","===== Epoch 502/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3663, Val Loss: 1.0988, Val Accuracy: 0.3556\n","===== Epoch 503/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3624, Val Loss: 1.0960, Val Accuracy: 0.3511\n","===== Epoch 504/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.0915, Val Accuracy: 0.3644\n","===== Epoch 505/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3475, Val Loss: 1.0949, Val Accuracy: 0.3911\n","===== Epoch 506/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3702, Val Loss: 1.1076, Val Accuracy: 0.2889\n","===== Epoch 507/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0958, Val Accuracy: 0.3822\n","===== Epoch 508/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3749, Val Loss: 1.0987, Val Accuracy: 0.3333\n","===== Epoch 509/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5831. Train Loss: 1.0964, Train Accuracy: 0.3545, Val Loss: 1.0976, Val Accuracy: 0.3689\n","===== Epoch 510/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5831. Train Loss: 1.0960, Train Accuracy: 0.3576, Val Loss: 1.0926, Val Accuracy: 0.3822\n","===== Epoch 511/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3490, Val Loss: 1.1039, Val Accuracy: 0.3156\n","===== Epoch 512/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5831. Train Loss: 1.0942, Train Accuracy: 0.3671, Val Loss: 1.1010, Val Accuracy: 0.3289\n","===== Epoch 513/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3663, Val Loss: 1.0971, Val Accuracy: 0.3867\n","===== Epoch 514/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5831. Train Loss: 1.0978, Train Accuracy: 0.3412, Val Loss: 1.0997, Val Accuracy: 0.3511\n","===== Epoch 515/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3482, Val Loss: 1.1020, Val Accuracy: 0.3244\n","===== Epoch 516/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3584, Val Loss: 1.1025, Val Accuracy: 0.3067\n","===== Epoch 517/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3678, Val Loss: 1.0940, Val Accuracy: 0.3822\n","===== Epoch 518/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3694, Val Loss: 1.1042, Val Accuracy: 0.3200\n","===== Epoch 519/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3561, Val Loss: 1.1022, Val Accuracy: 0.3200\n","===== Epoch 520/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3498, Val Loss: 1.0998, Val Accuracy: 0.3111\n","===== Epoch 521/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3529, Val Loss: 1.1022, Val Accuracy: 0.3111\n","===== Epoch 522/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3608, Val Loss: 1.0969, Val Accuracy: 0.3422\n","===== Epoch 523/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3514, Val Loss: 1.0972, Val Accuracy: 0.3689\n","===== Epoch 524/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3600, Val Loss: 1.0992, Val Accuracy: 0.3289\n","===== Epoch 525/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3741, Val Loss: 1.0886, Val Accuracy: 0.3778\n","===== Epoch 526/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5831. Train Loss: 1.0933, Train Accuracy: 0.3741, Val Loss: 1.0993, Val Accuracy: 0.3378\n","===== Epoch 527/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5831. Train Loss: 1.0918, Train Accuracy: 0.3859, Val Loss: 1.0943, Val Accuracy: 0.3733\n","===== Epoch 528/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3482, Val Loss: 1.0983, Val Accuracy: 0.3289\n","===== Epoch 529/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5831. Train Loss: 1.0957, Train Accuracy: 0.3694, Val Loss: 1.0921, Val Accuracy: 0.3911\n","===== Epoch 530/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5831. Train Loss: 1.0938, Train Accuracy: 0.3647, Val Loss: 1.0990, Val Accuracy: 0.3156\n","===== Epoch 531/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3529, Val Loss: 1.0912, Val Accuracy: 0.3867\n","===== Epoch 532/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5831. Train Loss: 1.0935, Train Accuracy: 0.3780, Val Loss: 1.0933, Val Accuracy: 0.3911\n","===== Epoch 533/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5831. Train Loss: 1.0919, Train Accuracy: 0.3671, Val Loss: 1.0983, Val Accuracy: 0.3511\n","===== Epoch 534/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5831. Train Loss: 1.0941, Train Accuracy: 0.3631, Val Loss: 1.1028, Val Accuracy: 0.3244\n","===== Epoch 535/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5831. Train Loss: 1.0915, Train Accuracy: 0.3780, Val Loss: 1.0983, Val Accuracy: 0.3511\n","===== Epoch 536/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5831. Train Loss: 1.0926, Train Accuracy: 0.3576, Val Loss: 1.0944, Val Accuracy: 0.3600\n","===== Epoch 537/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3686, Val Loss: 1.1026, Val Accuracy: 0.3244\n","===== Epoch 538/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3702, Val Loss: 1.1035, Val Accuracy: 0.3422\n","===== Epoch 539/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3765, Val Loss: 1.1020, Val Accuracy: 0.3333\n","===== Epoch 540/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5831. Train Loss: 1.0920, Train Accuracy: 0.3788, Val Loss: 1.0983, Val Accuracy: 0.3244\n","===== Epoch 541/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5831. Train Loss: 1.0932, Train Accuracy: 0.3710, Val Loss: 1.0950, Val Accuracy: 0.3244\n","===== Epoch 542/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5831. Train Loss: 1.0928, Train Accuracy: 0.3647, Val Loss: 1.0911, Val Accuracy: 0.3689\n","===== Epoch 543/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5831. Train Loss: 1.0910, Train Accuracy: 0.3702, Val Loss: 1.0989, Val Accuracy: 0.3156\n","===== Epoch 544/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3451, Val Loss: 1.0965, Val Accuracy: 0.3333\n","===== Epoch 545/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5831. Train Loss: 1.0908, Train Accuracy: 0.3718, Val Loss: 1.1001, Val Accuracy: 0.3511\n","===== Epoch 546/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3663, Val Loss: 1.0993, Val Accuracy: 0.3289\n","===== Epoch 547/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5831. Train Loss: 1.0920, Train Accuracy: 0.3812, Val Loss: 1.0987, Val Accuracy: 0.3467\n","===== Epoch 548/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3655, Val Loss: 1.0985, Val Accuracy: 0.3467\n","===== Epoch 549/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5831. Train Loss: 1.0931, Train Accuracy: 0.3686, Val Loss: 1.1030, Val Accuracy: 0.2978\n","===== Epoch 550/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3600, Val Loss: 1.1024, Val Accuracy: 0.2844\n","===== Epoch 551/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3639, Val Loss: 1.0994, Val Accuracy: 0.3378\n","===== Epoch 552/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5831. Train Loss: 1.0942, Train Accuracy: 0.3576, Val Loss: 1.0952, Val Accuracy: 0.3511\n","===== Epoch 553/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5831. Train Loss: 1.0916, Train Accuracy: 0.3694, Val Loss: 1.1103, Val Accuracy: 0.2756\n","===== Epoch 554/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3749, Val Loss: 1.1022, Val Accuracy: 0.3467\n","===== Epoch 555/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5831. Train Loss: 1.0940, Train Accuracy: 0.3686, Val Loss: 1.1017, Val Accuracy: 0.3378\n","===== Epoch 556/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5831. Train Loss: 1.0938, Train Accuracy: 0.3639, Val Loss: 1.1003, Val Accuracy: 0.3200\n","===== Epoch 557/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3498, Val Loss: 1.0976, Val Accuracy: 0.3467\n","===== Epoch 558/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5831. Train Loss: 1.0935, Train Accuracy: 0.3600, Val Loss: 1.1028, Val Accuracy: 0.3289\n","===== Epoch 559/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5831. Train Loss: 1.0961, Train Accuracy: 0.3553, Val Loss: 1.1046, Val Accuracy: 0.3467\n","===== Epoch 560/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3796, Val Loss: 1.0968, Val Accuracy: 0.3467\n","===== Epoch 561/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3608, Val Loss: 1.0995, Val Accuracy: 0.3244\n","===== Epoch 562/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3835, Val Loss: 1.0979, Val Accuracy: 0.3289\n","===== Epoch 563/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5831. Train Loss: 1.0950, Train Accuracy: 0.3694, Val Loss: 1.1014, Val Accuracy: 0.3111\n","===== Epoch 564/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3624, Val Loss: 1.0976, Val Accuracy: 0.3244\n","===== Epoch 565/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3765, Val Loss: 1.0940, Val Accuracy: 0.3244\n","===== Epoch 566/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3663, Val Loss: 1.1017, Val Accuracy: 0.3200\n","===== Epoch 567/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5831. Train Loss: 1.0948, Train Accuracy: 0.3600, Val Loss: 1.0984, Val Accuracy: 0.3422\n","===== Epoch 568/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5831. Train Loss: 1.0902, Train Accuracy: 0.3827, Val Loss: 1.0943, Val Accuracy: 0.3689\n","===== Epoch 569/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5831. Train Loss: 1.0921, Train Accuracy: 0.3655, Val Loss: 1.0963, Val Accuracy: 0.3511\n","===== Epoch 570/2000 =====\n","No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5831. Train Loss: 1.0940, Train Accuracy: 0.3686, Val Loss: 1.0986, Val Accuracy: 0.3422\n","===== Epoch 571/2000 =====\n","No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3569, Val Loss: 1.0993, Val Accuracy: 0.3467\n","===== Epoch 572/2000 =====\n","No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5831. Train Loss: 1.0941, Train Accuracy: 0.3678, Val Loss: 1.0930, Val Accuracy: 0.3467\n","===== Epoch 573/2000 =====\n","No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3600, Val Loss: 1.0997, Val Accuracy: 0.3644\n","===== Epoch 574/2000 =====\n","No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5831. Train Loss: 1.0933, Train Accuracy: 0.3733, Val Loss: 1.1044, Val Accuracy: 0.3378\n","===== Epoch 575/2000 =====\n","No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5831. Train Loss: 1.0900, Train Accuracy: 0.3859, Val Loss: 1.1003, Val Accuracy: 0.3422\n","===== Epoch 576/2000 =====\n","No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3427, Val Loss: 1.0972, Val Accuracy: 0.3911\n","===== Epoch 577/2000 =====\n","No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5831. Train Loss: 1.0911, Train Accuracy: 0.3773, Val Loss: 1.1015, Val Accuracy: 0.3244\n","===== Epoch 578/2000 =====\n","No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5831. Train Loss: 1.0959, Train Accuracy: 0.3584, Val Loss: 1.0991, Val Accuracy: 0.3378\n","===== Epoch 579/2000 =====\n","No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3718, Val Loss: 1.1132, Val Accuracy: 0.3111\n","===== Epoch 580/2000 =====\n","No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3592, Val Loss: 1.0965, Val Accuracy: 0.3156\n","===== Epoch 581/2000 =====\n","No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3600, Val Loss: 1.0986, Val Accuracy: 0.3289\n","===== Epoch 582/2000 =====\n","New best model saved with Val ROC AUC: 0.5900, Train Loss: 1.0943, Train Accuracy: 0.3616, Val Loss: 1.0952, Val Accuracy: 0.3822\n","===== Epoch 583/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5900. Train Loss: 1.0925, Train Accuracy: 0.3561, Val Loss: 1.1010, Val Accuracy: 0.3200\n","===== Epoch 584/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5900. Train Loss: 1.0942, Train Accuracy: 0.3592, Val Loss: 1.1146, Val Accuracy: 0.2800\n","===== Epoch 585/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3655, Val Loss: 1.0881, Val Accuracy: 0.3689\n","===== Epoch 586/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3592, Val Loss: 1.1024, Val Accuracy: 0.3511\n","===== Epoch 587/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3875, Val Loss: 1.0999, Val Accuracy: 0.3200\n","===== Epoch 588/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3812, Val Loss: 1.0992, Val Accuracy: 0.3644\n","===== Epoch 589/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3655, Val Loss: 1.0930, Val Accuracy: 0.3511\n","===== Epoch 590/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5900. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0864, Val Accuracy: 0.3956\n","===== Epoch 591/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5900. Train Loss: 1.0927, Train Accuracy: 0.3647, Val Loss: 1.1014, Val Accuracy: 0.3067\n","===== Epoch 592/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5900. Train Loss: 1.0950, Train Accuracy: 0.3584, Val Loss: 1.1150, Val Accuracy: 0.3200\n","===== Epoch 593/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5900. Train Loss: 1.0968, Train Accuracy: 0.3490, Val Loss: 1.1055, Val Accuracy: 0.3067\n","===== Epoch 594/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3647, Val Loss: 1.1073, Val Accuracy: 0.2933\n","===== Epoch 595/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5900. Train Loss: 1.0950, Train Accuracy: 0.3694, Val Loss: 1.0996, Val Accuracy: 0.3511\n","===== Epoch 596/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5900. Train Loss: 1.0940, Train Accuracy: 0.3671, Val Loss: 1.1043, Val Accuracy: 0.3111\n","===== Epoch 597/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5900. Train Loss: 1.0917, Train Accuracy: 0.3773, Val Loss: 1.0933, Val Accuracy: 0.3600\n","===== Epoch 598/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3569, Val Loss: 1.1093, Val Accuracy: 0.3111\n","===== Epoch 599/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3741, Val Loss: 1.0987, Val Accuracy: 0.3244\n","===== Epoch 600/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3647, Val Loss: 1.0989, Val Accuracy: 0.3378\n","===== Epoch 601/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3678, Val Loss: 1.1002, Val Accuracy: 0.3111\n","===== Epoch 602/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3678, Val Loss: 1.0867, Val Accuracy: 0.4000\n","===== Epoch 603/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3584, Val Loss: 1.0975, Val Accuracy: 0.3289\n","===== Epoch 604/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5900. Train Loss: 1.0892, Train Accuracy: 0.3867, Val Loss: 1.1058, Val Accuracy: 0.3111\n","===== Epoch 605/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5900. Train Loss: 1.0938, Train Accuracy: 0.3694, Val Loss: 1.1108, Val Accuracy: 0.3200\n","===== Epoch 606/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5900. Train Loss: 1.0948, Train Accuracy: 0.3592, Val Loss: 1.0997, Val Accuracy: 0.3644\n","===== Epoch 607/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5900. Train Loss: 1.0924, Train Accuracy: 0.3725, Val Loss: 1.0963, Val Accuracy: 0.3822\n","===== Epoch 608/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3694, Val Loss: 1.1046, Val Accuracy: 0.3422\n","===== Epoch 609/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5900. Train Loss: 1.0922, Train Accuracy: 0.3780, Val Loss: 1.1001, Val Accuracy: 0.3556\n","===== Epoch 610/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5900. Train Loss: 1.0932, Train Accuracy: 0.3663, Val Loss: 1.0869, Val Accuracy: 0.3689\n","===== Epoch 611/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3671, Val Loss: 1.1085, Val Accuracy: 0.3289\n","===== Epoch 612/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5900. Train Loss: 1.0907, Train Accuracy: 0.3733, Val Loss: 1.0918, Val Accuracy: 0.3333\n","===== Epoch 613/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5900. Train Loss: 1.0893, Train Accuracy: 0.3914, Val Loss: 1.1150, Val Accuracy: 0.3111\n","===== Epoch 614/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5900. Train Loss: 1.0952, Train Accuracy: 0.3616, Val Loss: 1.1042, Val Accuracy: 0.3200\n","===== Epoch 615/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5900. Train Loss: 1.0983, Train Accuracy: 0.3584, Val Loss: 1.0946, Val Accuracy: 0.3378\n","===== Epoch 616/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5900. Train Loss: 1.0933, Train Accuracy: 0.3608, Val Loss: 1.1012, Val Accuracy: 0.3289\n","===== Epoch 617/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5900. Train Loss: 1.0887, Train Accuracy: 0.3875, Val Loss: 1.0916, Val Accuracy: 0.3511\n","===== Epoch 618/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5900. Train Loss: 1.0923, Train Accuracy: 0.3702, Val Loss: 1.0976, Val Accuracy: 0.3556\n","===== Epoch 619/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3804, Val Loss: 1.0977, Val Accuracy: 0.3422\n","===== Epoch 620/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5900. Train Loss: 1.0883, Train Accuracy: 0.3796, Val Loss: 1.0851, Val Accuracy: 0.3867\n","===== Epoch 621/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5900. Train Loss: 1.0904, Train Accuracy: 0.3780, Val Loss: 1.1032, Val Accuracy: 0.3422\n","===== Epoch 622/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5900. Train Loss: 1.0926, Train Accuracy: 0.3631, Val Loss: 1.0921, Val Accuracy: 0.3422\n","===== Epoch 623/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5900. Train Loss: 1.0936, Train Accuracy: 0.3702, Val Loss: 1.1081, Val Accuracy: 0.3333\n","===== Epoch 624/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3757, Val Loss: 1.0960, Val Accuracy: 0.3467\n","===== Epoch 625/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5900. Train Loss: 1.0972, Train Accuracy: 0.3820, Val Loss: 1.0989, Val Accuracy: 0.3378\n","===== Epoch 626/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5900. Train Loss: 1.0951, Train Accuracy: 0.3663, Val Loss: 1.0976, Val Accuracy: 0.3422\n","===== Epoch 627/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5900. Train Loss: 1.0943, Train Accuracy: 0.3631, Val Loss: 1.1013, Val Accuracy: 0.3511\n","===== Epoch 628/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3624, Val Loss: 1.0946, Val Accuracy: 0.3822\n","===== Epoch 629/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5900. Train Loss: 1.0887, Train Accuracy: 0.3890, Val Loss: 1.0926, Val Accuracy: 0.3689\n","===== Epoch 630/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5900. Train Loss: 1.0985, Train Accuracy: 0.3529, Val Loss: 1.1020, Val Accuracy: 0.3111\n","===== Epoch 631/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3584, Val Loss: 1.1027, Val Accuracy: 0.3111\n","===== Epoch 632/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3584, Val Loss: 1.0957, Val Accuracy: 0.3022\n","===== Epoch 633/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3725, Val Loss: 1.1012, Val Accuracy: 0.3556\n","===== Epoch 634/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3514, Val Loss: 1.0870, Val Accuracy: 0.4133\n","===== Epoch 635/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5900. Train Loss: 1.0885, Train Accuracy: 0.3875, Val Loss: 1.0995, Val Accuracy: 0.3244\n","===== Epoch 636/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5900. Train Loss: 1.0954, Train Accuracy: 0.3631, Val Loss: 1.0959, Val Accuracy: 0.3333\n","===== Epoch 637/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5900. Train Loss: 1.0900, Train Accuracy: 0.3804, Val Loss: 1.0992, Val Accuracy: 0.3511\n","===== Epoch 638/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5900. Train Loss: 1.0923, Train Accuracy: 0.3671, Val Loss: 1.0932, Val Accuracy: 0.3556\n","===== Epoch 639/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5900. Train Loss: 1.0888, Train Accuracy: 0.3804, Val Loss: 1.0961, Val Accuracy: 0.3333\n","===== Epoch 640/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3976, Val Loss: 1.0903, Val Accuracy: 0.3733\n","===== Epoch 641/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5900. Train Loss: 1.0886, Train Accuracy: 0.3788, Val Loss: 1.1028, Val Accuracy: 0.3111\n","===== Epoch 642/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5900. Train Loss: 1.0882, Train Accuracy: 0.3969, Val Loss: 1.1088, Val Accuracy: 0.3111\n","===== Epoch 643/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3953, Val Loss: 1.1000, Val Accuracy: 0.3511\n","===== Epoch 644/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5900. Train Loss: 1.0921, Train Accuracy: 0.3741, Val Loss: 1.0932, Val Accuracy: 0.3689\n","===== Epoch 645/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3914, Val Loss: 1.1004, Val Accuracy: 0.3511\n","===== Epoch 646/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5900. Train Loss: 1.0911, Train Accuracy: 0.3718, Val Loss: 1.1019, Val Accuracy: 0.3244\n","===== Epoch 647/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3843, Val Loss: 1.0909, Val Accuracy: 0.3778\n","===== Epoch 648/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5900. Train Loss: 1.0915, Train Accuracy: 0.3678, Val Loss: 1.0969, Val Accuracy: 0.3378\n","===== Epoch 649/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5900. Train Loss: 1.0915, Train Accuracy: 0.3733, Val Loss: 1.0948, Val Accuracy: 0.3556\n","===== Epoch 650/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5900. Train Loss: 1.0864, Train Accuracy: 0.3898, Val Loss: 1.1093, Val Accuracy: 0.3156\n","===== Epoch 651/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5900. Train Loss: 1.0867, Train Accuracy: 0.3937, Val Loss: 1.0979, Val Accuracy: 0.3511\n","===== Epoch 652/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5900. Train Loss: 1.0940, Train Accuracy: 0.3843, Val Loss: 1.0971, Val Accuracy: 0.3644\n","===== Epoch 653/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5900. Train Loss: 1.0946, Train Accuracy: 0.3553, Val Loss: 1.0995, Val Accuracy: 0.3600\n","===== Epoch 654/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5900. Train Loss: 1.0897, Train Accuracy: 0.3922, Val Loss: 1.1014, Val Accuracy: 0.3600\n","===== Epoch 655/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5900. Train Loss: 1.0948, Train Accuracy: 0.3561, Val Loss: 1.1008, Val Accuracy: 0.3289\n","===== Epoch 656/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3624, Val Loss: 1.0937, Val Accuracy: 0.3467\n","===== Epoch 657/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5900. Train Loss: 1.0896, Train Accuracy: 0.3843, Val Loss: 1.0977, Val Accuracy: 0.3511\n","===== Epoch 658/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3616, Val Loss: 1.1028, Val Accuracy: 0.3111\n","===== Epoch 659/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5900. Train Loss: 1.0904, Train Accuracy: 0.3929, Val Loss: 1.0978, Val Accuracy: 0.3644\n","===== Epoch 660/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5900. Train Loss: 1.0910, Train Accuracy: 0.3835, Val Loss: 1.1039, Val Accuracy: 0.3333\n","===== Epoch 661/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5900. Train Loss: 1.0901, Train Accuracy: 0.3757, Val Loss: 1.1022, Val Accuracy: 0.3422\n","===== Epoch 662/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5900. Train Loss: 1.0856, Train Accuracy: 0.3937, Val Loss: 1.0948, Val Accuracy: 0.3600\n","===== Epoch 663/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3757, Val Loss: 1.1089, Val Accuracy: 0.3244\n","===== Epoch 664/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3757, Val Loss: 1.0896, Val Accuracy: 0.3733\n","===== Epoch 665/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3647, Val Loss: 1.1014, Val Accuracy: 0.3556\n","===== Epoch 666/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5900. Train Loss: 1.0962, Train Accuracy: 0.3600, Val Loss: 1.1037, Val Accuracy: 0.3200\n","===== Epoch 667/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5900. Train Loss: 1.0956, Train Accuracy: 0.3616, Val Loss: 1.0982, Val Accuracy: 0.3600\n","===== Epoch 668/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5900. Train Loss: 1.0924, Train Accuracy: 0.3671, Val Loss: 1.0969, Val Accuracy: 0.3467\n","===== Epoch 669/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5900. Train Loss: 1.0883, Train Accuracy: 0.3906, Val Loss: 1.0949, Val Accuracy: 0.3733\n","===== Epoch 670/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3710, Val Loss: 1.0930, Val Accuracy: 0.3511\n","===== Epoch 671/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5900. Train Loss: 1.0925, Train Accuracy: 0.3725, Val Loss: 1.1074, Val Accuracy: 0.3333\n","===== Epoch 672/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5900. Train Loss: 1.0949, Train Accuracy: 0.3671, Val Loss: 1.0986, Val Accuracy: 0.3600\n","===== Epoch 673/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5900. Train Loss: 1.0913, Train Accuracy: 0.3882, Val Loss: 1.0935, Val Accuracy: 0.3556\n","===== Epoch 674/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5900. Train Loss: 1.0963, Train Accuracy: 0.3561, Val Loss: 1.0963, Val Accuracy: 0.3467\n","===== Epoch 675/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3647, Val Loss: 1.0998, Val Accuracy: 0.3689\n","===== Epoch 676/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3843, Val Loss: 1.0851, Val Accuracy: 0.4044\n","===== Epoch 677/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3631, Val Loss: 1.0866, Val Accuracy: 0.4000\n","===== Epoch 678/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3710, Val Loss: 1.0999, Val Accuracy: 0.3200\n","===== Epoch 679/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5900. Train Loss: 1.0911, Train Accuracy: 0.3898, Val Loss: 1.0934, Val Accuracy: 0.3689\n","===== Epoch 680/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3702, Val Loss: 1.1081, Val Accuracy: 0.3156\n","===== Epoch 681/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5900. Train Loss: 1.0918, Train Accuracy: 0.3725, Val Loss: 1.0882, Val Accuracy: 0.3689\n","===== Epoch 682/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5900. Train Loss: 1.0917, Train Accuracy: 0.3820, Val Loss: 1.1009, Val Accuracy: 0.3511\n","===== Epoch 683/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5900. Train Loss: 1.0908, Train Accuracy: 0.3741, Val Loss: 1.0953, Val Accuracy: 0.3289\n","===== Epoch 684/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5900. Train Loss: 1.0895, Train Accuracy: 0.3749, Val Loss: 1.0902, Val Accuracy: 0.3778\n","===== Epoch 685/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5900. Train Loss: 1.0895, Train Accuracy: 0.3773, Val Loss: 1.0998, Val Accuracy: 0.3244\n","===== Epoch 686/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5900. Train Loss: 1.0884, Train Accuracy: 0.3710, Val Loss: 1.1194, Val Accuracy: 0.2933\n","===== Epoch 687/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3749, Val Loss: 1.1031, Val Accuracy: 0.3289\n","===== Epoch 688/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5900. Train Loss: 1.0908, Train Accuracy: 0.3647, Val Loss: 1.0893, Val Accuracy: 0.3778\n","===== Epoch 689/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5900. Train Loss: 1.0931, Train Accuracy: 0.3663, Val Loss: 1.1022, Val Accuracy: 0.3467\n","===== Epoch 690/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5900. Train Loss: 1.0862, Train Accuracy: 0.3929, Val Loss: 1.0982, Val Accuracy: 0.3600\n","===== Epoch 691/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3655, Val Loss: 1.1026, Val Accuracy: 0.3556\n","===== Epoch 692/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5900. Train Loss: 1.0988, Train Accuracy: 0.3616, Val Loss: 1.1060, Val Accuracy: 0.3111\n","===== Epoch 693/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5900. Train Loss: 1.0962, Train Accuracy: 0.3616, Val Loss: 1.1014, Val Accuracy: 0.3156\n","===== Epoch 694/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3718, Val Loss: 1.0881, Val Accuracy: 0.3600\n","===== Epoch 695/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3671, Val Loss: 1.1071, Val Accuracy: 0.3289\n","===== Epoch 696/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3765, Val Loss: 1.0941, Val Accuracy: 0.3644\n","===== Epoch 697/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5900. Train Loss: 1.0910, Train Accuracy: 0.3820, Val Loss: 1.0855, Val Accuracy: 0.3733\n","===== Epoch 698/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5900. Train Loss: 1.0888, Train Accuracy: 0.3678, Val Loss: 1.1151, Val Accuracy: 0.2844\n","===== Epoch 699/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5900. Train Loss: 1.0877, Train Accuracy: 0.3843, Val Loss: 1.0941, Val Accuracy: 0.3778\n","===== Epoch 700/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5900. Train Loss: 1.0953, Train Accuracy: 0.3725, Val Loss: 1.0847, Val Accuracy: 0.4044\n","===== Epoch 701/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5900. Train Loss: 1.0921, Train Accuracy: 0.3859, Val Loss: 1.0916, Val Accuracy: 0.3689\n","===== Epoch 702/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5900. Train Loss: 1.0927, Train Accuracy: 0.3718, Val Loss: 1.1023, Val Accuracy: 0.3467\n","===== Epoch 703/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5900. Train Loss: 1.0916, Train Accuracy: 0.3882, Val Loss: 1.0888, Val Accuracy: 0.3778\n","===== Epoch 704/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5900. Train Loss: 1.0926, Train Accuracy: 0.3890, Val Loss: 1.0939, Val Accuracy: 0.3556\n","===== Epoch 705/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3647, Val Loss: 1.1010, Val Accuracy: 0.3244\n","===== Epoch 706/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5900. Train Loss: 1.0952, Train Accuracy: 0.3624, Val Loss: 1.1008, Val Accuracy: 0.3067\n","===== Epoch 707/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5900. Train Loss: 1.0902, Train Accuracy: 0.3843, Val Loss: 1.1056, Val Accuracy: 0.3067\n","===== Epoch 708/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3671, Val Loss: 1.1044, Val Accuracy: 0.3244\n","===== Epoch 709/2000 =====\n","New best model saved with Val ROC AUC: 0.5905, Train Loss: 1.0918, Train Accuracy: 0.3569, Val Loss: 1.0833, Val Accuracy: 0.3956\n","===== Epoch 710/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3875, Val Loss: 1.0957, Val Accuracy: 0.3778\n","===== Epoch 711/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3890, Val Loss: 1.0848, Val Accuracy: 0.3822\n","===== Epoch 712/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3937, Val Loss: 1.0972, Val Accuracy: 0.3600\n","===== Epoch 713/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5905. Train Loss: 1.0885, Train Accuracy: 0.4008, Val Loss: 1.1001, Val Accuracy: 0.3067\n","===== Epoch 714/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3733, Val Loss: 1.1065, Val Accuracy: 0.3111\n","===== Epoch 715/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5905. Train Loss: 1.0928, Train Accuracy: 0.3702, Val Loss: 1.1024, Val Accuracy: 0.3511\n","===== Epoch 716/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5905. Train Loss: 1.0917, Train Accuracy: 0.3718, Val Loss: 1.1033, Val Accuracy: 0.3289\n","===== Epoch 717/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5905. Train Loss: 1.0918, Train Accuracy: 0.3796, Val Loss: 1.0970, Val Accuracy: 0.3600\n","===== Epoch 718/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5905. Train Loss: 1.0897, Train Accuracy: 0.3733, Val Loss: 1.1020, Val Accuracy: 0.3467\n","===== Epoch 719/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5905. Train Loss: 1.0927, Train Accuracy: 0.3765, Val Loss: 1.1092, Val Accuracy: 0.3067\n","===== Epoch 720/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5905. Train Loss: 1.0872, Train Accuracy: 0.3796, Val Loss: 1.1012, Val Accuracy: 0.3422\n","===== Epoch 721/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5905. Train Loss: 1.0939, Train Accuracy: 0.3631, Val Loss: 1.1082, Val Accuracy: 0.3200\n","===== Epoch 722/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5905. Train Loss: 1.0854, Train Accuracy: 0.3937, Val Loss: 1.0966, Val Accuracy: 0.3422\n","===== Epoch 723/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3788, Val Loss: 1.1022, Val Accuracy: 0.3600\n","===== Epoch 724/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3780, Val Loss: 1.0916, Val Accuracy: 0.3600\n","===== Epoch 725/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5905. Train Loss: 1.0884, Train Accuracy: 0.3851, Val Loss: 1.0981, Val Accuracy: 0.3289\n","===== Epoch 726/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5905. Train Loss: 1.0869, Train Accuracy: 0.3733, Val Loss: 1.0938, Val Accuracy: 0.3511\n","===== Epoch 727/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5905. Train Loss: 1.0881, Train Accuracy: 0.3882, Val Loss: 1.0939, Val Accuracy: 0.3467\n","===== Epoch 728/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5905. Train Loss: 1.0886, Train Accuracy: 0.3804, Val Loss: 1.0980, Val Accuracy: 0.3422\n","===== Epoch 729/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5905. Train Loss: 1.0852, Train Accuracy: 0.3969, Val Loss: 1.0957, Val Accuracy: 0.3422\n","===== Epoch 730/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5905. Train Loss: 1.0868, Train Accuracy: 0.3804, Val Loss: 1.0953, Val Accuracy: 0.3600\n","===== Epoch 731/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3702, Val Loss: 1.1013, Val Accuracy: 0.3244\n","===== Epoch 732/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3875, Val Loss: 1.0949, Val Accuracy: 0.3600\n","===== Epoch 733/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3835, Val Loss: 1.0962, Val Accuracy: 0.3467\n","===== Epoch 734/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5905. Train Loss: 1.0914, Train Accuracy: 0.3749, Val Loss: 1.0963, Val Accuracy: 0.3244\n","===== Epoch 735/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5905. Train Loss: 1.0879, Train Accuracy: 0.3882, Val Loss: 1.0936, Val Accuracy: 0.3378\n","===== Epoch 736/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5905. Train Loss: 1.0946, Train Accuracy: 0.3576, Val Loss: 1.1013, Val Accuracy: 0.3200\n","===== Epoch 737/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3835, Val Loss: 1.0993, Val Accuracy: 0.3422\n","===== Epoch 738/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3843, Val Loss: 1.0928, Val Accuracy: 0.3911\n","===== Epoch 739/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3859, Val Loss: 1.0920, Val Accuracy: 0.3689\n","===== Epoch 740/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5905. Train Loss: 1.0910, Train Accuracy: 0.3812, Val Loss: 1.0897, Val Accuracy: 0.4000\n","===== Epoch 741/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3765, Val Loss: 1.1066, Val Accuracy: 0.3156\n","===== Epoch 742/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3867, Val Loss: 1.0950, Val Accuracy: 0.3511\n","===== Epoch 743/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5905. Train Loss: 1.0862, Train Accuracy: 0.4000, Val Loss: 1.1032, Val Accuracy: 0.3067\n","===== Epoch 744/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5905. Train Loss: 1.0902, Train Accuracy: 0.3765, Val Loss: 1.1015, Val Accuracy: 0.2933\n","===== Epoch 745/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5905. Train Loss: 1.0892, Train Accuracy: 0.3678, Val Loss: 1.1014, Val Accuracy: 0.3422\n","===== Epoch 746/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5905. Train Loss: 1.0894, Train Accuracy: 0.3780, Val Loss: 1.0983, Val Accuracy: 0.3467\n","===== Epoch 747/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5905. Train Loss: 1.0853, Train Accuracy: 0.3953, Val Loss: 1.0853, Val Accuracy: 0.3822\n","===== Epoch 748/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5905. Train Loss: 1.0840, Train Accuracy: 0.4008, Val Loss: 1.0980, Val Accuracy: 0.3378\n","===== Epoch 749/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3694, Val Loss: 1.0874, Val Accuracy: 0.3689\n","===== Epoch 750/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5905. Train Loss: 1.0900, Train Accuracy: 0.3702, Val Loss: 1.0916, Val Accuracy: 0.3644\n","===== Epoch 751/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5905. Train Loss: 1.0909, Train Accuracy: 0.3898, Val Loss: 1.1023, Val Accuracy: 0.3600\n","===== Epoch 752/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3882, Val Loss: 1.1020, Val Accuracy: 0.3511\n","===== Epoch 753/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5905. Train Loss: 1.0895, Train Accuracy: 0.3710, Val Loss: 1.0918, Val Accuracy: 0.3644\n","===== Epoch 754/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3812, Val Loss: 1.0905, Val Accuracy: 0.3822\n","===== Epoch 755/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3843, Val Loss: 1.1070, Val Accuracy: 0.3244\n","===== Epoch 756/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3702, Val Loss: 1.0956, Val Accuracy: 0.3556\n","===== Epoch 757/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.4008, Val Loss: 1.0920, Val Accuracy: 0.3778\n","===== Epoch 758/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3976, Val Loss: 1.0890, Val Accuracy: 0.3689\n","===== Epoch 759/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5905. Train Loss: 1.0858, Train Accuracy: 0.3827, Val Loss: 1.0894, Val Accuracy: 0.3511\n","===== Epoch 760/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3882, Val Loss: 1.0947, Val Accuracy: 0.3689\n","===== Epoch 761/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5905. Train Loss: 1.0915, Train Accuracy: 0.3788, Val Loss: 1.0997, Val Accuracy: 0.3422\n","===== Epoch 762/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3725, Val Loss: 1.0914, Val Accuracy: 0.3422\n","===== Epoch 763/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5905. Train Loss: 1.0854, Train Accuracy: 0.3914, Val Loss: 1.0931, Val Accuracy: 0.3644\n","===== Epoch 764/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3788, Val Loss: 1.1033, Val Accuracy: 0.3244\n","===== Epoch 765/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5905. Train Loss: 1.0870, Train Accuracy: 0.3859, Val Loss: 1.0955, Val Accuracy: 0.3600\n","===== Epoch 766/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5905. Train Loss: 1.0918, Train Accuracy: 0.3749, Val Loss: 1.1012, Val Accuracy: 0.3333\n","===== Epoch 767/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3718, Val Loss: 1.0913, Val Accuracy: 0.3911\n","===== Epoch 768/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5905. Train Loss: 1.0902, Train Accuracy: 0.3851, Val Loss: 1.0969, Val Accuracy: 0.3689\n","===== Epoch 769/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5905. Train Loss: 1.0886, Train Accuracy: 0.3827, Val Loss: 1.1008, Val Accuracy: 0.3200\n","===== Epoch 770/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3765, Val Loss: 1.0961, Val Accuracy: 0.3333\n","===== Epoch 771/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5905. Train Loss: 1.0862, Train Accuracy: 0.3804, Val Loss: 1.1021, Val Accuracy: 0.3467\n","===== Epoch 772/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3976, Val Loss: 1.1009, Val Accuracy: 0.3422\n","===== Epoch 773/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3827, Val Loss: 1.0837, Val Accuracy: 0.3778\n","===== Epoch 774/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3867, Val Loss: 1.0939, Val Accuracy: 0.3644\n","===== Epoch 775/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5905. Train Loss: 1.0905, Train Accuracy: 0.3851, Val Loss: 1.0988, Val Accuracy: 0.3600\n","===== Epoch 776/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5905. Train Loss: 1.0847, Train Accuracy: 0.3851, Val Loss: 1.1027, Val Accuracy: 0.3600\n","===== Epoch 777/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5905. Train Loss: 1.0925, Train Accuracy: 0.3655, Val Loss: 1.0984, Val Accuracy: 0.3333\n","===== Epoch 778/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5905. Train Loss: 1.0929, Train Accuracy: 0.3796, Val Loss: 1.0880, Val Accuracy: 0.4089\n","===== Epoch 779/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5905. Train Loss: 1.0874, Train Accuracy: 0.3882, Val Loss: 1.0901, Val Accuracy: 0.3600\n","===== Epoch 780/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5905. Train Loss: 1.0879, Train Accuracy: 0.3749, Val Loss: 1.0887, Val Accuracy: 0.4133\n","===== Epoch 781/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5905. Train Loss: 1.0838, Train Accuracy: 0.3961, Val Loss: 1.1208, Val Accuracy: 0.3156\n","===== Epoch 782/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3749, Val Loss: 1.0955, Val Accuracy: 0.3289\n","===== Epoch 783/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5905. Train Loss: 1.0917, Train Accuracy: 0.3765, Val Loss: 1.0977, Val Accuracy: 0.3378\n","===== Epoch 784/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5905. Train Loss: 1.0953, Train Accuracy: 0.3843, Val Loss: 1.1089, Val Accuracy: 0.3422\n","===== Epoch 785/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5905. Train Loss: 1.0909, Train Accuracy: 0.3733, Val Loss: 1.1032, Val Accuracy: 0.3156\n","===== Epoch 786/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3843, Val Loss: 1.0934, Val Accuracy: 0.3378\n","===== Epoch 787/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5905. Train Loss: 1.0874, Train Accuracy: 0.3914, Val Loss: 1.1081, Val Accuracy: 0.3333\n","===== Epoch 788/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3890, Val Loss: 1.1011, Val Accuracy: 0.3556\n","===== Epoch 789/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5905. Train Loss: 1.0891, Train Accuracy: 0.3757, Val Loss: 1.1091, Val Accuracy: 0.3378\n","===== Epoch 790/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3796, Val Loss: 1.1119, Val Accuracy: 0.3244\n","===== Epoch 791/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5905. Train Loss: 1.0967, Train Accuracy: 0.3616, Val Loss: 1.0905, Val Accuracy: 0.3422\n","===== Epoch 792/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5905. Train Loss: 1.0907, Train Accuracy: 0.3624, Val Loss: 1.1002, Val Accuracy: 0.3511\n","===== Epoch 793/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5905. Train Loss: 1.0870, Train Accuracy: 0.3914, Val Loss: 1.0993, Val Accuracy: 0.3289\n","===== Epoch 794/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5905. Train Loss: 1.0869, Train Accuracy: 0.4024, Val Loss: 1.1111, Val Accuracy: 0.3422\n","===== Epoch 795/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3757, Val Loss: 1.1084, Val Accuracy: 0.3333\n","===== Epoch 796/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3812, Val Loss: 1.1070, Val Accuracy: 0.3467\n","===== Epoch 797/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3898, Val Loss: 1.0966, Val Accuracy: 0.3689\n","===== Epoch 798/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3843, Val Loss: 1.0968, Val Accuracy: 0.3689\n","===== Epoch 799/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3773, Val Loss: 1.1036, Val Accuracy: 0.3289\n","===== Epoch 800/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3875, Val Loss: 1.1051, Val Accuracy: 0.3333\n","===== Epoch 801/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5905. Train Loss: 1.0830, Train Accuracy: 0.4086, Val Loss: 1.0980, Val Accuracy: 0.3689\n","===== Epoch 802/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5905. Train Loss: 1.0891, Train Accuracy: 0.3827, Val Loss: 1.0813, Val Accuracy: 0.3867\n","===== Epoch 803/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3820, Val Loss: 1.0868, Val Accuracy: 0.3511\n","===== Epoch 804/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5905. Train Loss: 1.0912, Train Accuracy: 0.3710, Val Loss: 1.1204, Val Accuracy: 0.3022\n","===== Epoch 805/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5905. Train Loss: 1.0900, Train Accuracy: 0.3765, Val Loss: 1.0951, Val Accuracy: 0.3511\n","===== Epoch 806/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5905. Train Loss: 1.0907, Train Accuracy: 0.3788, Val Loss: 1.0916, Val Accuracy: 0.3778\n","===== Epoch 807/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3820, Val Loss: 1.1071, Val Accuracy: 0.3200\n","===== Epoch 808/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5905. Train Loss: 1.0905, Train Accuracy: 0.3820, Val Loss: 1.0964, Val Accuracy: 0.3644\n","===== Epoch 809/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3906, Val Loss: 1.0978, Val Accuracy: 0.3556\n","===== Epoch 810/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5905. Train Loss: 1.0883, Train Accuracy: 0.3812, Val Loss: 1.1178, Val Accuracy: 0.3022\n","===== Epoch 811/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3922, Val Loss: 1.1072, Val Accuracy: 0.3156\n","===== Epoch 812/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5905. Train Loss: 1.0915, Train Accuracy: 0.3678, Val Loss: 1.0976, Val Accuracy: 0.3733\n","===== Epoch 813/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5905. Train Loss: 1.0914, Train Accuracy: 0.3749, Val Loss: 1.0879, Val Accuracy: 0.3733\n","===== Epoch 814/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3812, Val Loss: 1.0831, Val Accuracy: 0.4000\n","===== Epoch 815/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5905. Train Loss: 1.0880, Train Accuracy: 0.3804, Val Loss: 1.0877, Val Accuracy: 0.3733\n","===== Epoch 816/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5905. Train Loss: 1.0858, Train Accuracy: 0.3937, Val Loss: 1.0880, Val Accuracy: 0.3956\n","===== Epoch 817/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5905. Train Loss: 1.0885, Train Accuracy: 0.3827, Val Loss: 1.0964, Val Accuracy: 0.3289\n","===== Epoch 818/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5905. Train Loss: 1.0883, Train Accuracy: 0.3812, Val Loss: 1.0993, Val Accuracy: 0.3200\n","===== Epoch 819/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3906, Val Loss: 1.0918, Val Accuracy: 0.3600\n","===== Epoch 820/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3929, Val Loss: 1.0815, Val Accuracy: 0.3778\n","===== Epoch 821/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5905. Train Loss: 1.0927, Train Accuracy: 0.3655, Val Loss: 1.0795, Val Accuracy: 0.3689\n","===== Epoch 822/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5905. Train Loss: 1.0895, Train Accuracy: 0.3686, Val Loss: 1.0947, Val Accuracy: 0.3289\n","===== Epoch 823/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3969, Val Loss: 1.0973, Val Accuracy: 0.3467\n","===== Epoch 824/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3898, Val Loss: 1.0884, Val Accuracy: 0.3911\n","===== Epoch 825/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5905. Train Loss: 1.0857, Train Accuracy: 0.4047, Val Loss: 1.0763, Val Accuracy: 0.3867\n","===== Epoch 826/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5905. Train Loss: 1.0923, Train Accuracy: 0.3725, Val Loss: 1.0868, Val Accuracy: 0.3733\n","===== Epoch 827/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5905. Train Loss: 1.0842, Train Accuracy: 0.3804, Val Loss: 1.0922, Val Accuracy: 0.3644\n","===== Epoch 828/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5905. Train Loss: 1.0851, Train Accuracy: 0.3890, Val Loss: 1.0889, Val Accuracy: 0.3644\n","===== Epoch 829/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5905. Train Loss: 1.0840, Train Accuracy: 0.4078, Val Loss: 1.1026, Val Accuracy: 0.3244\n","===== Epoch 830/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5905. Train Loss: 1.0845, Train Accuracy: 0.3914, Val Loss: 1.0981, Val Accuracy: 0.3333\n","===== Epoch 831/2000 =====\n","New best model saved with Val ROC AUC: 0.5935, Train Loss: 1.0825, Train Accuracy: 0.4071, Val Loss: 1.0830, Val Accuracy: 0.3822\n","===== Epoch 832/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5935. Train Loss: 1.0891, Train Accuracy: 0.3953, Val Loss: 1.0839, Val Accuracy: 0.3778\n","===== Epoch 833/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3929, Val Loss: 1.0923, Val Accuracy: 0.3644\n","===== Epoch 834/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3780, Val Loss: 1.0918, Val Accuracy: 0.3644\n","===== Epoch 835/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5935. Train Loss: 1.0815, Train Accuracy: 0.4016, Val Loss: 1.0847, Val Accuracy: 0.3956\n","===== Epoch 836/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3875, Val Loss: 1.0946, Val Accuracy: 0.3467\n","===== Epoch 837/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3882, Val Loss: 1.1079, Val Accuracy: 0.3156\n","===== Epoch 838/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5935. Train Loss: 1.0910, Train Accuracy: 0.3663, Val Loss: 1.0967, Val Accuracy: 0.3289\n","===== Epoch 839/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5935. Train Loss: 1.0909, Train Accuracy: 0.3773, Val Loss: 1.0885, Val Accuracy: 0.3200\n","===== Epoch 840/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5935. Train Loss: 1.0838, Train Accuracy: 0.3765, Val Loss: 1.0953, Val Accuracy: 0.3778\n","===== Epoch 841/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5935. Train Loss: 1.0917, Train Accuracy: 0.3616, Val Loss: 1.1019, Val Accuracy: 0.3467\n","===== Epoch 842/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5935. Train Loss: 1.0821, Train Accuracy: 0.3890, Val Loss: 1.0971, Val Accuracy: 0.3378\n","===== Epoch 843/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5935. Train Loss: 1.0760, Train Accuracy: 0.4110, Val Loss: 1.0911, Val Accuracy: 0.3467\n","===== Epoch 844/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5935. Train Loss: 1.0880, Train Accuracy: 0.3867, Val Loss: 1.0892, Val Accuracy: 0.3733\n","===== Epoch 845/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3804, Val Loss: 1.0885, Val Accuracy: 0.3644\n","===== Epoch 846/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.3835, Val Loss: 1.1011, Val Accuracy: 0.3422\n","===== Epoch 847/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5935. Train Loss: 1.0923, Train Accuracy: 0.3749, Val Loss: 1.1012, Val Accuracy: 0.3556\n","===== Epoch 848/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3875, Val Loss: 1.0959, Val Accuracy: 0.3511\n","===== Epoch 849/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3725, Val Loss: 1.0957, Val Accuracy: 0.3511\n","===== Epoch 850/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3890, Val Loss: 1.0941, Val Accuracy: 0.3822\n","===== Epoch 851/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3976, Val Loss: 1.0951, Val Accuracy: 0.3867\n","===== Epoch 852/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3859, Val Loss: 1.0958, Val Accuracy: 0.3378\n","===== Epoch 853/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5935. Train Loss: 1.0856, Train Accuracy: 0.3906, Val Loss: 1.0947, Val Accuracy: 0.3600\n","===== Epoch 854/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5935. Train Loss: 1.0788, Train Accuracy: 0.4188, Val Loss: 1.0793, Val Accuracy: 0.3733\n","===== Epoch 855/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3741, Val Loss: 1.0880, Val Accuracy: 0.3644\n","===== Epoch 856/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5935. Train Loss: 1.0808, Train Accuracy: 0.3945, Val Loss: 1.0918, Val Accuracy: 0.3822\n","===== Epoch 857/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5935. Train Loss: 1.0862, Train Accuracy: 0.3820, Val Loss: 1.0850, Val Accuracy: 0.3867\n","===== Epoch 858/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5935. Train Loss: 1.0845, Train Accuracy: 0.3843, Val Loss: 1.0917, Val Accuracy: 0.3733\n","===== Epoch 859/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.3969, Val Loss: 1.0942, Val Accuracy: 0.3556\n","===== Epoch 860/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3937, Val Loss: 1.0945, Val Accuracy: 0.3200\n","===== Epoch 861/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5935. Train Loss: 1.0868, Train Accuracy: 0.3765, Val Loss: 1.0918, Val Accuracy: 0.3422\n","===== Epoch 862/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3851, Val Loss: 1.0959, Val Accuracy: 0.3511\n","===== Epoch 863/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5935. Train Loss: 1.0885, Train Accuracy: 0.3922, Val Loss: 1.0913, Val Accuracy: 0.3467\n","===== Epoch 864/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5935. Train Loss: 1.0811, Train Accuracy: 0.3929, Val Loss: 1.1109, Val Accuracy: 0.3244\n","===== Epoch 865/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5935. Train Loss: 1.0891, Train Accuracy: 0.3733, Val Loss: 1.1064, Val Accuracy: 0.3467\n","===== Epoch 866/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.3992, Val Loss: 1.0914, Val Accuracy: 0.3511\n","===== Epoch 867/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.4086, Val Loss: 1.0937, Val Accuracy: 0.3600\n","===== Epoch 868/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3796, Val Loss: 1.1140, Val Accuracy: 0.3467\n","===== Epoch 869/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5935. Train Loss: 1.0911, Train Accuracy: 0.3663, Val Loss: 1.0898, Val Accuracy: 0.3644\n","===== Epoch 870/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3686, Val Loss: 1.0986, Val Accuracy: 0.3422\n","===== Epoch 871/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5935. Train Loss: 1.0868, Train Accuracy: 0.3890, Val Loss: 1.0882, Val Accuracy: 0.3644\n","===== Epoch 872/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5935. Train Loss: 1.0905, Train Accuracy: 0.3733, Val Loss: 1.1010, Val Accuracy: 0.3600\n","===== Epoch 873/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5935. Train Loss: 1.0851, Train Accuracy: 0.4047, Val Loss: 1.0838, Val Accuracy: 0.4044\n","===== Epoch 874/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3851, Val Loss: 1.0981, Val Accuracy: 0.3333\n","===== Epoch 875/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5935. Train Loss: 1.0889, Train Accuracy: 0.3796, Val Loss: 1.1030, Val Accuracy: 0.3244\n","===== Epoch 876/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5935. Train Loss: 1.0875, Train Accuracy: 0.3812, Val Loss: 1.0992, Val Accuracy: 0.3467\n","===== Epoch 877/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5935. Train Loss: 1.0865, Train Accuracy: 0.3890, Val Loss: 1.0942, Val Accuracy: 0.3644\n","===== Epoch 878/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5935. Train Loss: 1.0873, Train Accuracy: 0.3820, Val Loss: 1.1075, Val Accuracy: 0.3244\n","===== Epoch 879/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3953, Val Loss: 1.0870, Val Accuracy: 0.3644\n","===== Epoch 880/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3773, Val Loss: 1.0952, Val Accuracy: 0.3556\n","===== Epoch 881/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3906, Val Loss: 1.0928, Val Accuracy: 0.3511\n","===== Epoch 882/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5935. Train Loss: 1.0870, Train Accuracy: 0.3882, Val Loss: 1.1073, Val Accuracy: 0.3422\n","===== Epoch 883/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.4024, Val Loss: 1.1040, Val Accuracy: 0.3244\n","===== Epoch 884/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5935. Train Loss: 1.0834, Train Accuracy: 0.3906, Val Loss: 1.0928, Val Accuracy: 0.3422\n","===== Epoch 885/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5935. Train Loss: 1.0865, Train Accuracy: 0.3898, Val Loss: 1.1019, Val Accuracy: 0.3511\n","===== Epoch 886/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5935. Train Loss: 1.0874, Train Accuracy: 0.3827, Val Loss: 1.0933, Val Accuracy: 0.3867\n","===== Epoch 887/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5935. Train Loss: 1.0921, Train Accuracy: 0.3765, Val Loss: 1.0885, Val Accuracy: 0.3467\n","===== Epoch 888/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5935. Train Loss: 1.0905, Train Accuracy: 0.3773, Val Loss: 1.1028, Val Accuracy: 0.3289\n","===== Epoch 889/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3867, Val Loss: 1.0805, Val Accuracy: 0.3778\n","===== Epoch 890/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5935. Train Loss: 1.0914, Train Accuracy: 0.3827, Val Loss: 1.1033, Val Accuracy: 0.3422\n","===== Epoch 891/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5935. Train Loss: 1.0815, Train Accuracy: 0.3969, Val Loss: 1.0885, Val Accuracy: 0.3467\n","===== Epoch 892/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5935. Train Loss: 1.0908, Train Accuracy: 0.3678, Val Loss: 1.1015, Val Accuracy: 0.3422\n","===== Epoch 893/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5935. Train Loss: 1.0940, Train Accuracy: 0.3733, Val Loss: 1.0945, Val Accuracy: 0.3644\n","===== Epoch 894/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5935. Train Loss: 1.0841, Train Accuracy: 0.3969, Val Loss: 1.1029, Val Accuracy: 0.3422\n","===== Epoch 895/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5935. Train Loss: 1.0920, Train Accuracy: 0.3773, Val Loss: 1.1149, Val Accuracy: 0.3200\n","===== Epoch 896/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3859, Val Loss: 1.1011, Val Accuracy: 0.3422\n","===== Epoch 897/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5935. Train Loss: 1.0885, Train Accuracy: 0.3749, Val Loss: 1.0956, Val Accuracy: 0.3822\n","===== Epoch 898/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5935. Train Loss: 1.0867, Train Accuracy: 0.3859, Val Loss: 1.0897, Val Accuracy: 0.3822\n","===== Epoch 899/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.4102, Val Loss: 1.0900, Val Accuracy: 0.3733\n","===== Epoch 900/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5935. Train Loss: 1.0828, Train Accuracy: 0.3961, Val Loss: 1.0972, Val Accuracy: 0.3556\n","===== Epoch 901/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5935. Train Loss: 1.0861, Train Accuracy: 0.3867, Val Loss: 1.1034, Val Accuracy: 0.3556\n","===== Epoch 902/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5935. Train Loss: 1.0846, Train Accuracy: 0.3820, Val Loss: 1.0901, Val Accuracy: 0.3556\n","===== Epoch 903/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5935. Train Loss: 1.0819, Train Accuracy: 0.4016, Val Loss: 1.1029, Val Accuracy: 0.3422\n","===== Epoch 904/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3867, Val Loss: 1.1031, Val Accuracy: 0.3422\n","===== Epoch 905/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5935. Train Loss: 1.0774, Train Accuracy: 0.3969, Val Loss: 1.0821, Val Accuracy: 0.3778\n","===== Epoch 906/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5935. Train Loss: 1.0899, Train Accuracy: 0.3757, Val Loss: 1.1117, Val Accuracy: 0.3422\n","===== Epoch 907/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5935. Train Loss: 1.0894, Train Accuracy: 0.3780, Val Loss: 1.0874, Val Accuracy: 0.3511\n","===== Epoch 908/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5935. Train Loss: 1.0941, Train Accuracy: 0.3718, Val Loss: 1.1043, Val Accuracy: 0.3467\n","===== Epoch 909/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3906, Val Loss: 1.1019, Val Accuracy: 0.2978\n","===== Epoch 910/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5935. Train Loss: 1.0805, Train Accuracy: 0.4133, Val Loss: 1.0966, Val Accuracy: 0.3689\n","===== Epoch 911/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.4047, Val Loss: 1.0819, Val Accuracy: 0.4000\n","===== Epoch 912/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5935. Train Loss: 1.0792, Train Accuracy: 0.3922, Val Loss: 1.0900, Val Accuracy: 0.3733\n","===== Epoch 913/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3718, Val Loss: 1.0850, Val Accuracy: 0.3689\n","===== Epoch 914/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5935. Train Loss: 1.0834, Train Accuracy: 0.3992, Val Loss: 1.0989, Val Accuracy: 0.3733\n","===== Epoch 915/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.4016, Val Loss: 1.1213, Val Accuracy: 0.2978\n","===== Epoch 916/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5935. Train Loss: 1.0978, Train Accuracy: 0.3631, Val Loss: 1.0870, Val Accuracy: 0.3644\n","===== Epoch 917/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5935. Train Loss: 1.0847, Train Accuracy: 0.3835, Val Loss: 1.0869, Val Accuracy: 0.4044\n","===== Epoch 918/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5935. Train Loss: 1.0839, Train Accuracy: 0.3788, Val Loss: 1.1024, Val Accuracy: 0.3333\n","===== Epoch 919/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5935. Train Loss: 1.0817, Train Accuracy: 0.4016, Val Loss: 1.0813, Val Accuracy: 0.3778\n","===== Epoch 920/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5935. Train Loss: 1.0790, Train Accuracy: 0.3906, Val Loss: 1.0968, Val Accuracy: 0.3733\n","===== Epoch 921/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3835, Val Loss: 1.0894, Val Accuracy: 0.3556\n","===== Epoch 922/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5935. Train Loss: 1.0907, Train Accuracy: 0.3906, Val Loss: 1.0940, Val Accuracy: 0.3867\n","===== Epoch 923/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3882, Val Loss: 1.0978, Val Accuracy: 0.3689\n","===== Epoch 924/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3945, Val Loss: 1.0891, Val Accuracy: 0.3644\n","===== Epoch 925/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5935. Train Loss: 1.0826, Train Accuracy: 0.4039, Val Loss: 1.0986, Val Accuracy: 0.3600\n","===== Epoch 926/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3859, Val Loss: 1.0978, Val Accuracy: 0.3511\n","===== Epoch 927/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5935. Train Loss: 1.0870, Train Accuracy: 0.3851, Val Loss: 1.0780, Val Accuracy: 0.4311\n","===== Epoch 928/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5935. Train Loss: 1.0824, Train Accuracy: 0.3953, Val Loss: 1.1028, Val Accuracy: 0.3378\n","===== Epoch 929/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5935. Train Loss: 1.0884, Train Accuracy: 0.3929, Val Loss: 1.1094, Val Accuracy: 0.3289\n","===== Epoch 930/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5935. Train Loss: 1.0813, Train Accuracy: 0.4000, Val Loss: 1.0976, Val Accuracy: 0.3333\n","===== Epoch 931/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.3914, Val Loss: 1.0923, Val Accuracy: 0.3556\n","===== Epoch 932/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3835, Val Loss: 1.1043, Val Accuracy: 0.3556\n","===== Epoch 933/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3820, Val Loss: 1.0916, Val Accuracy: 0.3333\n","===== Epoch 934/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3937, Val Loss: 1.0888, Val Accuracy: 0.3689\n","===== Epoch 935/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3851, Val Loss: 1.0987, Val Accuracy: 0.3422\n","===== Epoch 936/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.4071, Val Loss: 1.0870, Val Accuracy: 0.3689\n","===== Epoch 937/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5935. Train Loss: 1.0846, Train Accuracy: 0.3796, Val Loss: 1.1006, Val Accuracy: 0.3378\n","===== Epoch 938/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3812, Val Loss: 1.0951, Val Accuracy: 0.3289\n","===== Epoch 939/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5935. Train Loss: 1.0818, Train Accuracy: 0.3922, Val Loss: 1.0805, Val Accuracy: 0.3867\n","===== Epoch 940/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3867, Val Loss: 1.1038, Val Accuracy: 0.3511\n","===== Epoch 941/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5935. Train Loss: 1.0920, Train Accuracy: 0.3584, Val Loss: 1.0905, Val Accuracy: 0.3467\n","===== Epoch 942/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5935. Train Loss: 1.0775, Train Accuracy: 0.4063, Val Loss: 1.0865, Val Accuracy: 0.3733\n","===== Epoch 943/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5935. Train Loss: 1.0790, Train Accuracy: 0.3992, Val Loss: 1.0946, Val Accuracy: 0.3511\n","===== Epoch 944/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5935. Train Loss: 1.0788, Train Accuracy: 0.4016, Val Loss: 1.0845, Val Accuracy: 0.4044\n","===== Epoch 945/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.3875, Val Loss: 1.0860, Val Accuracy: 0.3600\n","===== Epoch 946/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.3984, Val Loss: 1.0762, Val Accuracy: 0.3822\n","===== Epoch 947/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5935. Train Loss: 1.0812, Train Accuracy: 0.4008, Val Loss: 1.0860, Val Accuracy: 0.3778\n","===== Epoch 948/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3984, Val Loss: 1.0986, Val Accuracy: 0.3244\n","===== Epoch 949/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3827, Val Loss: 1.0876, Val Accuracy: 0.3822\n","===== Epoch 950/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5935. Train Loss: 1.0886, Train Accuracy: 0.3875, Val Loss: 1.0965, Val Accuracy: 0.3467\n","===== Epoch 951/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.4024, Val Loss: 1.0913, Val Accuracy: 0.3689\n","===== Epoch 952/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.4016, Val Loss: 1.0965, Val Accuracy: 0.3244\n","===== Epoch 953/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.3976, Val Loss: 1.0892, Val Accuracy: 0.3822\n","===== Epoch 954/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3890, Val Loss: 1.0963, Val Accuracy: 0.3689\n","===== Epoch 955/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5935. Train Loss: 1.0802, Train Accuracy: 0.4110, Val Loss: 1.0942, Val Accuracy: 0.3422\n","===== Epoch 956/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3851, Val Loss: 1.0990, Val Accuracy: 0.3289\n","===== Epoch 957/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3929, Val Loss: 1.0925, Val Accuracy: 0.3733\n","===== Epoch 958/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3875, Val Loss: 1.0968, Val Accuracy: 0.3600\n","===== Epoch 959/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5935. Train Loss: 1.0882, Train Accuracy: 0.3718, Val Loss: 1.0872, Val Accuracy: 0.3467\n","===== Epoch 960/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5935. Train Loss: 1.0845, Train Accuracy: 0.3906, Val Loss: 1.0923, Val Accuracy: 0.3422\n","===== Epoch 961/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5935. Train Loss: 1.0839, Train Accuracy: 0.3945, Val Loss: 1.0978, Val Accuracy: 0.3200\n","===== Epoch 962/2000 =====\n","No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3702, Val Loss: 1.0945, Val Accuracy: 0.3600\n","===== Epoch 963/2000 =====\n","No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5935. Train Loss: 1.0838, Train Accuracy: 0.3749, Val Loss: 1.0862, Val Accuracy: 0.4133\n","===== Epoch 964/2000 =====\n","No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5935. Train Loss: 1.0785, Train Accuracy: 0.4008, Val Loss: 1.0844, Val Accuracy: 0.3644\n","===== Epoch 965/2000 =====\n","No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3906, Val Loss: 1.1029, Val Accuracy: 0.3600\n","===== Epoch 966/2000 =====\n","No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5935. Train Loss: 1.0880, Train Accuracy: 0.3937, Val Loss: 1.1018, Val Accuracy: 0.3378\n","===== Epoch 967/2000 =====\n","No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5935. Train Loss: 1.0803, Train Accuracy: 0.3922, Val Loss: 1.0918, Val Accuracy: 0.3689\n","===== Epoch 968/2000 =====\n","No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5935. Train Loss: 1.0786, Train Accuracy: 0.4086, Val Loss: 1.0895, Val Accuracy: 0.3822\n","===== Epoch 969/2000 =====\n","No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3820, Val Loss: 1.0857, Val Accuracy: 0.3689\n","===== Epoch 970/2000 =====\n","No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5935. Train Loss: 1.0857, Train Accuracy: 0.4063, Val Loss: 1.0894, Val Accuracy: 0.3556\n","===== Epoch 971/2000 =====\n","No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3827, Val Loss: 1.1080, Val Accuracy: 0.3244\n","===== Epoch 972/2000 =====\n","No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.3984, Val Loss: 1.0904, Val Accuracy: 0.3600\n","===== Epoch 973/2000 =====\n","No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5935. Train Loss: 1.0794, Train Accuracy: 0.4125, Val Loss: 1.1102, Val Accuracy: 0.3289\n","===== Epoch 974/2000 =====\n","No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5935. Train Loss: 1.0750, Train Accuracy: 0.4024, Val Loss: 1.1121, Val Accuracy: 0.3289\n","===== Epoch 975/2000 =====\n","No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5935. Train Loss: 1.0850, Train Accuracy: 0.3835, Val Loss: 1.0947, Val Accuracy: 0.3244\n","===== Epoch 976/2000 =====\n","No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5935. Train Loss: 1.0828, Train Accuracy: 0.3976, Val Loss: 1.0939, Val Accuracy: 0.4000\n","===== Epoch 977/2000 =====\n","No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5935. Train Loss: 1.0884, Train Accuracy: 0.3875, Val Loss: 1.0923, Val Accuracy: 0.3556\n","===== Epoch 978/2000 =====\n","No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3851, Val Loss: 1.1019, Val Accuracy: 0.3422\n","===== Epoch 979/2000 =====\n","No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5935. Train Loss: 1.0808, Train Accuracy: 0.3976, Val Loss: 1.1004, Val Accuracy: 0.3600\n","===== Epoch 980/2000 =====\n","No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5935. Train Loss: 1.0866, Train Accuracy: 0.3882, Val Loss: 1.1112, Val Accuracy: 0.3378\n","===== Epoch 981/2000 =====\n","No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3984, Val Loss: 1.0882, Val Accuracy: 0.3644\n","===== Epoch 982/2000 =====\n","No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5935. Train Loss: 1.0837, Train Accuracy: 0.3867, Val Loss: 1.0795, Val Accuracy: 0.3867\n","===== Epoch 983/2000 =====\n","No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5935. Train Loss: 1.0826, Train Accuracy: 0.3890, Val Loss: 1.0930, Val Accuracy: 0.3467\n","===== Epoch 984/2000 =====\n","No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3867, Val Loss: 1.0858, Val Accuracy: 0.3600\n","===== Epoch 985/2000 =====\n","No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3914, Val Loss: 1.0908, Val Accuracy: 0.3778\n","===== Epoch 986/2000 =====\n","No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5935. Train Loss: 1.0860, Train Accuracy: 0.3765, Val Loss: 1.1066, Val Accuracy: 0.3289\n","===== Epoch 987/2000 =====\n","No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5935. Train Loss: 1.0796, Train Accuracy: 0.4008, Val Loss: 1.0935, Val Accuracy: 0.3911\n","===== Epoch 988/2000 =====\n","No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3945, Val Loss: 1.1005, Val Accuracy: 0.3511\n","===== Epoch 989/2000 =====\n","No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3882, Val Loss: 1.1158, Val Accuracy: 0.3333\n","===== Epoch 990/2000 =====\n","No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5935. Train Loss: 1.0878, Train Accuracy: 0.3843, Val Loss: 1.0759, Val Accuracy: 0.3689\n","===== Epoch 991/2000 =====\n","No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5935. Train Loss: 1.0893, Train Accuracy: 0.3890, Val Loss: 1.0720, Val Accuracy: 0.4133\n","===== Epoch 992/2000 =====\n","No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5935. Train Loss: 1.0877, Train Accuracy: 0.3796, Val Loss: 1.1002, Val Accuracy: 0.3244\n","===== Epoch 993/2000 =====\n","No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3773, Val Loss: 1.0881, Val Accuracy: 0.3378\n","===== Epoch 994/2000 =====\n","No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5935. Train Loss: 1.0763, Train Accuracy: 0.4071, Val Loss: 1.0935, Val Accuracy: 0.3511\n","===== Epoch 995/2000 =====\n","No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5935. Train Loss: 1.0913, Train Accuracy: 0.3804, Val Loss: 1.0902, Val Accuracy: 0.3422\n","===== Epoch 996/2000 =====\n","No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5935. Train Loss: 1.0802, Train Accuracy: 0.4031, Val Loss: 1.0864, Val Accuracy: 0.3600\n","===== Epoch 997/2000 =====\n","No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3796, Val Loss: 1.1017, Val Accuracy: 0.3511\n","===== Epoch 998/2000 =====\n","No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3914, Val Loss: 1.1071, Val Accuracy: 0.3644\n","===== Epoch 999/2000 =====\n","No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5935. Train Loss: 1.0848, Train Accuracy: 0.3812, Val Loss: 1.0974, Val Accuracy: 0.3467\n","===== Epoch 1000/2000 =====\n","No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3945, Val Loss: 1.0976, Val Accuracy: 0.3333\n","===== Epoch 1001/2000 =====\n","No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3851, Val Loss: 1.0827, Val Accuracy: 0.4133\n","===== Epoch 1002/2000 =====\n","No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.3945, Val Loss: 1.0822, Val Accuracy: 0.3289\n","===== Epoch 1003/2000 =====\n","No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5935. Train Loss: 1.0866, Train Accuracy: 0.3984, Val Loss: 1.0925, Val Accuracy: 0.3822\n","===== Epoch 1004/2000 =====\n","No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5935. Train Loss: 1.0799, Train Accuracy: 0.3843, Val Loss: 1.0827, Val Accuracy: 0.3956\n","===== Epoch 1005/2000 =====\n","No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5935. Train Loss: 1.0906, Train Accuracy: 0.3890, Val Loss: 1.0902, Val Accuracy: 0.3644\n","===== Epoch 1006/2000 =====\n","No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5935. Train Loss: 1.0899, Train Accuracy: 0.3710, Val Loss: 1.0886, Val Accuracy: 0.3600\n","===== Epoch 1007/2000 =====\n","No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5935. Train Loss: 1.0764, Train Accuracy: 0.4055, Val Loss: 1.0987, Val Accuracy: 0.3422\n","===== Epoch 1008/2000 =====\n","No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5935. Train Loss: 1.0719, Train Accuracy: 0.4180, Val Loss: 1.1004, Val Accuracy: 0.3289\n","===== Epoch 1009/2000 =====\n","No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3835, Val Loss: 1.0955, Val Accuracy: 0.3600\n","===== Epoch 1010/2000 =====\n","No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5935. Train Loss: 1.0759, Train Accuracy: 0.3945, Val Loss: 1.0957, Val Accuracy: 0.3689\n","===== Epoch 1011/2000 =====\n","No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5935. Train Loss: 1.0754, Train Accuracy: 0.4086, Val Loss: 1.0950, Val Accuracy: 0.3378\n","===== Epoch 1012/2000 =====\n","No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5935. Train Loss: 1.0841, Train Accuracy: 0.3953, Val Loss: 1.0865, Val Accuracy: 0.3911\n","===== Epoch 1013/2000 =====\n","No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3945, Val Loss: 1.1001, Val Accuracy: 0.3467\n","===== Epoch 1014/2000 =====\n","No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5935. Train Loss: 1.0878, Train Accuracy: 0.3780, Val Loss: 1.0765, Val Accuracy: 0.4044\n","===== Epoch 1015/2000 =====\n","No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3945, Val Loss: 1.0863, Val Accuracy: 0.3644\n","===== Epoch 1016/2000 =====\n","No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3820, Val Loss: 1.0750, Val Accuracy: 0.3956\n","===== Epoch 1017/2000 =====\n","No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3749, Val Loss: 1.0967, Val Accuracy: 0.3467\n","===== Epoch 1018/2000 =====\n","No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5935. Train Loss: 1.0824, Train Accuracy: 0.3859, Val Loss: 1.0813, Val Accuracy: 0.3778\n","===== Epoch 1019/2000 =====\n","No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.4016, Val Loss: 1.0935, Val Accuracy: 0.3822\n","===== Epoch 1020/2000 =====\n","No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5935. Train Loss: 1.0851, Train Accuracy: 0.3969, Val Loss: 1.0948, Val Accuracy: 0.3511\n","===== Epoch 1021/2000 =====\n","New best model saved with Val ROC AUC: 0.5966, Train Loss: 1.0788, Train Accuracy: 0.3984, Val Loss: 1.0733, Val Accuracy: 0.4089\n","===== Epoch 1022/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5966. Train Loss: 1.0778, Train Accuracy: 0.4063, Val Loss: 1.0818, Val Accuracy: 0.3778\n","===== Epoch 1023/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5966. Train Loss: 1.0779, Train Accuracy: 0.3953, Val Loss: 1.0938, Val Accuracy: 0.3556\n","===== Epoch 1024/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5966. Train Loss: 1.0884, Train Accuracy: 0.3678, Val Loss: 1.0874, Val Accuracy: 0.3556\n","===== Epoch 1025/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5966. Train Loss: 1.0781, Train Accuracy: 0.3976, Val Loss: 1.0954, Val Accuracy: 0.3733\n","===== Epoch 1026/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5966. Train Loss: 1.0794, Train Accuracy: 0.4039, Val Loss: 1.0883, Val Accuracy: 0.3689\n","===== Epoch 1027/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5966. Train Loss: 1.0785, Train Accuracy: 0.4016, Val Loss: 1.0805, Val Accuracy: 0.3511\n","===== Epoch 1028/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5966. Train Loss: 1.0752, Train Accuracy: 0.4125, Val Loss: 1.1025, Val Accuracy: 0.3333\n","===== Epoch 1029/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5966. Train Loss: 1.0752, Train Accuracy: 0.4039, Val Loss: 1.0929, Val Accuracy: 0.3778\n","===== Epoch 1030/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5966. Train Loss: 1.0756, Train Accuracy: 0.4071, Val Loss: 1.0807, Val Accuracy: 0.3911\n","===== Epoch 1031/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5966. Train Loss: 1.0807, Train Accuracy: 0.3937, Val Loss: 1.0954, Val Accuracy: 0.3511\n","===== Epoch 1032/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5966. Train Loss: 1.0775, Train Accuracy: 0.4180, Val Loss: 1.0795, Val Accuracy: 0.3911\n","===== Epoch 1033/2000 =====\n","New best model saved with Val ROC AUC: 0.6021, Train Loss: 1.0804, Train Accuracy: 0.4024, Val Loss: 1.0655, Val Accuracy: 0.4356\n","===== Epoch 1034/2000 =====\n","New best model saved with Val ROC AUC: 0.6035, Train Loss: 1.0756, Train Accuracy: 0.4008, Val Loss: 1.0804, Val Accuracy: 0.3822\n","===== Epoch 1035/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6035. Train Loss: 1.0833, Train Accuracy: 0.3875, Val Loss: 1.0901, Val Accuracy: 0.3644\n","===== Epoch 1036/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6035. Train Loss: 1.0822, Train Accuracy: 0.3890, Val Loss: 1.0817, Val Accuracy: 0.4000\n","===== Epoch 1037/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6035. Train Loss: 1.0719, Train Accuracy: 0.4125, Val Loss: 1.0886, Val Accuracy: 0.3733\n","===== Epoch 1038/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6035. Train Loss: 1.0845, Train Accuracy: 0.3890, Val Loss: 1.1043, Val Accuracy: 0.3511\n","===== Epoch 1039/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6035. Train Loss: 1.0835, Train Accuracy: 0.3835, Val Loss: 1.0917, Val Accuracy: 0.3644\n","===== Epoch 1040/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6035. Train Loss: 1.0781, Train Accuracy: 0.3976, Val Loss: 1.0993, Val Accuracy: 0.3511\n","===== Epoch 1041/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6035. Train Loss: 1.0779, Train Accuracy: 0.3961, Val Loss: 1.0897, Val Accuracy: 0.3511\n","===== Epoch 1042/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6035. Train Loss: 1.0764, Train Accuracy: 0.3961, Val Loss: 1.0885, Val Accuracy: 0.3911\n","===== Epoch 1043/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6035. Train Loss: 1.0733, Train Accuracy: 0.4031, Val Loss: 1.0762, Val Accuracy: 0.3822\n","===== Epoch 1044/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6035. Train Loss: 1.0764, Train Accuracy: 0.4078, Val Loss: 1.1043, Val Accuracy: 0.3600\n","===== Epoch 1045/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6035. Train Loss: 1.0791, Train Accuracy: 0.3875, Val Loss: 1.0847, Val Accuracy: 0.3689\n","===== Epoch 1046/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6035. Train Loss: 1.0763, Train Accuracy: 0.4196, Val Loss: 1.1063, Val Accuracy: 0.3289\n","===== Epoch 1047/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6035. Train Loss: 1.0754, Train Accuracy: 0.4102, Val Loss: 1.0850, Val Accuracy: 0.3867\n","===== Epoch 1048/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6035. Train Loss: 1.0803, Train Accuracy: 0.3898, Val Loss: 1.1078, Val Accuracy: 0.3156\n","===== Epoch 1049/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6035. Train Loss: 1.0731, Train Accuracy: 0.4086, Val Loss: 1.0838, Val Accuracy: 0.3644\n","===== Epoch 1050/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6035. Train Loss: 1.0723, Train Accuracy: 0.4102, Val Loss: 1.0938, Val Accuracy: 0.3644\n","===== Epoch 1051/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6035. Train Loss: 1.0747, Train Accuracy: 0.3937, Val Loss: 1.0881, Val Accuracy: 0.3733\n","===== Epoch 1052/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6035. Train Loss: 1.0815, Train Accuracy: 0.3898, Val Loss: 1.0939, Val Accuracy: 0.3600\n","===== Epoch 1053/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6035. Train Loss: 1.0758, Train Accuracy: 0.4133, Val Loss: 1.0873, Val Accuracy: 0.3956\n","===== Epoch 1054/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6035. Train Loss: 1.0816, Train Accuracy: 0.3843, Val Loss: 1.0859, Val Accuracy: 0.3689\n","===== Epoch 1055/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6035. Train Loss: 1.0749, Train Accuracy: 0.3929, Val Loss: 1.0844, Val Accuracy: 0.3867\n","===== Epoch 1056/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6035. Train Loss: 1.0847, Train Accuracy: 0.4063, Val Loss: 1.1015, Val Accuracy: 0.3467\n","===== Epoch 1057/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6035. Train Loss: 1.0816, Train Accuracy: 0.3992, Val Loss: 1.0894, Val Accuracy: 0.3422\n","===== Epoch 1058/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6035. Train Loss: 1.0770, Train Accuracy: 0.4000, Val Loss: 1.0884, Val Accuracy: 0.3644\n","===== Epoch 1059/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6035. Train Loss: 1.0856, Train Accuracy: 0.3851, Val Loss: 1.0787, Val Accuracy: 0.4444\n","===== Epoch 1060/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6035. Train Loss: 1.0709, Train Accuracy: 0.4071, Val Loss: 1.1026, Val Accuracy: 0.3333\n","===== Epoch 1061/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6035. Train Loss: 1.0704, Train Accuracy: 0.4063, Val Loss: 1.0945, Val Accuracy: 0.3511\n","===== Epoch 1062/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6035. Train Loss: 1.0831, Train Accuracy: 0.3953, Val Loss: 1.0812, Val Accuracy: 0.3911\n","===== Epoch 1063/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6035. Train Loss: 1.0735, Train Accuracy: 0.4000, Val Loss: 1.0718, Val Accuracy: 0.4000\n","===== Epoch 1064/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6035. Train Loss: 1.0770, Train Accuracy: 0.3969, Val Loss: 1.0889, Val Accuracy: 0.3467\n","===== Epoch 1065/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6035. Train Loss: 1.0794, Train Accuracy: 0.4039, Val Loss: 1.0803, Val Accuracy: 0.3778\n","===== Epoch 1066/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6035. Train Loss: 1.0797, Train Accuracy: 0.3992, Val Loss: 1.0815, Val Accuracy: 0.3511\n","===== Epoch 1067/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6035. Train Loss: 1.0849, Train Accuracy: 0.3906, Val Loss: 1.0610, Val Accuracy: 0.4178\n","===== Epoch 1068/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6035. Train Loss: 1.0773, Train Accuracy: 0.4173, Val Loss: 1.0887, Val Accuracy: 0.3644\n","===== Epoch 1069/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6035. Train Loss: 1.0847, Train Accuracy: 0.3898, Val Loss: 1.0863, Val Accuracy: 0.3689\n","===== Epoch 1070/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6035. Train Loss: 1.0815, Train Accuracy: 0.3953, Val Loss: 1.0940, Val Accuracy: 0.3600\n","===== Epoch 1071/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6035. Train Loss: 1.0768, Train Accuracy: 0.3992, Val Loss: 1.0778, Val Accuracy: 0.4133\n","===== Epoch 1072/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6035. Train Loss: 1.0858, Train Accuracy: 0.3945, Val Loss: 1.0927, Val Accuracy: 0.3600\n","===== Epoch 1073/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6035. Train Loss: 1.0782, Train Accuracy: 0.3898, Val Loss: 1.0958, Val Accuracy: 0.3467\n","===== Epoch 1074/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6035. Train Loss: 1.0760, Train Accuracy: 0.4024, Val Loss: 1.0684, Val Accuracy: 0.4178\n","===== Epoch 1075/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6035. Train Loss: 1.0765, Train Accuracy: 0.4055, Val Loss: 1.1068, Val Accuracy: 0.3244\n","===== Epoch 1076/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6035. Train Loss: 1.0744, Train Accuracy: 0.3945, Val Loss: 1.0905, Val Accuracy: 0.3644\n","===== Epoch 1077/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6035. Train Loss: 1.0782, Train Accuracy: 0.4094, Val Loss: 1.0762, Val Accuracy: 0.4000\n","===== Epoch 1078/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6035. Train Loss: 1.0773, Train Accuracy: 0.4078, Val Loss: 1.0858, Val Accuracy: 0.3556\n","===== Epoch 1079/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6035. Train Loss: 1.0811, Train Accuracy: 0.4024, Val Loss: 1.0770, Val Accuracy: 0.3511\n","===== Epoch 1080/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6035. Train Loss: 1.0805, Train Accuracy: 0.3945, Val Loss: 1.0826, Val Accuracy: 0.4000\n","===== Epoch 1081/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6035. Train Loss: 1.0830, Train Accuracy: 0.3961, Val Loss: 1.0947, Val Accuracy: 0.3511\n","===== Epoch 1082/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6035. Train Loss: 1.0851, Train Accuracy: 0.3859, Val Loss: 1.0866, Val Accuracy: 0.3556\n","===== Epoch 1083/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6035. Train Loss: 1.0795, Train Accuracy: 0.3788, Val Loss: 1.0796, Val Accuracy: 0.3822\n","===== Epoch 1084/2000 =====\n","New best model saved with Val ROC AUC: 0.6071, Train Loss: 1.0805, Train Accuracy: 0.4039, Val Loss: 1.0716, Val Accuracy: 0.4222\n","===== Epoch 1085/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6071. Train Loss: 1.0827, Train Accuracy: 0.4000, Val Loss: 1.0803, Val Accuracy: 0.3778\n","===== Epoch 1086/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6071. Train Loss: 1.0867, Train Accuracy: 0.3718, Val Loss: 1.1041, Val Accuracy: 0.3244\n","===== Epoch 1087/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6071. Train Loss: 1.0770, Train Accuracy: 0.4071, Val Loss: 1.0837, Val Accuracy: 0.3733\n","===== Epoch 1088/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6071. Train Loss: 1.0743, Train Accuracy: 0.4188, Val Loss: 1.1020, Val Accuracy: 0.3600\n","===== Epoch 1089/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6071. Train Loss: 1.0876, Train Accuracy: 0.3686, Val Loss: 1.0848, Val Accuracy: 0.4000\n","===== Epoch 1090/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6071. Train Loss: 1.0762, Train Accuracy: 0.4110, Val Loss: 1.0661, Val Accuracy: 0.3956\n","===== Epoch 1091/2000 =====\n","New best model saved with Val ROC AUC: 0.6174, Train Loss: 1.0819, Train Accuracy: 0.3937, Val Loss: 1.0816, Val Accuracy: 0.4044\n","===== Epoch 1092/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6174. Train Loss: 1.0780, Train Accuracy: 0.3890, Val Loss: 1.0912, Val Accuracy: 0.3467\n","===== Epoch 1093/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6174. Train Loss: 1.0776, Train Accuracy: 0.4016, Val Loss: 1.1045, Val Accuracy: 0.3422\n","===== Epoch 1094/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6174. Train Loss: 1.0787, Train Accuracy: 0.4000, Val Loss: 1.0726, Val Accuracy: 0.4178\n","===== Epoch 1095/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6174. Train Loss: 1.0799, Train Accuracy: 0.4078, Val Loss: 1.1013, Val Accuracy: 0.3244\n","===== Epoch 1096/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6174. Train Loss: 1.0777, Train Accuracy: 0.4008, Val Loss: 1.0876, Val Accuracy: 0.3778\n","===== Epoch 1097/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4141, Val Loss: 1.0875, Val Accuracy: 0.4000\n","===== Epoch 1098/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6174. Train Loss: 1.0792, Train Accuracy: 0.3937, Val Loss: 1.0923, Val Accuracy: 0.3644\n","===== Epoch 1099/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6174. Train Loss: 1.0647, Train Accuracy: 0.4204, Val Loss: 1.0655, Val Accuracy: 0.4222\n","===== Epoch 1100/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6174. Train Loss: 1.0832, Train Accuracy: 0.4008, Val Loss: 1.0790, Val Accuracy: 0.4000\n","===== Epoch 1101/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6174. Train Loss: 1.0842, Train Accuracy: 0.3929, Val Loss: 1.0878, Val Accuracy: 0.3644\n","===== Epoch 1102/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6174. Train Loss: 1.0759, Train Accuracy: 0.3976, Val Loss: 1.0850, Val Accuracy: 0.3600\n","===== Epoch 1103/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6174. Train Loss: 1.0815, Train Accuracy: 0.4055, Val Loss: 1.0933, Val Accuracy: 0.3689\n","===== Epoch 1104/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6174. Train Loss: 1.0762, Train Accuracy: 0.4016, Val Loss: 1.0631, Val Accuracy: 0.4222\n","===== Epoch 1105/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6174. Train Loss: 1.0775, Train Accuracy: 0.4000, Val Loss: 1.0897, Val Accuracy: 0.3956\n","===== Epoch 1106/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.4063, Val Loss: 1.0975, Val Accuracy: 0.3333\n","===== Epoch 1107/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6174. Train Loss: 1.0703, Train Accuracy: 0.4157, Val Loss: 1.0932, Val Accuracy: 0.3467\n","===== Epoch 1108/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.4149, Val Loss: 1.0803, Val Accuracy: 0.4044\n","===== Epoch 1109/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6174. Train Loss: 1.0786, Train Accuracy: 0.4078, Val Loss: 1.0849, Val Accuracy: 0.3822\n","===== Epoch 1110/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6174. Train Loss: 1.0688, Train Accuracy: 0.4345, Val Loss: 1.0870, Val Accuracy: 0.3911\n","===== Epoch 1111/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6174. Train Loss: 1.0718, Train Accuracy: 0.3992, Val Loss: 1.0736, Val Accuracy: 0.3644\n","===== Epoch 1112/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6174. Train Loss: 1.0771, Train Accuracy: 0.4078, Val Loss: 1.0702, Val Accuracy: 0.4044\n","===== Epoch 1113/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6174. Train Loss: 1.0772, Train Accuracy: 0.4078, Val Loss: 1.0912, Val Accuracy: 0.3644\n","===== Epoch 1114/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6174. Train Loss: 1.0772, Train Accuracy: 0.3796, Val Loss: 1.0800, Val Accuracy: 0.4044\n","===== Epoch 1115/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6174. Train Loss: 1.0779, Train Accuracy: 0.4102, Val Loss: 1.0891, Val Accuracy: 0.3378\n","===== Epoch 1116/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6174. Train Loss: 1.0749, Train Accuracy: 0.3969, Val Loss: 1.0801, Val Accuracy: 0.4044\n","===== Epoch 1117/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6174. Train Loss: 1.0777, Train Accuracy: 0.4102, Val Loss: 1.0773, Val Accuracy: 0.3867\n","===== Epoch 1118/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6174. Train Loss: 1.0751, Train Accuracy: 0.4000, Val Loss: 1.0809, Val Accuracy: 0.3911\n","===== Epoch 1119/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6174. Train Loss: 1.0702, Train Accuracy: 0.4133, Val Loss: 1.0933, Val Accuracy: 0.3778\n","===== Epoch 1120/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6174. Train Loss: 1.0841, Train Accuracy: 0.3953, Val Loss: 1.0921, Val Accuracy: 0.3556\n","===== Epoch 1121/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6174. Train Loss: 1.0750, Train Accuracy: 0.4008, Val Loss: 1.0661, Val Accuracy: 0.4044\n","===== Epoch 1122/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6174. Train Loss: 1.0727, Train Accuracy: 0.4047, Val Loss: 1.0651, Val Accuracy: 0.3911\n","===== Epoch 1123/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6174. Train Loss: 1.0727, Train Accuracy: 0.3961, Val Loss: 1.0832, Val Accuracy: 0.3422\n","===== Epoch 1124/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6174. Train Loss: 1.0737, Train Accuracy: 0.4039, Val Loss: 1.0787, Val Accuracy: 0.3689\n","===== Epoch 1125/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6174. Train Loss: 1.0816, Train Accuracy: 0.3859, Val Loss: 1.0898, Val Accuracy: 0.3822\n","===== Epoch 1126/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6174. Train Loss: 1.0655, Train Accuracy: 0.4212, Val Loss: 1.0533, Val Accuracy: 0.3956\n","===== Epoch 1127/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6174. Train Loss: 1.0657, Train Accuracy: 0.4267, Val Loss: 1.0732, Val Accuracy: 0.4267\n","===== Epoch 1128/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6174. Train Loss: 1.0720, Train Accuracy: 0.4086, Val Loss: 1.0653, Val Accuracy: 0.4178\n","===== Epoch 1129/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6174. Train Loss: 1.0655, Train Accuracy: 0.4251, Val Loss: 1.0929, Val Accuracy: 0.3467\n","===== Epoch 1130/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6174. Train Loss: 1.0677, Train Accuracy: 0.4165, Val Loss: 1.0849, Val Accuracy: 0.3378\n","===== Epoch 1131/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6174. Train Loss: 1.0734, Train Accuracy: 0.4000, Val Loss: 1.0613, Val Accuracy: 0.4044\n","===== Epoch 1132/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6174. Train Loss: 1.0695, Train Accuracy: 0.4008, Val Loss: 1.0869, Val Accuracy: 0.3600\n","===== Epoch 1133/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6174. Train Loss: 1.0671, Train Accuracy: 0.4235, Val Loss: 1.0806, Val Accuracy: 0.4356\n","===== Epoch 1134/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6174. Train Loss: 1.0720, Train Accuracy: 0.3929, Val Loss: 1.0856, Val Accuracy: 0.3778\n","===== Epoch 1135/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6174. Train Loss: 1.0670, Train Accuracy: 0.4157, Val Loss: 1.0706, Val Accuracy: 0.3956\n","===== Epoch 1136/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6174. Train Loss: 1.0702, Train Accuracy: 0.4196, Val Loss: 1.0961, Val Accuracy: 0.3156\n","===== Epoch 1137/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6174. Train Loss: 1.0652, Train Accuracy: 0.4094, Val Loss: 1.0716, Val Accuracy: 0.4133\n","===== Epoch 1138/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6174. Train Loss: 1.0679, Train Accuracy: 0.4267, Val Loss: 1.0718, Val Accuracy: 0.3822\n","===== Epoch 1139/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6174. Train Loss: 1.0711, Train Accuracy: 0.4031, Val Loss: 1.0839, Val Accuracy: 0.3956\n","===== Epoch 1140/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6174. Train Loss: 1.0758, Train Accuracy: 0.3992, Val Loss: 1.0638, Val Accuracy: 0.4178\n","===== Epoch 1141/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.6174. Train Loss: 1.0693, Train Accuracy: 0.4094, Val Loss: 1.0749, Val Accuracy: 0.3867\n","===== Epoch 1142/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.6174. Train Loss: 1.0758, Train Accuracy: 0.3976, Val Loss: 1.0816, Val Accuracy: 0.3867\n","===== Epoch 1143/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4204, Val Loss: 1.0794, Val Accuracy: 0.3689\n","===== Epoch 1144/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.6174. Train Loss: 1.0633, Train Accuracy: 0.4384, Val Loss: 1.0656, Val Accuracy: 0.4089\n","===== Epoch 1145/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.3984, Val Loss: 1.0787, Val Accuracy: 0.3822\n","===== Epoch 1146/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.6174. Train Loss: 1.0691, Train Accuracy: 0.4110, Val Loss: 1.0653, Val Accuracy: 0.4044\n","===== Epoch 1147/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.6174. Train Loss: 1.0678, Train Accuracy: 0.4196, Val Loss: 1.0764, Val Accuracy: 0.4044\n","===== Epoch 1148/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.6174. Train Loss: 1.0713, Train Accuracy: 0.3992, Val Loss: 1.0987, Val Accuracy: 0.3733\n","===== Epoch 1149/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.6174. Train Loss: 1.0760, Train Accuracy: 0.3953, Val Loss: 1.0923, Val Accuracy: 0.3911\n","===== Epoch 1150/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.6174. Train Loss: 1.0661, Train Accuracy: 0.4008, Val Loss: 1.0730, Val Accuracy: 0.4000\n","===== Epoch 1151/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.6174. Train Loss: 1.0733, Train Accuracy: 0.4102, Val Loss: 1.0767, Val Accuracy: 0.3822\n","===== Epoch 1152/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.6174. Train Loss: 1.0757, Train Accuracy: 0.3898, Val Loss: 1.0579, Val Accuracy: 0.4000\n","===== Epoch 1153/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.6174. Train Loss: 1.0724, Train Accuracy: 0.4110, Val Loss: 1.0858, Val Accuracy: 0.3778\n","===== Epoch 1154/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.6174. Train Loss: 1.0736, Train Accuracy: 0.4078, Val Loss: 1.0819, Val Accuracy: 0.3867\n","===== Epoch 1155/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.6174. Train Loss: 1.0684, Train Accuracy: 0.4031, Val Loss: 1.0921, Val Accuracy: 0.3600\n","===== Epoch 1156/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4063, Val Loss: 1.0861, Val Accuracy: 0.3911\n","===== Epoch 1157/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4110, Val Loss: 1.0825, Val Accuracy: 0.3778\n","===== Epoch 1158/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.6174. Train Loss: 1.0574, Train Accuracy: 0.4329, Val Loss: 1.0758, Val Accuracy: 0.3511\n","===== Epoch 1159/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.6174. Train Loss: 1.0641, Train Accuracy: 0.4227, Val Loss: 1.0655, Val Accuracy: 0.4178\n","===== Epoch 1160/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.6174. Train Loss: 1.0780, Train Accuracy: 0.4071, Val Loss: 1.0599, Val Accuracy: 0.4044\n","===== Epoch 1161/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.6174. Train Loss: 1.0767, Train Accuracy: 0.3945, Val Loss: 1.0969, Val Accuracy: 0.3556\n","===== Epoch 1162/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4133, Val Loss: 1.0697, Val Accuracy: 0.3600\n","===== Epoch 1163/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.6174. Train Loss: 1.0715, Train Accuracy: 0.4016, Val Loss: 1.0934, Val Accuracy: 0.3733\n","===== Epoch 1164/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.6174. Train Loss: 1.0681, Train Accuracy: 0.4102, Val Loss: 1.0784, Val Accuracy: 0.3822\n","===== Epoch 1165/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.6174. Train Loss: 1.0749, Train Accuracy: 0.3929, Val Loss: 1.0814, Val Accuracy: 0.3333\n","===== Epoch 1166/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.6174. Train Loss: 1.0634, Train Accuracy: 0.4337, Val Loss: 1.0820, Val Accuracy: 0.3733\n","===== Epoch 1167/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.6174. Train Loss: 1.0684, Train Accuracy: 0.4220, Val Loss: 1.0862, Val Accuracy: 0.3733\n","===== Epoch 1168/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.6174. Train Loss: 1.0678, Train Accuracy: 0.4110, Val Loss: 1.0974, Val Accuracy: 0.3422\n","===== Epoch 1169/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.6174. Train Loss: 1.0700, Train Accuracy: 0.4071, Val Loss: 1.0812, Val Accuracy: 0.3733\n","===== Epoch 1170/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.6174. Train Loss: 1.0679, Train Accuracy: 0.4071, Val Loss: 1.1011, Val Accuracy: 0.3467\n","===== Epoch 1171/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.6174. Train Loss: 1.0667, Train Accuracy: 0.4141, Val Loss: 1.0860, Val Accuracy: 0.3956\n","===== Epoch 1172/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.6174. Train Loss: 1.0723, Train Accuracy: 0.3937, Val Loss: 1.0757, Val Accuracy: 0.3911\n","===== Epoch 1173/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.6174. Train Loss: 1.0729, Train Accuracy: 0.4094, Val Loss: 1.0816, Val Accuracy: 0.3600\n","===== Epoch 1174/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.6174. Train Loss: 1.0648, Train Accuracy: 0.4180, Val Loss: 1.0946, Val Accuracy: 0.3822\n","===== Epoch 1175/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.6174. Train Loss: 1.0714, Train Accuracy: 0.4047, Val Loss: 1.1070, Val Accuracy: 0.3644\n","===== Epoch 1176/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.6174. Train Loss: 1.0656, Train Accuracy: 0.4204, Val Loss: 1.1045, Val Accuracy: 0.3467\n","===== Epoch 1177/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.6174. Train Loss: 1.0742, Train Accuracy: 0.3961, Val Loss: 1.0841, Val Accuracy: 0.3422\n","===== Epoch 1178/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.6174. Train Loss: 1.0654, Train Accuracy: 0.4102, Val Loss: 1.0843, Val Accuracy: 0.3867\n","===== Epoch 1179/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4016, Val Loss: 1.0697, Val Accuracy: 0.4000\n","===== Epoch 1180/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.6174. Train Loss: 1.0603, Train Accuracy: 0.4188, Val Loss: 1.0910, Val Accuracy: 0.3556\n","===== Epoch 1181/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.6174. Train Loss: 1.0747, Train Accuracy: 0.3969, Val Loss: 1.0912, Val Accuracy: 0.3867\n","===== Epoch 1182/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.6174. Train Loss: 1.0776, Train Accuracy: 0.3906, Val Loss: 1.0669, Val Accuracy: 0.4178\n","===== Epoch 1183/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.6174. Train Loss: 1.0844, Train Accuracy: 0.3765, Val Loss: 1.0752, Val Accuracy: 0.3689\n","===== Epoch 1184/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.6174. Train Loss: 1.0698, Train Accuracy: 0.4063, Val Loss: 1.0700, Val Accuracy: 0.3822\n","===== Epoch 1185/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4306, Val Loss: 1.0710, Val Accuracy: 0.3911\n","===== Epoch 1186/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.6174. Train Loss: 1.0630, Train Accuracy: 0.4094, Val Loss: 1.1082, Val Accuracy: 0.3467\n","===== Epoch 1187/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.6174. Train Loss: 1.0839, Train Accuracy: 0.3867, Val Loss: 1.0842, Val Accuracy: 0.3822\n","===== Epoch 1188/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.6174. Train Loss: 1.0670, Train Accuracy: 0.4173, Val Loss: 1.0756, Val Accuracy: 0.3778\n","===== Epoch 1189/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.6174. Train Loss: 1.0695, Train Accuracy: 0.4227, Val Loss: 1.0862, Val Accuracy: 0.3689\n","===== Epoch 1190/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.6174. Train Loss: 1.0597, Train Accuracy: 0.4314, Val Loss: 1.0588, Val Accuracy: 0.4311\n","===== Epoch 1191/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.6174. Train Loss: 1.0728, Train Accuracy: 0.4118, Val Loss: 1.0942, Val Accuracy: 0.3511\n","===== Epoch 1192/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.6174. Train Loss: 1.0801, Train Accuracy: 0.4039, Val Loss: 1.0763, Val Accuracy: 0.3511\n","===== Epoch 1193/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.6174. Train Loss: 1.0667, Train Accuracy: 0.3804, Val Loss: 1.0769, Val Accuracy: 0.3867\n","===== Epoch 1194/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.6174. Train Loss: 1.0707, Train Accuracy: 0.4259, Val Loss: 1.0842, Val Accuracy: 0.3600\n","===== Epoch 1195/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.6174. Train Loss: 1.0759, Train Accuracy: 0.4078, Val Loss: 1.1045, Val Accuracy: 0.3600\n","===== Epoch 1196/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.6174. Train Loss: 1.0630, Train Accuracy: 0.4243, Val Loss: 1.0682, Val Accuracy: 0.3511\n","===== Epoch 1197/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.6174. Train Loss: 1.0635, Train Accuracy: 0.4071, Val Loss: 1.0976, Val Accuracy: 0.3733\n","===== Epoch 1198/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.6174. Train Loss: 1.0681, Train Accuracy: 0.4063, Val Loss: 1.0628, Val Accuracy: 0.3867\n","===== Epoch 1199/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.6174. Train Loss: 1.0658, Train Accuracy: 0.4251, Val Loss: 1.0934, Val Accuracy: 0.3956\n","===== Epoch 1200/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.6174. Train Loss: 1.0768, Train Accuracy: 0.3945, Val Loss: 1.0619, Val Accuracy: 0.3778\n","===== Epoch 1201/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.6174. Train Loss: 1.0746, Train Accuracy: 0.4016, Val Loss: 1.0772, Val Accuracy: 0.3733\n","===== Epoch 1202/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.6174. Train Loss: 1.0675, Train Accuracy: 0.4329, Val Loss: 1.0696, Val Accuracy: 0.3911\n","===== Epoch 1203/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.6174. Train Loss: 1.0737, Train Accuracy: 0.4047, Val Loss: 1.0564, Val Accuracy: 0.4267\n","===== Epoch 1204/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.6174. Train Loss: 1.0662, Train Accuracy: 0.4063, Val Loss: 1.0761, Val Accuracy: 0.3644\n","===== Epoch 1205/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.6174. Train Loss: 1.0685, Train Accuracy: 0.4102, Val Loss: 1.0598, Val Accuracy: 0.3644\n","===== Epoch 1206/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.6174. Train Loss: 1.0609, Train Accuracy: 0.4110, Val Loss: 1.0757, Val Accuracy: 0.3822\n","===== Epoch 1207/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.6174. Train Loss: 1.0626, Train Accuracy: 0.4149, Val Loss: 1.0950, Val Accuracy: 0.3600\n","===== Epoch 1208/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.6174. Train Loss: 1.0642, Train Accuracy: 0.4063, Val Loss: 1.0755, Val Accuracy: 0.3822\n","===== Epoch 1209/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.6174. Train Loss: 1.0625, Train Accuracy: 0.4227, Val Loss: 1.0673, Val Accuracy: 0.4044\n","===== Epoch 1210/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.6174. Train Loss: 1.0692, Train Accuracy: 0.3875, Val Loss: 1.0640, Val Accuracy: 0.4044\n","===== Epoch 1211/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.6174. Train Loss: 1.0671, Train Accuracy: 0.4094, Val Loss: 1.0574, Val Accuracy: 0.4222\n","===== Epoch 1212/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4063, Val Loss: 1.0652, Val Accuracy: 0.3956\n","===== Epoch 1213/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.6174. Train Loss: 1.0755, Train Accuracy: 0.3922, Val Loss: 1.0602, Val Accuracy: 0.4444\n","===== Epoch 1214/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.6174. Train Loss: 1.0663, Train Accuracy: 0.4212, Val Loss: 1.0706, Val Accuracy: 0.3689\n","===== Epoch 1215/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.6174. Train Loss: 1.0591, Train Accuracy: 0.4133, Val Loss: 1.1195, Val Accuracy: 0.3378\n","===== Epoch 1216/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4047, Val Loss: 1.0605, Val Accuracy: 0.3867\n","===== Epoch 1217/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.6174. Train Loss: 1.0696, Train Accuracy: 0.4055, Val Loss: 1.0623, Val Accuracy: 0.4089\n","===== Epoch 1218/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.6174. Train Loss: 1.0598, Train Accuracy: 0.4282, Val Loss: 1.0772, Val Accuracy: 0.4000\n","===== Epoch 1219/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.6174. Train Loss: 1.0668, Train Accuracy: 0.4275, Val Loss: 1.0730, Val Accuracy: 0.3911\n","===== Epoch 1220/2000 =====\n","New best model saved with Val ROC AUC: 0.6267, Train Loss: 1.0569, Train Accuracy: 0.4431, Val Loss: 1.0457, Val Accuracy: 0.4311\n","===== Epoch 1221/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6267. Train Loss: 1.0629, Train Accuracy: 0.4235, Val Loss: 1.0713, Val Accuracy: 0.4044\n","===== Epoch 1222/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6267. Train Loss: 1.0485, Train Accuracy: 0.4400, Val Loss: 1.0444, Val Accuracy: 0.4178\n","===== Epoch 1223/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6267. Train Loss: 1.0517, Train Accuracy: 0.4439, Val Loss: 1.0611, Val Accuracy: 0.4000\n","===== Epoch 1224/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6267. Train Loss: 1.0551, Train Accuracy: 0.4353, Val Loss: 1.0692, Val Accuracy: 0.3644\n","===== Epoch 1225/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6267. Train Loss: 1.0576, Train Accuracy: 0.4165, Val Loss: 1.0814, Val Accuracy: 0.3600\n","===== Epoch 1226/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6267. Train Loss: 1.0513, Train Accuracy: 0.4337, Val Loss: 1.0849, Val Accuracy: 0.3422\n","===== Epoch 1227/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6267. Train Loss: 1.0589, Train Accuracy: 0.4290, Val Loss: 1.0535, Val Accuracy: 0.4133\n","===== Epoch 1228/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6267. Train Loss: 1.0582, Train Accuracy: 0.4275, Val Loss: 1.0681, Val Accuracy: 0.4133\n","===== Epoch 1229/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6267. Train Loss: 1.0574, Train Accuracy: 0.4290, Val Loss: 1.0690, Val Accuracy: 0.4133\n","===== Epoch 1230/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6267. Train Loss: 1.0541, Train Accuracy: 0.4298, Val Loss: 1.1027, Val Accuracy: 0.3778\n","===== Epoch 1231/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6267. Train Loss: 1.0564, Train Accuracy: 0.4298, Val Loss: 1.0696, Val Accuracy: 0.3778\n","===== Epoch 1232/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6267. Train Loss: 1.0494, Train Accuracy: 0.4400, Val Loss: 1.0392, Val Accuracy: 0.4400\n","===== Epoch 1233/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6267. Train Loss: 1.0583, Train Accuracy: 0.4196, Val Loss: 1.0596, Val Accuracy: 0.3911\n","===== Epoch 1234/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6267. Train Loss: 1.0622, Train Accuracy: 0.4031, Val Loss: 1.0675, Val Accuracy: 0.4000\n","===== Epoch 1235/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6267. Train Loss: 1.0599, Train Accuracy: 0.4078, Val Loss: 1.0627, Val Accuracy: 0.4089\n","===== Epoch 1236/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6267. Train Loss: 1.0547, Train Accuracy: 0.4392, Val Loss: 1.0704, Val Accuracy: 0.3867\n","===== Epoch 1237/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6267. Train Loss: 1.0552, Train Accuracy: 0.4235, Val Loss: 1.0758, Val Accuracy: 0.4133\n","===== Epoch 1238/2000 =====\n","New best model saved with Val ROC AUC: 0.6283, Train Loss: 1.0600, Train Accuracy: 0.4125, Val Loss: 1.0499, Val Accuracy: 0.4311\n","===== Epoch 1239/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6283. Train Loss: 1.0587, Train Accuracy: 0.4282, Val Loss: 1.0666, Val Accuracy: 0.4178\n","===== Epoch 1240/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6283. Train Loss: 1.0550, Train Accuracy: 0.4282, Val Loss: 1.0470, Val Accuracy: 0.4356\n","===== Epoch 1241/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6283. Train Loss: 1.0643, Train Accuracy: 0.4173, Val Loss: 1.0572, Val Accuracy: 0.4178\n","===== Epoch 1242/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6283. Train Loss: 1.0612, Train Accuracy: 0.4220, Val Loss: 1.0641, Val Accuracy: 0.4178\n","===== Epoch 1243/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6283. Train Loss: 1.0583, Train Accuracy: 0.4306, Val Loss: 1.0666, Val Accuracy: 0.4089\n","===== Epoch 1244/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6283. Train Loss: 1.0479, Train Accuracy: 0.4533, Val Loss: 1.0832, Val Accuracy: 0.4044\n","===== Epoch 1245/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6283. Train Loss: 1.0542, Train Accuracy: 0.4353, Val Loss: 1.0835, Val Accuracy: 0.3911\n","===== Epoch 1246/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6283. Train Loss: 1.0605, Train Accuracy: 0.4157, Val Loss: 1.0840, Val Accuracy: 0.4089\n","===== Epoch 1247/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6283. Train Loss: 1.0564, Train Accuracy: 0.4204, Val Loss: 1.0704, Val Accuracy: 0.4133\n","===== Epoch 1248/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6283. Train Loss: 1.0534, Train Accuracy: 0.4212, Val Loss: 1.0529, Val Accuracy: 0.4222\n","===== Epoch 1249/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6283. Train Loss: 1.0518, Train Accuracy: 0.4337, Val Loss: 1.0617, Val Accuracy: 0.3956\n","===== Epoch 1250/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6283. Train Loss: 1.0557, Train Accuracy: 0.4290, Val Loss: 1.0783, Val Accuracy: 0.3822\n","===== Epoch 1251/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6283. Train Loss: 1.0607, Train Accuracy: 0.4173, Val Loss: 1.0607, Val Accuracy: 0.4133\n","===== Epoch 1252/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6283. Train Loss: 1.0494, Train Accuracy: 0.4463, Val Loss: 1.0672, Val Accuracy: 0.4356\n","===== Epoch 1253/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6283. Train Loss: 1.0622, Train Accuracy: 0.4071, Val Loss: 1.0551, Val Accuracy: 0.4044\n","===== Epoch 1254/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6283. Train Loss: 1.0612, Train Accuracy: 0.4329, Val Loss: 1.0747, Val Accuracy: 0.3600\n","===== Epoch 1255/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6283. Train Loss: 1.0557, Train Accuracy: 0.4243, Val Loss: 1.0659, Val Accuracy: 0.3822\n","===== Epoch 1256/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6283. Train Loss: 1.0514, Train Accuracy: 0.4408, Val Loss: 1.0674, Val Accuracy: 0.4089\n","===== Epoch 1257/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6283. Train Loss: 1.0499, Train Accuracy: 0.4259, Val Loss: 1.0636, Val Accuracy: 0.4578\n","===== Epoch 1258/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6283. Train Loss: 1.0559, Train Accuracy: 0.4345, Val Loss: 1.0575, Val Accuracy: 0.4222\n","===== Epoch 1259/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6283. Train Loss: 1.0584, Train Accuracy: 0.4125, Val Loss: 1.0615, Val Accuracy: 0.3911\n","===== Epoch 1260/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6283. Train Loss: 1.0595, Train Accuracy: 0.4290, Val Loss: 1.0526, Val Accuracy: 0.4267\n","===== Epoch 1261/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6283. Train Loss: 1.0574, Train Accuracy: 0.4353, Val Loss: 1.0574, Val Accuracy: 0.3733\n","===== Epoch 1262/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6283. Train Loss: 1.0594, Train Accuracy: 0.4322, Val Loss: 1.0598, Val Accuracy: 0.4044\n","===== Epoch 1263/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6283. Train Loss: 1.0524, Train Accuracy: 0.4369, Val Loss: 1.0695, Val Accuracy: 0.3911\n","===== Epoch 1264/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6283. Train Loss: 1.0538, Train Accuracy: 0.4259, Val Loss: 1.0544, Val Accuracy: 0.3956\n","===== Epoch 1265/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6283. Train Loss: 1.0649, Train Accuracy: 0.4141, Val Loss: 1.0470, Val Accuracy: 0.4089\n","===== Epoch 1266/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6283. Train Loss: 1.0516, Train Accuracy: 0.4290, Val Loss: 1.0615, Val Accuracy: 0.4089\n","===== Epoch 1267/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6283. Train Loss: 1.0574, Train Accuracy: 0.4227, Val Loss: 1.0624, Val Accuracy: 0.3822\n","===== Epoch 1268/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6283. Train Loss: 1.0604, Train Accuracy: 0.4086, Val Loss: 1.0690, Val Accuracy: 0.3822\n","===== Epoch 1269/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6283. Train Loss: 1.0558, Train Accuracy: 0.4259, Val Loss: 1.0596, Val Accuracy: 0.3956\n","===== Epoch 1270/2000 =====\n","New best model saved with Val ROC AUC: 0.6361, Train Loss: 1.0486, Train Accuracy: 0.4298, Val Loss: 1.0385, Val Accuracy: 0.4089\n","===== Epoch 1271/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6361. Train Loss: 1.0553, Train Accuracy: 0.4220, Val Loss: 1.0665, Val Accuracy: 0.4178\n","===== Epoch 1272/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6361. Train Loss: 1.0523, Train Accuracy: 0.4290, Val Loss: 1.0854, Val Accuracy: 0.3733\n","===== Epoch 1273/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6361. Train Loss: 1.0664, Train Accuracy: 0.4180, Val Loss: 1.0699, Val Accuracy: 0.3778\n","===== Epoch 1274/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6361. Train Loss: 1.0606, Train Accuracy: 0.4282, Val Loss: 1.0961, Val Accuracy: 0.3733\n","===== Epoch 1275/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6361. Train Loss: 1.0610, Train Accuracy: 0.4157, Val Loss: 1.0667, Val Accuracy: 0.4044\n","===== Epoch 1276/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6361. Train Loss: 1.0530, Train Accuracy: 0.4353, Val Loss: 1.0648, Val Accuracy: 0.4000\n","===== Epoch 1277/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6361. Train Loss: 1.0530, Train Accuracy: 0.4329, Val Loss: 1.0651, Val Accuracy: 0.3911\n","===== Epoch 1278/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6361. Train Loss: 1.0602, Train Accuracy: 0.4369, Val Loss: 1.0679, Val Accuracy: 0.4000\n","===== Epoch 1279/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6361. Train Loss: 1.0648, Train Accuracy: 0.4157, Val Loss: 1.0384, Val Accuracy: 0.4133\n","===== Epoch 1280/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6361. Train Loss: 1.0498, Train Accuracy: 0.4290, Val Loss: 1.0454, Val Accuracy: 0.4267\n","===== Epoch 1281/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6361. Train Loss: 1.0660, Train Accuracy: 0.4173, Val Loss: 1.0506, Val Accuracy: 0.4533\n","===== Epoch 1282/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6361. Train Loss: 1.0539, Train Accuracy: 0.4306, Val Loss: 1.0822, Val Accuracy: 0.3600\n","===== Epoch 1283/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6361. Train Loss: 1.0536, Train Accuracy: 0.4290, Val Loss: 1.0668, Val Accuracy: 0.4089\n","===== Epoch 1284/2000 =====\n","New best model saved with Val ROC AUC: 0.6425, Train Loss: 1.0676, Train Accuracy: 0.3976, Val Loss: 1.0440, Val Accuracy: 0.4756\n","===== Epoch 1285/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6425. Train Loss: 1.0518, Train Accuracy: 0.4369, Val Loss: 1.0736, Val Accuracy: 0.4044\n","===== Epoch 1286/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6425. Train Loss: 1.0552, Train Accuracy: 0.4259, Val Loss: 1.0400, Val Accuracy: 0.4711\n","===== Epoch 1287/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6425. Train Loss: 1.0565, Train Accuracy: 0.4353, Val Loss: 1.0694, Val Accuracy: 0.4044\n","===== Epoch 1288/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6425. Train Loss: 1.0488, Train Accuracy: 0.4282, Val Loss: 1.0309, Val Accuracy: 0.4533\n","===== Epoch 1289/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6425. Train Loss: 1.0545, Train Accuracy: 0.4235, Val Loss: 1.1067, Val Accuracy: 0.3378\n","===== Epoch 1290/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6425. Train Loss: 1.0674, Train Accuracy: 0.4024, Val Loss: 1.0224, Val Accuracy: 0.4044\n","===== Epoch 1291/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6425. Train Loss: 1.0458, Train Accuracy: 0.4424, Val Loss: 1.0955, Val Accuracy: 0.3600\n","===== Epoch 1292/2000 =====\n","New best model saved with Val ROC AUC: 0.6506, Train Loss: 1.0631, Train Accuracy: 0.4376, Val Loss: 1.0326, Val Accuracy: 0.4578\n","===== Epoch 1293/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6506. Train Loss: 1.0600, Train Accuracy: 0.4188, Val Loss: 1.0722, Val Accuracy: 0.3822\n","===== Epoch 1294/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6506. Train Loss: 1.0567, Train Accuracy: 0.4431, Val Loss: 1.0532, Val Accuracy: 0.4133\n","===== Epoch 1295/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6506. Train Loss: 1.0761, Train Accuracy: 0.3820, Val Loss: 1.0647, Val Accuracy: 0.4089\n","===== Epoch 1296/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6506. Train Loss: 1.0597, Train Accuracy: 0.4204, Val Loss: 1.0411, Val Accuracy: 0.4533\n","===== Epoch 1297/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6506. Train Loss: 1.0590, Train Accuracy: 0.4196, Val Loss: 1.0536, Val Accuracy: 0.4000\n","===== Epoch 1298/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6506. Train Loss: 1.0497, Train Accuracy: 0.4400, Val Loss: 1.0776, Val Accuracy: 0.4000\n","===== Epoch 1299/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6506. Train Loss: 1.0523, Train Accuracy: 0.4400, Val Loss: 1.0458, Val Accuracy: 0.4178\n","===== Epoch 1300/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6506. Train Loss: 1.0631, Train Accuracy: 0.4133, Val Loss: 1.0609, Val Accuracy: 0.4267\n","===== Epoch 1301/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6506. Train Loss: 1.0485, Train Accuracy: 0.4369, Val Loss: 1.0903, Val Accuracy: 0.3689\n","===== Epoch 1302/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6506. Train Loss: 1.0501, Train Accuracy: 0.4267, Val Loss: 1.0713, Val Accuracy: 0.4000\n","===== Epoch 1303/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6506. Train Loss: 1.0631, Train Accuracy: 0.4243, Val Loss: 1.0525, Val Accuracy: 0.4178\n","===== Epoch 1304/2000 =====\n","New best model saved with Val ROC AUC: 0.6553, Train Loss: 1.0399, Train Accuracy: 0.4549, Val Loss: 1.0385, Val Accuracy: 0.4400\n","===== Epoch 1305/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6553. Train Loss: 1.0387, Train Accuracy: 0.4478, Val Loss: 1.0349, Val Accuracy: 0.4356\n","===== Epoch 1306/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6553. Train Loss: 1.0233, Train Accuracy: 0.4698, Val Loss: 1.0448, Val Accuracy: 0.4400\n","===== Epoch 1307/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6553. Train Loss: 1.0606, Train Accuracy: 0.4369, Val Loss: 1.0317, Val Accuracy: 0.4444\n","===== Epoch 1308/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6553. Train Loss: 1.0449, Train Accuracy: 0.4251, Val Loss: 1.0338, Val Accuracy: 0.4533\n","===== Epoch 1309/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6553. Train Loss: 1.0538, Train Accuracy: 0.4314, Val Loss: 1.0628, Val Accuracy: 0.4089\n","===== Epoch 1310/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6553. Train Loss: 1.0578, Train Accuracy: 0.4133, Val Loss: 1.0577, Val Accuracy: 0.4089\n","===== Epoch 1311/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6553. Train Loss: 1.0432, Train Accuracy: 0.4471, Val Loss: 1.0554, Val Accuracy: 0.4133\n","===== Epoch 1312/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6553. Train Loss: 1.0470, Train Accuracy: 0.4549, Val Loss: 1.0418, Val Accuracy: 0.4578\n","===== Epoch 1313/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6553. Train Loss: 1.0440, Train Accuracy: 0.4588, Val Loss: 1.0289, Val Accuracy: 0.4444\n","===== Epoch 1314/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6553. Train Loss: 1.0352, Train Accuracy: 0.4478, Val Loss: 1.0618, Val Accuracy: 0.3911\n","===== Epoch 1315/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6553. Train Loss: 1.0542, Train Accuracy: 0.4188, Val Loss: 1.0600, Val Accuracy: 0.3956\n","===== Epoch 1316/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6553. Train Loss: 1.0427, Train Accuracy: 0.4314, Val Loss: 1.0661, Val Accuracy: 0.3911\n","===== Epoch 1317/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6553. Train Loss: 1.0367, Train Accuracy: 0.4392, Val Loss: 1.0607, Val Accuracy: 0.4178\n","===== Epoch 1318/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6553. Train Loss: 1.0391, Train Accuracy: 0.4275, Val Loss: 1.0648, Val Accuracy: 0.3911\n","===== Epoch 1319/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6553. Train Loss: 1.0443, Train Accuracy: 0.4376, Val Loss: 1.0888, Val Accuracy: 0.3556\n","===== Epoch 1320/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6553. Train Loss: 1.0415, Train Accuracy: 0.4400, Val Loss: 1.0571, Val Accuracy: 0.4089\n","===== Epoch 1321/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6553. Train Loss: 1.0327, Train Accuracy: 0.4478, Val Loss: 1.0296, Val Accuracy: 0.4044\n","===== Epoch 1322/2000 =====\n","New best model saved with Val ROC AUC: 0.6661, Train Loss: 1.0493, Train Accuracy: 0.4353, Val Loss: 1.0125, Val Accuracy: 0.4933\n","===== Epoch 1323/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6661. Train Loss: 1.0396, Train Accuracy: 0.4408, Val Loss: 1.0437, Val Accuracy: 0.4533\n","===== Epoch 1324/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6661. Train Loss: 1.0235, Train Accuracy: 0.4455, Val Loss: 1.0331, Val Accuracy: 0.4222\n","===== Epoch 1325/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6661. Train Loss: 1.0282, Train Accuracy: 0.4596, Val Loss: 1.0390, Val Accuracy: 0.3911\n","===== Epoch 1326/2000 =====\n","New best model saved with Val ROC AUC: 0.6772, Train Loss: 1.0274, Train Accuracy: 0.4533, Val Loss: 1.0302, Val Accuracy: 0.4267\n","===== Epoch 1327/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6772. Train Loss: 1.0412, Train Accuracy: 0.4463, Val Loss: 1.0425, Val Accuracy: 0.4133\n","===== Epoch 1328/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6772. Train Loss: 1.0354, Train Accuracy: 0.4471, Val Loss: 1.0391, Val Accuracy: 0.4800\n","===== Epoch 1329/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6772. Train Loss: 1.0311, Train Accuracy: 0.4643, Val Loss: 1.0061, Val Accuracy: 0.4622\n","===== Epoch 1330/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6772. Train Loss: 1.0282, Train Accuracy: 0.4525, Val Loss: 1.0423, Val Accuracy: 0.4000\n","===== Epoch 1331/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6772. Train Loss: 1.0377, Train Accuracy: 0.4408, Val Loss: 1.0261, Val Accuracy: 0.4089\n","===== Epoch 1332/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6772. Train Loss: 1.0164, Train Accuracy: 0.4769, Val Loss: 1.0384, Val Accuracy: 0.4578\n","===== Epoch 1333/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6772. Train Loss: 1.0278, Train Accuracy: 0.4408, Val Loss: 1.0100, Val Accuracy: 0.4622\n","===== Epoch 1334/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6772. Train Loss: 1.0415, Train Accuracy: 0.4494, Val Loss: 1.0166, Val Accuracy: 0.4667\n","===== Epoch 1335/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6772. Train Loss: 1.0231, Train Accuracy: 0.4612, Val Loss: 1.0193, Val Accuracy: 0.4444\n","===== Epoch 1336/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6772. Train Loss: 1.0363, Train Accuracy: 0.4478, Val Loss: 1.0066, Val Accuracy: 0.4578\n","===== Epoch 1337/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6772. Train Loss: 1.0244, Train Accuracy: 0.4525, Val Loss: 1.0415, Val Accuracy: 0.4356\n","===== Epoch 1338/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6772. Train Loss: 1.0331, Train Accuracy: 0.4400, Val Loss: 1.0514, Val Accuracy: 0.4044\n","===== Epoch 1339/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6772. Train Loss: 1.0387, Train Accuracy: 0.4439, Val Loss: 1.0490, Val Accuracy: 0.3911\n","===== Epoch 1340/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6772. Train Loss: 1.0411, Train Accuracy: 0.4510, Val Loss: 1.0543, Val Accuracy: 0.4222\n","===== Epoch 1341/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6772. Train Loss: 1.0318, Train Accuracy: 0.4682, Val Loss: 1.0462, Val Accuracy: 0.4311\n","===== Epoch 1342/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6772. Train Loss: 1.0327, Train Accuracy: 0.4447, Val Loss: 1.0310, Val Accuracy: 0.4667\n","===== Epoch 1343/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6772. Train Loss: 1.0214, Train Accuracy: 0.4698, Val Loss: 1.0126, Val Accuracy: 0.4756\n","===== Epoch 1344/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6772. Train Loss: 1.0418, Train Accuracy: 0.4416, Val Loss: 1.0316, Val Accuracy: 0.4044\n","===== Epoch 1345/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6772. Train Loss: 1.0219, Train Accuracy: 0.4659, Val Loss: 1.0483, Val Accuracy: 0.4311\n","===== Epoch 1346/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6772. Train Loss: 1.0381, Train Accuracy: 0.4455, Val Loss: 1.0358, Val Accuracy: 0.4311\n","===== Epoch 1347/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6772. Train Loss: 1.0360, Train Accuracy: 0.4471, Val Loss: 1.0286, Val Accuracy: 0.4578\n","===== Epoch 1348/2000 =====\n","New best model saved with Val ROC AUC: 0.6795, Train Loss: 1.0288, Train Accuracy: 0.4533, Val Loss: 1.0155, Val Accuracy: 0.4711\n","===== Epoch 1349/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6795. Train Loss: 1.0332, Train Accuracy: 0.4596, Val Loss: 1.0409, Val Accuracy: 0.4222\n","===== Epoch 1350/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6795. Train Loss: 1.0281, Train Accuracy: 0.4549, Val Loss: 1.0080, Val Accuracy: 0.4578\n","===== Epoch 1351/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6795. Train Loss: 1.0272, Train Accuracy: 0.4533, Val Loss: 1.0373, Val Accuracy: 0.4311\n","===== Epoch 1352/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6795. Train Loss: 1.0224, Train Accuracy: 0.4525, Val Loss: 1.0225, Val Accuracy: 0.4711\n","===== Epoch 1353/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6795. Train Loss: 1.0206, Train Accuracy: 0.4463, Val Loss: 1.0280, Val Accuracy: 0.4533\n","===== Epoch 1354/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6795. Train Loss: 1.0257, Train Accuracy: 0.4667, Val Loss: 0.9936, Val Accuracy: 0.4844\n","===== Epoch 1355/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6795. Train Loss: 1.0252, Train Accuracy: 0.4627, Val Loss: 1.0329, Val Accuracy: 0.4444\n","===== Epoch 1356/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6795. Train Loss: 1.0259, Train Accuracy: 0.4643, Val Loss: 1.0123, Val Accuracy: 0.4622\n","===== Epoch 1357/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6795. Train Loss: 1.0305, Train Accuracy: 0.4659, Val Loss: 1.0257, Val Accuracy: 0.4400\n","===== Epoch 1358/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6795. Train Loss: 1.0245, Train Accuracy: 0.4580, Val Loss: 1.0286, Val Accuracy: 0.4356\n","===== Epoch 1359/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6795. Train Loss: 1.0303, Train Accuracy: 0.4596, Val Loss: 1.0162, Val Accuracy: 0.4711\n","===== Epoch 1360/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6795. Train Loss: 1.0320, Train Accuracy: 0.4541, Val Loss: 1.0343, Val Accuracy: 0.4889\n","===== Epoch 1361/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6795. Train Loss: 1.0333, Train Accuracy: 0.4533, Val Loss: 1.0134, Val Accuracy: 0.4889\n","===== Epoch 1362/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6795. Train Loss: 1.0284, Train Accuracy: 0.4604, Val Loss: 1.0430, Val Accuracy: 0.4311\n","===== Epoch 1363/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6795. Train Loss: 1.0289, Train Accuracy: 0.4651, Val Loss: 1.0245, Val Accuracy: 0.4889\n","===== Epoch 1364/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6795. Train Loss: 1.0276, Train Accuracy: 0.4627, Val Loss: 1.0423, Val Accuracy: 0.4622\n","===== Epoch 1365/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6795. Train Loss: 1.0297, Train Accuracy: 0.4518, Val Loss: 1.0756, Val Accuracy: 0.4222\n","===== Epoch 1366/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6795. Train Loss: 1.0379, Train Accuracy: 0.4478, Val Loss: 1.0792, Val Accuracy: 0.4000\n","===== Epoch 1367/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6795. Train Loss: 1.0276, Train Accuracy: 0.4565, Val Loss: 1.0480, Val Accuracy: 0.4089\n","===== Epoch 1368/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6795. Train Loss: 1.0244, Train Accuracy: 0.4659, Val Loss: 1.0066, Val Accuracy: 0.4533\n","===== Epoch 1369/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6795. Train Loss: 1.0156, Train Accuracy: 0.4714, Val Loss: 1.0382, Val Accuracy: 0.4400\n","===== Epoch 1370/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6795. Train Loss: 1.0303, Train Accuracy: 0.4769, Val Loss: 1.0234, Val Accuracy: 0.4311\n","===== Epoch 1371/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6795. Train Loss: 1.0284, Train Accuracy: 0.4494, Val Loss: 1.0064, Val Accuracy: 0.4578\n","===== Epoch 1372/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6795. Train Loss: 1.0225, Train Accuracy: 0.4549, Val Loss: 1.0246, Val Accuracy: 0.4489\n","===== Epoch 1373/2000 =====\n","New best model saved with Val ROC AUC: 0.6885, Train Loss: 1.0330, Train Accuracy: 0.4557, Val Loss: 0.9986, Val Accuracy: 0.4800\n","===== Epoch 1374/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6885. Train Loss: 1.0281, Train Accuracy: 0.4486, Val Loss: 1.0424, Val Accuracy: 0.4711\n","===== Epoch 1375/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6885. Train Loss: 1.0319, Train Accuracy: 0.4345, Val Loss: 1.0178, Val Accuracy: 0.4978\n","===== Epoch 1376/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6885. Train Loss: 1.0334, Train Accuracy: 0.4424, Val Loss: 1.0450, Val Accuracy: 0.4400\n","===== Epoch 1377/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6885. Train Loss: 1.0231, Train Accuracy: 0.4635, Val Loss: 1.0256, Val Accuracy: 0.4222\n","===== Epoch 1378/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6885. Train Loss: 1.0209, Train Accuracy: 0.4627, Val Loss: 1.0335, Val Accuracy: 0.4667\n","===== Epoch 1379/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6885. Train Loss: 1.0365, Train Accuracy: 0.4439, Val Loss: 1.0350, Val Accuracy: 0.4356\n","===== Epoch 1380/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6885. Train Loss: 1.0147, Train Accuracy: 0.4651, Val Loss: 1.0337, Val Accuracy: 0.4667\n","===== Epoch 1381/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6885. Train Loss: 1.0333, Train Accuracy: 0.4525, Val Loss: 1.0365, Val Accuracy: 0.4356\n","===== Epoch 1382/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6885. Train Loss: 1.0123, Train Accuracy: 0.4698, Val Loss: 1.0121, Val Accuracy: 0.4667\n","===== Epoch 1383/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6885. Train Loss: 1.0183, Train Accuracy: 0.4745, Val Loss: 1.0209, Val Accuracy: 0.4667\n","===== Epoch 1384/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6885. Train Loss: 1.0152, Train Accuracy: 0.4690, Val Loss: 1.0144, Val Accuracy: 0.4622\n","===== Epoch 1385/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6885. Train Loss: 1.0293, Train Accuracy: 0.4518, Val Loss: 0.9871, Val Accuracy: 0.4667\n","===== Epoch 1386/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6885. Train Loss: 1.0259, Train Accuracy: 0.4667, Val Loss: 0.9969, Val Accuracy: 0.4889\n","===== Epoch 1387/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6885. Train Loss: 1.0050, Train Accuracy: 0.4745, Val Loss: 1.0194, Val Accuracy: 0.4533\n","===== Epoch 1388/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6885. Train Loss: 1.0322, Train Accuracy: 0.4604, Val Loss: 0.9831, Val Accuracy: 0.4800\n","===== Epoch 1389/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6885. Train Loss: 1.0222, Train Accuracy: 0.4557, Val Loss: 1.0933, Val Accuracy: 0.4222\n","===== Epoch 1390/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6885. Train Loss: 1.0048, Train Accuracy: 0.4753, Val Loss: 0.9828, Val Accuracy: 0.5067\n","===== Epoch 1391/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6885. Train Loss: 1.0333, Train Accuracy: 0.4329, Val Loss: 1.0061, Val Accuracy: 0.4533\n","===== Epoch 1392/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6885. Train Loss: 1.0034, Train Accuracy: 0.4698, Val Loss: 1.0344, Val Accuracy: 0.4133\n","===== Epoch 1393/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6885. Train Loss: 1.0139, Train Accuracy: 0.4761, Val Loss: 0.9971, Val Accuracy: 0.4933\n","===== Epoch 1394/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6885. Train Loss: 0.9991, Train Accuracy: 0.4769, Val Loss: 1.0483, Val Accuracy: 0.4444\n","===== Epoch 1395/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6885. Train Loss: 0.9991, Train Accuracy: 0.4918, Val Loss: 1.0160, Val Accuracy: 0.4533\n","===== Epoch 1396/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6885. Train Loss: 1.0236, Train Accuracy: 0.4494, Val Loss: 0.9772, Val Accuracy: 0.4533\n","===== Epoch 1397/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6885. Train Loss: 1.0128, Train Accuracy: 0.4729, Val Loss: 1.0254, Val Accuracy: 0.4356\n","===== Epoch 1398/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6885. Train Loss: 1.0059, Train Accuracy: 0.4761, Val Loss: 0.9892, Val Accuracy: 0.5200\n","===== Epoch 1399/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6885. Train Loss: 1.0260, Train Accuracy: 0.4675, Val Loss: 1.0048, Val Accuracy: 0.4533\n","===== Epoch 1400/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6885. Train Loss: 1.0233, Train Accuracy: 0.4596, Val Loss: 0.9734, Val Accuracy: 0.4800\n","===== Epoch 1401/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6885. Train Loss: 1.0040, Train Accuracy: 0.4776, Val Loss: 1.0126, Val Accuracy: 0.4711\n","===== Epoch 1402/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6885. Train Loss: 0.9989, Train Accuracy: 0.4800, Val Loss: 0.9682, Val Accuracy: 0.5022\n","===== Epoch 1403/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6885. Train Loss: 1.0034, Train Accuracy: 0.4722, Val Loss: 0.9897, Val Accuracy: 0.4889\n","===== Epoch 1404/2000 =====\n","New best model saved with Val ROC AUC: 0.6975, Train Loss: 1.0061, Train Accuracy: 0.4839, Val Loss: 0.9936, Val Accuracy: 0.4622\n","===== Epoch 1405/2000 =====\n","New best model saved with Val ROC AUC: 0.7034, Train Loss: 0.9889, Train Accuracy: 0.4980, Val Loss: 0.9906, Val Accuracy: 0.4800\n","===== Epoch 1406/2000 =====\n","New best model saved with Val ROC AUC: 0.7061, Train Loss: 0.9892, Train Accuracy: 0.4918, Val Loss: 0.9393, Val Accuracy: 0.5111\n","===== Epoch 1407/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7061. Train Loss: 1.0068, Train Accuracy: 0.4769, Val Loss: 0.9859, Val Accuracy: 0.4800\n","===== Epoch 1408/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7061. Train Loss: 0.9933, Train Accuracy: 0.4792, Val Loss: 0.9946, Val Accuracy: 0.4667\n","===== Epoch 1409/2000 =====\n","New best model saved with Val ROC AUC: 0.7269, Train Loss: 0.9980, Train Accuracy: 0.4776, Val Loss: 0.9446, Val Accuracy: 0.5333\n","===== Epoch 1410/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7269. Train Loss: 0.9819, Train Accuracy: 0.4902, Val Loss: 0.9741, Val Accuracy: 0.4844\n","===== Epoch 1411/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7269. Train Loss: 0.9964, Train Accuracy: 0.4855, Val Loss: 0.9710, Val Accuracy: 0.4711\n","===== Epoch 1412/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7269. Train Loss: 0.9971, Train Accuracy: 0.4737, Val Loss: 0.9712, Val Accuracy: 0.4711\n","===== Epoch 1413/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7269. Train Loss: 0.9820, Train Accuracy: 0.5027, Val Loss: 0.9944, Val Accuracy: 0.5022\n","===== Epoch 1414/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7269. Train Loss: 0.9776, Train Accuracy: 0.4918, Val Loss: 0.9409, Val Accuracy: 0.5156\n","===== Epoch 1415/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7269. Train Loss: 0.9655, Train Accuracy: 0.5145, Val Loss: 0.9765, Val Accuracy: 0.4711\n","===== Epoch 1416/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7269. Train Loss: 0.9754, Train Accuracy: 0.4996, Val Loss: 0.9319, Val Accuracy: 0.5333\n","===== Epoch 1417/2000 =====\n","New best model saved with Val ROC AUC: 0.7429, Train Loss: 0.9703, Train Accuracy: 0.5067, Val Loss: 0.9401, Val Accuracy: 0.5644\n","===== Epoch 1418/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7429. Train Loss: 0.9919, Train Accuracy: 0.4871, Val Loss: 0.9519, Val Accuracy: 0.5156\n","===== Epoch 1419/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7429. Train Loss: 0.9721, Train Accuracy: 0.5012, Val Loss: 0.9402, Val Accuracy: 0.5244\n","===== Epoch 1420/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7429. Train Loss: 0.9931, Train Accuracy: 0.4957, Val Loss: 0.9495, Val Accuracy: 0.4889\n","===== Epoch 1421/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7429. Train Loss: 0.9771, Train Accuracy: 0.4973, Val Loss: 0.9144, Val Accuracy: 0.5333\n","===== Epoch 1422/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7429. Train Loss: 0.9678, Train Accuracy: 0.4941, Val Loss: 0.9269, Val Accuracy: 0.5289\n","===== Epoch 1423/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7429. Train Loss: 0.9651, Train Accuracy: 0.5051, Val Loss: 0.9225, Val Accuracy: 0.5067\n","===== Epoch 1424/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7429. Train Loss: 0.9540, Train Accuracy: 0.5098, Val Loss: 0.9074, Val Accuracy: 0.5378\n","===== Epoch 1425/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7429. Train Loss: 0.9748, Train Accuracy: 0.5145, Val Loss: 0.9536, Val Accuracy: 0.4933\n","===== Epoch 1426/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7429. Train Loss: 0.9503, Train Accuracy: 0.5216, Val Loss: 0.9282, Val Accuracy: 0.5111\n","===== Epoch 1427/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7429. Train Loss: 0.9679, Train Accuracy: 0.5043, Val Loss: 0.9545, Val Accuracy: 0.5022\n","===== Epoch 1428/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7429. Train Loss: 0.9591, Train Accuracy: 0.5169, Val Loss: 0.9446, Val Accuracy: 0.5422\n","===== Epoch 1429/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7429. Train Loss: 0.9456, Train Accuracy: 0.5192, Val Loss: 0.9476, Val Accuracy: 0.5244\n","===== Epoch 1430/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7429. Train Loss: 0.9612, Train Accuracy: 0.5075, Val Loss: 0.9522, Val Accuracy: 0.5333\n","===== Epoch 1431/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7429. Train Loss: 0.9620, Train Accuracy: 0.5059, Val Loss: 0.9638, Val Accuracy: 0.4844\n","===== Epoch 1432/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7429. Train Loss: 0.9441, Train Accuracy: 0.5129, Val Loss: 0.9702, Val Accuracy: 0.4578\n","===== Epoch 1433/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7429. Train Loss: 0.9623, Train Accuracy: 0.5067, Val Loss: 1.0109, Val Accuracy: 0.4400\n","===== Epoch 1434/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7429. Train Loss: 0.9523, Train Accuracy: 0.5082, Val Loss: 0.9493, Val Accuracy: 0.4978\n","===== Epoch 1435/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7429. Train Loss: 0.9571, Train Accuracy: 0.5067, Val Loss: 0.9102, Val Accuracy: 0.5511\n","===== Epoch 1436/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7429. Train Loss: 0.9329, Train Accuracy: 0.5122, Val Loss: 0.9181, Val Accuracy: 0.5111\n","===== Epoch 1437/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7429. Train Loss: 0.9584, Train Accuracy: 0.5161, Val Loss: 0.9207, Val Accuracy: 0.5289\n","===== Epoch 1438/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7429. Train Loss: 0.9442, Train Accuracy: 0.5153, Val Loss: 0.9369, Val Accuracy: 0.5333\n","===== Epoch 1439/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7429. Train Loss: 0.9646, Train Accuracy: 0.5004, Val Loss: 0.9072, Val Accuracy: 0.5378\n","===== Epoch 1440/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7429. Train Loss: 0.9425, Train Accuracy: 0.5271, Val Loss: 0.9242, Val Accuracy: 0.5156\n","===== Epoch 1441/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7429. Train Loss: 0.9448, Train Accuracy: 0.5075, Val Loss: 0.9632, Val Accuracy: 0.4933\n","===== Epoch 1442/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7429. Train Loss: 0.9561, Train Accuracy: 0.4957, Val Loss: 0.8995, Val Accuracy: 0.5067\n","===== Epoch 1443/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7429. Train Loss: 0.9324, Train Accuracy: 0.5349, Val Loss: 0.9491, Val Accuracy: 0.4622\n","===== Epoch 1444/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7429. Train Loss: 0.9482, Train Accuracy: 0.5216, Val Loss: 0.9529, Val Accuracy: 0.5156\n","===== Epoch 1445/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7429. Train Loss: 0.9477, Train Accuracy: 0.5169, Val Loss: 0.9413, Val Accuracy: 0.4667\n","===== Epoch 1446/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7429. Train Loss: 0.9568, Train Accuracy: 0.5090, Val Loss: 0.9580, Val Accuracy: 0.5156\n","===== Epoch 1447/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7429. Train Loss: 0.9458, Train Accuracy: 0.5239, Val Loss: 0.9441, Val Accuracy: 0.5644\n","===== Epoch 1448/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7429. Train Loss: 0.9467, Train Accuracy: 0.5263, Val Loss: 0.9049, Val Accuracy: 0.5422\n","===== Epoch 1449/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7429. Train Loss: 0.9408, Train Accuracy: 0.5145, Val Loss: 0.9428, Val Accuracy: 0.4889\n","===== Epoch 1450/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7429. Train Loss: 0.9346, Train Accuracy: 0.5388, Val Loss: 0.9185, Val Accuracy: 0.5644\n","===== Epoch 1451/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7429. Train Loss: 0.9405, Train Accuracy: 0.5153, Val Loss: 0.8932, Val Accuracy: 0.5244\n","===== Epoch 1452/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7429. Train Loss: 0.9680, Train Accuracy: 0.4973, Val Loss: 0.9131, Val Accuracy: 0.5644\n","===== Epoch 1453/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7429. Train Loss: 0.9503, Train Accuracy: 0.5263, Val Loss: 0.9336, Val Accuracy: 0.4756\n","===== Epoch 1454/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7429. Train Loss: 0.9576, Train Accuracy: 0.5067, Val Loss: 0.8966, Val Accuracy: 0.5644\n","===== Epoch 1455/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7429. Train Loss: 0.9368, Train Accuracy: 0.5255, Val Loss: 0.8940, Val Accuracy: 0.5378\n","===== Epoch 1456/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7429. Train Loss: 0.9461, Train Accuracy: 0.5271, Val Loss: 0.9397, Val Accuracy: 0.4800\n","===== Epoch 1457/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7429. Train Loss: 0.9518, Train Accuracy: 0.5145, Val Loss: 0.9577, Val Accuracy: 0.4889\n","===== Epoch 1458/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7429. Train Loss: 0.9656, Train Accuracy: 0.5137, Val Loss: 1.0154, Val Accuracy: 0.4800\n","===== Epoch 1459/2000 =====\n","New best model saved with Val ROC AUC: 0.7681, Train Loss: 0.9291, Train Accuracy: 0.5231, Val Loss: 0.8546, Val Accuracy: 0.5956\n","===== Epoch 1460/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7681. Train Loss: 0.9557, Train Accuracy: 0.5106, Val Loss: 0.9812, Val Accuracy: 0.4622\n","===== Epoch 1461/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7681. Train Loss: 0.9268, Train Accuracy: 0.5169, Val Loss: 0.9367, Val Accuracy: 0.5200\n","===== Epoch 1462/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7681. Train Loss: 0.9557, Train Accuracy: 0.5004, Val Loss: 0.9442, Val Accuracy: 0.4756\n","===== Epoch 1463/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7681. Train Loss: 0.9564, Train Accuracy: 0.5129, Val Loss: 0.9304, Val Accuracy: 0.5156\n","===== Epoch 1464/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7681. Train Loss: 0.9438, Train Accuracy: 0.5420, Val Loss: 0.9003, Val Accuracy: 0.5200\n","===== Epoch 1465/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7681. Train Loss: 0.9536, Train Accuracy: 0.5192, Val Loss: 0.9595, Val Accuracy: 0.5111\n","===== Epoch 1466/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7681. Train Loss: 0.9399, Train Accuracy: 0.5333, Val Loss: 0.9853, Val Accuracy: 0.4400\n","===== Epoch 1467/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7681. Train Loss: 0.9510, Train Accuracy: 0.4933, Val Loss: 0.9506, Val Accuracy: 0.5200\n","===== Epoch 1468/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7681. Train Loss: 0.9567, Train Accuracy: 0.5184, Val Loss: 0.9310, Val Accuracy: 0.5333\n","===== Epoch 1469/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7681. Train Loss: 0.9547, Train Accuracy: 0.5020, Val Loss: 0.9523, Val Accuracy: 0.4667\n","===== Epoch 1470/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7681. Train Loss: 0.9225, Train Accuracy: 0.5302, Val Loss: 0.8997, Val Accuracy: 0.5333\n","===== Epoch 1471/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7681. Train Loss: 0.9334, Train Accuracy: 0.5302, Val Loss: 0.8861, Val Accuracy: 0.5244\n","===== Epoch 1472/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7681. Train Loss: 0.9393, Train Accuracy: 0.5224, Val Loss: 0.9283, Val Accuracy: 0.5200\n","===== Epoch 1473/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7681. Train Loss: 0.9652, Train Accuracy: 0.4918, Val Loss: 0.9093, Val Accuracy: 0.5022\n","===== Epoch 1474/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7681. Train Loss: 0.9478, Train Accuracy: 0.5098, Val Loss: 0.9208, Val Accuracy: 0.4978\n","===== Epoch 1475/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7681. Train Loss: 0.9451, Train Accuracy: 0.5145, Val Loss: 0.9458, Val Accuracy: 0.5333\n","===== Epoch 1476/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7681. Train Loss: 0.9597, Train Accuracy: 0.5067, Val Loss: 0.9958, Val Accuracy: 0.4622\n","===== Epoch 1477/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7681. Train Loss: 0.9495, Train Accuracy: 0.5208, Val Loss: 0.9682, Val Accuracy: 0.5022\n","===== Epoch 1478/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7681. Train Loss: 0.9365, Train Accuracy: 0.5325, Val Loss: 0.9251, Val Accuracy: 0.5067\n","===== Epoch 1479/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7681. Train Loss: 0.9417, Train Accuracy: 0.5255, Val Loss: 0.9105, Val Accuracy: 0.5422\n","===== Epoch 1480/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7681. Train Loss: 0.9409, Train Accuracy: 0.5169, Val Loss: 0.9482, Val Accuracy: 0.5200\n","===== Epoch 1481/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7681. Train Loss: 0.9280, Train Accuracy: 0.5412, Val Loss: 0.8687, Val Accuracy: 0.6000\n","===== Epoch 1482/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7681. Train Loss: 0.9170, Train Accuracy: 0.5255, Val Loss: 0.9184, Val Accuracy: 0.5467\n","===== Epoch 1483/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7681. Train Loss: 0.9462, Train Accuracy: 0.5098, Val Loss: 1.0000, Val Accuracy: 0.4844\n","===== Epoch 1484/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7681. Train Loss: 0.9350, Train Accuracy: 0.5224, Val Loss: 1.0203, Val Accuracy: 0.5022\n","===== Epoch 1485/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7681. Train Loss: 0.9480, Train Accuracy: 0.5208, Val Loss: 0.9776, Val Accuracy: 0.4489\n","===== Epoch 1486/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7681. Train Loss: 0.9845, Train Accuracy: 0.5051, Val Loss: 0.9379, Val Accuracy: 0.5022\n","===== Epoch 1487/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7681. Train Loss: 0.9397, Train Accuracy: 0.5098, Val Loss: 0.9010, Val Accuracy: 0.5556\n","===== Epoch 1488/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7681. Train Loss: 0.9297, Train Accuracy: 0.5169, Val Loss: 0.8816, Val Accuracy: 0.5644\n","===== Epoch 1489/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7681. Train Loss: 0.9449, Train Accuracy: 0.5169, Val Loss: 0.8680, Val Accuracy: 0.6044\n","===== Epoch 1490/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7681. Train Loss: 0.9333, Train Accuracy: 0.5231, Val Loss: 0.9151, Val Accuracy: 0.5422\n","===== Epoch 1491/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7681. Train Loss: 0.9055, Train Accuracy: 0.5482, Val Loss: 0.8795, Val Accuracy: 0.5511\n","===== Epoch 1492/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7681. Train Loss: 0.9011, Train Accuracy: 0.5498, Val Loss: 0.9566, Val Accuracy: 0.4800\n","===== Epoch 1493/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7681. Train Loss: 0.9237, Train Accuracy: 0.5302, Val Loss: 0.8951, Val Accuracy: 0.5422\n","===== Epoch 1494/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7681. Train Loss: 0.9177, Train Accuracy: 0.5271, Val Loss: 0.9162, Val Accuracy: 0.5556\n","===== Epoch 1495/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7681. Train Loss: 0.9184, Train Accuracy: 0.5365, Val Loss: 0.8671, Val Accuracy: 0.5511\n","===== Epoch 1496/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7681. Train Loss: 0.9095, Train Accuracy: 0.5278, Val Loss: 0.9111, Val Accuracy: 0.5022\n","===== Epoch 1497/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7681. Train Loss: 0.9363, Train Accuracy: 0.5075, Val Loss: 0.9671, Val Accuracy: 0.4800\n","===== Epoch 1498/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7681. Train Loss: 0.9296, Train Accuracy: 0.5278, Val Loss: 0.8637, Val Accuracy: 0.5689\n","===== Epoch 1499/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7681. Train Loss: 0.9212, Train Accuracy: 0.5349, Val Loss: 0.9192, Val Accuracy: 0.5511\n","===== Epoch 1500/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7681. Train Loss: 0.9175, Train Accuracy: 0.5412, Val Loss: 0.8907, Val Accuracy: 0.5378\n","===== Epoch 1501/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.7681. Train Loss: 0.9221, Train Accuracy: 0.5443, Val Loss: 0.9336, Val Accuracy: 0.5111\n","===== Epoch 1502/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.7681. Train Loss: 0.8858, Train Accuracy: 0.5482, Val Loss: 0.8679, Val Accuracy: 0.5600\n","===== Epoch 1503/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.7681. Train Loss: 0.9154, Train Accuracy: 0.5341, Val Loss: 0.8668, Val Accuracy: 0.5689\n","===== Epoch 1504/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.7681. Train Loss: 0.9060, Train Accuracy: 0.5286, Val Loss: 0.8806, Val Accuracy: 0.5422\n","===== Epoch 1505/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.7681. Train Loss: 0.9050, Train Accuracy: 0.5325, Val Loss: 0.8967, Val Accuracy: 0.5422\n","===== Epoch 1506/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.7681. Train Loss: 0.8831, Train Accuracy: 0.5553, Val Loss: 0.8663, Val Accuracy: 0.5333\n","===== Epoch 1507/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.7681. Train Loss: 0.8881, Train Accuracy: 0.5482, Val Loss: 0.8596, Val Accuracy: 0.5867\n","===== Epoch 1508/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.7681. Train Loss: 0.9211, Train Accuracy: 0.5255, Val Loss: 0.8404, Val Accuracy: 0.5778\n","===== Epoch 1509/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.7681. Train Loss: 0.9029, Train Accuracy: 0.5278, Val Loss: 0.8543, Val Accuracy: 0.5867\n","===== Epoch 1510/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.7681. Train Loss: 0.9009, Train Accuracy: 0.5427, Val Loss: 0.9009, Val Accuracy: 0.5556\n","===== Epoch 1511/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.7681. Train Loss: 0.9133, Train Accuracy: 0.5294, Val Loss: 0.8776, Val Accuracy: 0.5867\n","===== Epoch 1512/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.7681. Train Loss: 0.9138, Train Accuracy: 0.5380, Val Loss: 0.9167, Val Accuracy: 0.5600\n","===== Epoch 1513/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.7681. Train Loss: 0.9159, Train Accuracy: 0.5396, Val Loss: 0.8352, Val Accuracy: 0.5956\n","===== Epoch 1514/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.7681. Train Loss: 0.9128, Train Accuracy: 0.5294, Val Loss: 0.8436, Val Accuracy: 0.5644\n","===== Epoch 1515/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.7681. Train Loss: 0.8800, Train Accuracy: 0.5671, Val Loss: 0.8452, Val Accuracy: 0.5778\n","===== Epoch 1516/2000 =====\n","New best model saved with Val ROC AUC: 0.7696, Train Loss: 0.8916, Train Accuracy: 0.5600, Val Loss: 0.8383, Val Accuracy: 0.5467\n","===== Epoch 1517/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7696. Train Loss: 0.8795, Train Accuracy: 0.5443, Val Loss: 0.9393, Val Accuracy: 0.5156\n","===== Epoch 1518/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7696. Train Loss: 0.8663, Train Accuracy: 0.5655, Val Loss: 0.8454, Val Accuracy: 0.5556\n","===== Epoch 1519/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7696. Train Loss: 0.9005, Train Accuracy: 0.5584, Val Loss: 0.9150, Val Accuracy: 0.5200\n","===== Epoch 1520/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7696. Train Loss: 0.8890, Train Accuracy: 0.5686, Val Loss: 0.8547, Val Accuracy: 0.5511\n","===== Epoch 1521/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7696. Train Loss: 0.8760, Train Accuracy: 0.5545, Val Loss: 0.8590, Val Accuracy: 0.5644\n","===== Epoch 1522/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7696. Train Loss: 0.8696, Train Accuracy: 0.5655, Val Loss: 0.8854, Val Accuracy: 0.5378\n","===== Epoch 1523/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7696. Train Loss: 0.8581, Train Accuracy: 0.5812, Val Loss: 0.8642, Val Accuracy: 0.5733\n","===== Epoch 1524/2000 =====\n","New best model saved with Val ROC AUC: 0.7726, Train Loss: 0.8829, Train Accuracy: 0.5420, Val Loss: 0.8520, Val Accuracy: 0.5778\n","===== Epoch 1525/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7726. Train Loss: 0.8765, Train Accuracy: 0.5608, Val Loss: 0.8339, Val Accuracy: 0.5867\n","===== Epoch 1526/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7726. Train Loss: 0.8653, Train Accuracy: 0.5631, Val Loss: 0.8684, Val Accuracy: 0.5067\n","===== Epoch 1527/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7726. Train Loss: 0.8560, Train Accuracy: 0.5741, Val Loss: 0.8326, Val Accuracy: 0.6222\n","===== Epoch 1528/2000 =====\n","New best model saved with Val ROC AUC: 0.7733, Train Loss: 0.8472, Train Accuracy: 0.5882, Val Loss: 0.8108, Val Accuracy: 0.5911\n","===== Epoch 1529/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7733. Train Loss: 0.8773, Train Accuracy: 0.5506, Val Loss: 0.8525, Val Accuracy: 0.5511\n","===== Epoch 1530/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7733. Train Loss: 0.8427, Train Accuracy: 0.5718, Val Loss: 0.8529, Val Accuracy: 0.5333\n","===== Epoch 1531/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7733. Train Loss: 0.8729, Train Accuracy: 0.5631, Val Loss: 0.8629, Val Accuracy: 0.5244\n","===== Epoch 1532/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7733. Train Loss: 0.8750, Train Accuracy: 0.5608, Val Loss: 0.8025, Val Accuracy: 0.6000\n","===== Epoch 1533/2000 =====\n","New best model saved with Val ROC AUC: 0.7849, Train Loss: 0.8529, Train Accuracy: 0.5875, Val Loss: 0.8013, Val Accuracy: 0.5911\n","===== Epoch 1534/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7849. Train Loss: 0.8858, Train Accuracy: 0.5616, Val Loss: 0.8114, Val Accuracy: 0.5911\n","===== Epoch 1535/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7849. Train Loss: 0.8594, Train Accuracy: 0.5804, Val Loss: 0.8532, Val Accuracy: 0.5733\n","===== Epoch 1536/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7849. Train Loss: 0.8602, Train Accuracy: 0.5639, Val Loss: 0.8957, Val Accuracy: 0.5511\n","===== Epoch 1537/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7849. Train Loss: 0.8407, Train Accuracy: 0.5663, Val Loss: 0.8128, Val Accuracy: 0.6044\n","===== Epoch 1538/2000 =====\n","New best model saved with Val ROC AUC: 0.7850, Train Loss: 0.8670, Train Accuracy: 0.5545, Val Loss: 0.7946, Val Accuracy: 0.6089\n","===== Epoch 1539/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7850. Train Loss: 0.8583, Train Accuracy: 0.5600, Val Loss: 0.8190, Val Accuracy: 0.6356\n","===== Epoch 1540/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7850. Train Loss: 0.8565, Train Accuracy: 0.5773, Val Loss: 0.8314, Val Accuracy: 0.5733\n","===== Epoch 1541/2000 =====\n","New best model saved with Val ROC AUC: 0.7853, Train Loss: 0.8721, Train Accuracy: 0.5663, Val Loss: 0.8302, Val Accuracy: 0.6089\n","===== Epoch 1542/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7853. Train Loss: 0.8757, Train Accuracy: 0.5584, Val Loss: 0.8158, Val Accuracy: 0.5822\n","===== Epoch 1543/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7853. Train Loss: 0.8584, Train Accuracy: 0.5820, Val Loss: 0.8591, Val Accuracy: 0.5200\n","===== Epoch 1544/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7853. Train Loss: 0.8535, Train Accuracy: 0.5671, Val Loss: 0.7885, Val Accuracy: 0.6000\n","===== Epoch 1545/2000 =====\n","New best model saved with Val ROC AUC: 0.7914, Train Loss: 0.8468, Train Accuracy: 0.5710, Val Loss: 0.7999, Val Accuracy: 0.5956\n","===== Epoch 1546/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7914. Train Loss: 0.8439, Train Accuracy: 0.5749, Val Loss: 0.7940, Val Accuracy: 0.5956\n","===== Epoch 1547/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7914. Train Loss: 0.8499, Train Accuracy: 0.5898, Val Loss: 0.7991, Val Accuracy: 0.6178\n","===== Epoch 1548/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7914. Train Loss: 0.8748, Train Accuracy: 0.5796, Val Loss: 0.8249, Val Accuracy: 0.6044\n","===== Epoch 1549/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7914. Train Loss: 0.8636, Train Accuracy: 0.5631, Val Loss: 0.8237, Val Accuracy: 0.5822\n","===== Epoch 1550/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7914. Train Loss: 0.8501, Train Accuracy: 0.5757, Val Loss: 0.8284, Val Accuracy: 0.5733\n","===== Epoch 1551/2000 =====\n","New best model saved with Val ROC AUC: 0.8013, Train Loss: 0.8604, Train Accuracy: 0.5584, Val Loss: 0.8176, Val Accuracy: 0.6667\n","===== Epoch 1552/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8013. Train Loss: 0.8571, Train Accuracy: 0.5694, Val Loss: 0.8161, Val Accuracy: 0.6178\n","===== Epoch 1553/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8013. Train Loss: 0.8608, Train Accuracy: 0.5584, Val Loss: 0.8643, Val Accuracy: 0.5911\n","===== Epoch 1554/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8013. Train Loss: 0.8613, Train Accuracy: 0.5733, Val Loss: 0.8268, Val Accuracy: 0.6267\n","===== Epoch 1555/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8013. Train Loss: 0.8731, Train Accuracy: 0.5624, Val Loss: 0.8702, Val Accuracy: 0.5244\n","===== Epoch 1556/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8013. Train Loss: 0.8617, Train Accuracy: 0.5663, Val Loss: 0.8305, Val Accuracy: 0.5778\n","===== Epoch 1557/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8013. Train Loss: 0.8769, Train Accuracy: 0.5600, Val Loss: 0.8563, Val Accuracy: 0.5644\n","===== Epoch 1558/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8013. Train Loss: 0.8733, Train Accuracy: 0.5459, Val Loss: 0.8549, Val Accuracy: 0.5733\n","===== Epoch 1559/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8013. Train Loss: 0.8766, Train Accuracy: 0.5459, Val Loss: 0.7910, Val Accuracy: 0.6089\n","===== Epoch 1560/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8013. Train Loss: 0.8571, Train Accuracy: 0.5600, Val Loss: 0.8790, Val Accuracy: 0.5289\n","===== Epoch 1561/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8013. Train Loss: 0.8533, Train Accuracy: 0.5694, Val Loss: 0.8383, Val Accuracy: 0.5733\n","===== Epoch 1562/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8013. Train Loss: 0.8471, Train Accuracy: 0.5725, Val Loss: 0.8490, Val Accuracy: 0.5689\n","===== Epoch 1563/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8013. Train Loss: 0.8641, Train Accuracy: 0.5616, Val Loss: 0.8580, Val Accuracy: 0.5778\n","===== Epoch 1564/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8013. Train Loss: 0.8716, Train Accuracy: 0.5561, Val Loss: 0.8268, Val Accuracy: 0.6222\n","===== Epoch 1565/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8013. Train Loss: 0.8388, Train Accuracy: 0.5773, Val Loss: 0.9098, Val Accuracy: 0.5689\n","===== Epoch 1566/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8013. Train Loss: 0.8644, Train Accuracy: 0.5537, Val Loss: 0.8308, Val Accuracy: 0.5556\n","===== Epoch 1567/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8013. Train Loss: 0.8862, Train Accuracy: 0.5482, Val Loss: 0.8220, Val Accuracy: 0.5778\n","===== Epoch 1568/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8013. Train Loss: 0.8744, Train Accuracy: 0.5757, Val Loss: 0.8478, Val Accuracy: 0.5244\n","===== Epoch 1569/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8013. Train Loss: 0.8809, Train Accuracy: 0.5341, Val Loss: 0.8676, Val Accuracy: 0.5556\n","===== Epoch 1570/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8013. Train Loss: 0.8608, Train Accuracy: 0.5741, Val Loss: 0.8204, Val Accuracy: 0.5644\n","===== Epoch 1571/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8013. Train Loss: 0.8472, Train Accuracy: 0.5796, Val Loss: 0.8591, Val Accuracy: 0.5733\n","===== Epoch 1572/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8013. Train Loss: 0.8498, Train Accuracy: 0.5741, Val Loss: 0.8109, Val Accuracy: 0.5600\n","===== Epoch 1573/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8013. Train Loss: 0.8658, Train Accuracy: 0.5631, Val Loss: 0.8313, Val Accuracy: 0.5778\n","===== Epoch 1574/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8013. Train Loss: 0.8658, Train Accuracy: 0.5694, Val Loss: 0.8447, Val Accuracy: 0.5600\n","===== Epoch 1575/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8013. Train Loss: 0.8463, Train Accuracy: 0.5427, Val Loss: 0.7924, Val Accuracy: 0.5644\n","===== Epoch 1576/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8013. Train Loss: 0.8613, Train Accuracy: 0.5624, Val Loss: 0.8645, Val Accuracy: 0.5778\n","===== Epoch 1577/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8013. Train Loss: 0.8666, Train Accuracy: 0.5576, Val Loss: 0.8275, Val Accuracy: 0.5689\n","===== Epoch 1578/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8013. Train Loss: 0.8657, Train Accuracy: 0.5733, Val Loss: 0.8362, Val Accuracy: 0.5600\n","===== Epoch 1579/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8013. Train Loss: 0.8665, Train Accuracy: 0.5616, Val Loss: 0.8123, Val Accuracy: 0.6000\n","===== Epoch 1580/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8013. Train Loss: 0.8428, Train Accuracy: 0.5718, Val Loss: 0.8308, Val Accuracy: 0.5644\n","===== Epoch 1581/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8013. Train Loss: 0.8669, Train Accuracy: 0.5647, Val Loss: 0.7970, Val Accuracy: 0.6089\n","===== Epoch 1582/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8013. Train Loss: 0.8508, Train Accuracy: 0.5702, Val Loss: 0.8206, Val Accuracy: 0.5911\n","===== Epoch 1583/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8013. Train Loss: 0.8870, Train Accuracy: 0.5592, Val Loss: 0.8318, Val Accuracy: 0.5956\n","===== Epoch 1584/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8013. Train Loss: 0.8467, Train Accuracy: 0.5694, Val Loss: 0.8232, Val Accuracy: 0.5956\n","===== Epoch 1585/2000 =====\n","New best model saved with Val ROC AUC: 0.8129, Train Loss: 0.8774, Train Accuracy: 0.5812, Val Loss: 0.7965, Val Accuracy: 0.5911\n","===== Epoch 1586/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8129. Train Loss: 0.8922, Train Accuracy: 0.5561, Val Loss: 0.8267, Val Accuracy: 0.5822\n","===== Epoch 1587/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8129. Train Loss: 0.8599, Train Accuracy: 0.5553, Val Loss: 0.8471, Val Accuracy: 0.5733\n","===== Epoch 1588/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8129. Train Loss: 0.8630, Train Accuracy: 0.5576, Val Loss: 0.8222, Val Accuracy: 0.5867\n","===== Epoch 1589/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8129. Train Loss: 0.8381, Train Accuracy: 0.5757, Val Loss: 0.8412, Val Accuracy: 0.5733\n","===== Epoch 1590/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8129. Train Loss: 0.8557, Train Accuracy: 0.5584, Val Loss: 0.8327, Val Accuracy: 0.6000\n","===== Epoch 1591/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8129. Train Loss: 0.8485, Train Accuracy: 0.5647, Val Loss: 0.7963, Val Accuracy: 0.5867\n","===== Epoch 1592/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8129. Train Loss: 0.8499, Train Accuracy: 0.5875, Val Loss: 0.8727, Val Accuracy: 0.5689\n","===== Epoch 1593/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8129. Train Loss: 0.8638, Train Accuracy: 0.5702, Val Loss: 0.9714, Val Accuracy: 0.5200\n","===== Epoch 1594/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8129. Train Loss: 0.8430, Train Accuracy: 0.5780, Val Loss: 0.7557, Val Accuracy: 0.6622\n","===== Epoch 1595/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8129. Train Loss: 0.8662, Train Accuracy: 0.5663, Val Loss: 0.7822, Val Accuracy: 0.6400\n","===== Epoch 1596/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8129. Train Loss: 0.8442, Train Accuracy: 0.5843, Val Loss: 0.8162, Val Accuracy: 0.6089\n","===== Epoch 1597/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8129. Train Loss: 0.8443, Train Accuracy: 0.5757, Val Loss: 0.7934, Val Accuracy: 0.5867\n","===== Epoch 1598/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8129. Train Loss: 0.8512, Train Accuracy: 0.5686, Val Loss: 0.8564, Val Accuracy: 0.5333\n","===== Epoch 1599/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8129. Train Loss: 0.8148, Train Accuracy: 0.6031, Val Loss: 0.8554, Val Accuracy: 0.5600\n","===== Epoch 1600/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8129. Train Loss: 0.8409, Train Accuracy: 0.5992, Val Loss: 0.8355, Val Accuracy: 0.5778\n","===== Epoch 1601/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8129. Train Loss: 0.8637, Train Accuracy: 0.5639, Val Loss: 0.8093, Val Accuracy: 0.5822\n","===== Epoch 1602/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8129. Train Loss: 0.8476, Train Accuracy: 0.5765, Val Loss: 0.7837, Val Accuracy: 0.6133\n","===== Epoch 1603/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8129. Train Loss: 0.8397, Train Accuracy: 0.5851, Val Loss: 0.7705, Val Accuracy: 0.6089\n","===== Epoch 1604/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8129. Train Loss: 0.8246, Train Accuracy: 0.6008, Val Loss: 0.8079, Val Accuracy: 0.5867\n","===== Epoch 1605/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8129. Train Loss: 0.8546, Train Accuracy: 0.5639, Val Loss: 0.8473, Val Accuracy: 0.5511\n","===== Epoch 1606/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8129. Train Loss: 0.8389, Train Accuracy: 0.5749, Val Loss: 0.8075, Val Accuracy: 0.6044\n","===== Epoch 1607/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8129. Train Loss: 0.8390, Train Accuracy: 0.5694, Val Loss: 0.7566, Val Accuracy: 0.6178\n","===== Epoch 1608/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8129. Train Loss: 0.8224, Train Accuracy: 0.5945, Val Loss: 0.8464, Val Accuracy: 0.5867\n","===== Epoch 1609/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8129. Train Loss: 0.8427, Train Accuracy: 0.5725, Val Loss: 0.8571, Val Accuracy: 0.5422\n","===== Epoch 1610/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8129. Train Loss: 0.8273, Train Accuracy: 0.6078, Val Loss: 0.8112, Val Accuracy: 0.6044\n","===== Epoch 1611/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8129. Train Loss: 0.8388, Train Accuracy: 0.5851, Val Loss: 0.7909, Val Accuracy: 0.6222\n","===== Epoch 1612/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8129. Train Loss: 0.8147, Train Accuracy: 0.6016, Val Loss: 0.8389, Val Accuracy: 0.5911\n","===== Epoch 1613/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8129. Train Loss: 0.8119, Train Accuracy: 0.5788, Val Loss: 0.7868, Val Accuracy: 0.5911\n","===== Epoch 1614/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8129. Train Loss: 0.8152, Train Accuracy: 0.5992, Val Loss: 0.7662, Val Accuracy: 0.6044\n","===== Epoch 1615/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8129. Train Loss: 0.8100, Train Accuracy: 0.5882, Val Loss: 0.8214, Val Accuracy: 0.6000\n","===== Epoch 1616/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8129. Train Loss: 0.8252, Train Accuracy: 0.5796, Val Loss: 0.7308, Val Accuracy: 0.6622\n","===== Epoch 1617/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8129. Train Loss: 0.8129, Train Accuracy: 0.6039, Val Loss: 0.7861, Val Accuracy: 0.5956\n","===== Epoch 1618/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8129. Train Loss: 0.8185, Train Accuracy: 0.5757, Val Loss: 0.7708, Val Accuracy: 0.6267\n","===== Epoch 1619/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8129. Train Loss: 0.8428, Train Accuracy: 0.5827, Val Loss: 0.7954, Val Accuracy: 0.5733\n","===== Epoch 1620/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8129. Train Loss: 0.8192, Train Accuracy: 0.6110, Val Loss: 0.7969, Val Accuracy: 0.5511\n","===== Epoch 1621/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8129. Train Loss: 0.8013, Train Accuracy: 0.6000, Val Loss: 0.8523, Val Accuracy: 0.5867\n","===== Epoch 1622/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8129. Train Loss: 0.7963, Train Accuracy: 0.5992, Val Loss: 0.8344, Val Accuracy: 0.5911\n","===== Epoch 1623/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8129. Train Loss: 0.7963, Train Accuracy: 0.6031, Val Loss: 0.8007, Val Accuracy: 0.6089\n","===== Epoch 1624/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8129. Train Loss: 0.8034, Train Accuracy: 0.6008, Val Loss: 0.8138, Val Accuracy: 0.5956\n","===== Epoch 1625/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8129. Train Loss: 0.8355, Train Accuracy: 0.5827, Val Loss: 0.8033, Val Accuracy: 0.6044\n","===== Epoch 1626/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8129. Train Loss: 0.8057, Train Accuracy: 0.5945, Val Loss: 0.7307, Val Accuracy: 0.6444\n","===== Epoch 1627/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8129. Train Loss: 0.8037, Train Accuracy: 0.5976, Val Loss: 0.7683, Val Accuracy: 0.6000\n","===== Epoch 1628/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8129. Train Loss: 0.8115, Train Accuracy: 0.6039, Val Loss: 0.7362, Val Accuracy: 0.6178\n","===== Epoch 1629/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8129. Train Loss: 0.8211, Train Accuracy: 0.5937, Val Loss: 0.7880, Val Accuracy: 0.5467\n","===== Epoch 1630/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8129. Train Loss: 0.8181, Train Accuracy: 0.5875, Val Loss: 0.7580, Val Accuracy: 0.6044\n","===== Epoch 1631/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8129. Train Loss: 0.7837, Train Accuracy: 0.6086, Val Loss: 0.7420, Val Accuracy: 0.5956\n","===== Epoch 1632/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8129. Train Loss: 0.7887, Train Accuracy: 0.6243, Val Loss: 0.7848, Val Accuracy: 0.6044\n","===== Epoch 1633/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8129. Train Loss: 0.8043, Train Accuracy: 0.5953, Val Loss: 0.7544, Val Accuracy: 0.6267\n","===== Epoch 1634/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8129. Train Loss: 0.7877, Train Accuracy: 0.6188, Val Loss: 0.7599, Val Accuracy: 0.6267\n","===== Epoch 1635/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8129. Train Loss: 0.7969, Train Accuracy: 0.6125, Val Loss: 0.7905, Val Accuracy: 0.5911\n","===== Epoch 1636/2000 =====\n","New best model saved with Val ROC AUC: 0.8143, Train Loss: 0.7915, Train Accuracy: 0.6180, Val Loss: 0.7489, Val Accuracy: 0.6711\n","===== Epoch 1637/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8143. Train Loss: 0.7847, Train Accuracy: 0.6220, Val Loss: 0.7428, Val Accuracy: 0.6178\n","===== Epoch 1638/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8143. Train Loss: 0.7989, Train Accuracy: 0.6008, Val Loss: 0.7843, Val Accuracy: 0.6044\n","===== Epoch 1639/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8143. Train Loss: 0.7940, Train Accuracy: 0.6016, Val Loss: 0.7379, Val Accuracy: 0.6222\n","===== Epoch 1640/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8143. Train Loss: 0.7928, Train Accuracy: 0.6102, Val Loss: 0.7980, Val Accuracy: 0.6000\n","===== Epoch 1641/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8143. Train Loss: 0.7906, Train Accuracy: 0.6031, Val Loss: 0.7717, Val Accuracy: 0.6444\n","===== Epoch 1642/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8143. Train Loss: 0.7885, Train Accuracy: 0.6243, Val Loss: 0.7846, Val Accuracy: 0.6044\n","===== Epoch 1643/2000 =====\n","New best model saved with Val ROC AUC: 0.8169, Train Loss: 0.7857, Train Accuracy: 0.6329, Val Loss: 0.7641, Val Accuracy: 0.6489\n","===== Epoch 1644/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8169. Train Loss: 0.8140, Train Accuracy: 0.6031, Val Loss: 0.7652, Val Accuracy: 0.6089\n","===== Epoch 1645/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8169. Train Loss: 0.7853, Train Accuracy: 0.6039, Val Loss: 0.7761, Val Accuracy: 0.6400\n","===== Epoch 1646/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8169. Train Loss: 0.7985, Train Accuracy: 0.6039, Val Loss: 0.7767, Val Accuracy: 0.6400\n","===== Epoch 1647/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8169. Train Loss: 0.8074, Train Accuracy: 0.5984, Val Loss: 0.7743, Val Accuracy: 0.6178\n","===== Epoch 1648/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8169. Train Loss: 0.7892, Train Accuracy: 0.6063, Val Loss: 0.7405, Val Accuracy: 0.6800\n","===== Epoch 1649/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8169. Train Loss: 0.8063, Train Accuracy: 0.5961, Val Loss: 0.7363, Val Accuracy: 0.6133\n","===== Epoch 1650/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8169. Train Loss: 0.8101, Train Accuracy: 0.5890, Val Loss: 0.8039, Val Accuracy: 0.5689\n","===== Epoch 1651/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8169. Train Loss: 0.8014, Train Accuracy: 0.6008, Val Loss: 0.7507, Val Accuracy: 0.6222\n","===== Epoch 1652/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8169. Train Loss: 0.7935, Train Accuracy: 0.6071, Val Loss: 0.7433, Val Accuracy: 0.6178\n","===== Epoch 1653/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8169. Train Loss: 0.8011, Train Accuracy: 0.5890, Val Loss: 0.7462, Val Accuracy: 0.6622\n","===== Epoch 1654/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8169. Train Loss: 0.8006, Train Accuracy: 0.5929, Val Loss: 0.8099, Val Accuracy: 0.5822\n","===== Epoch 1655/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8169. Train Loss: 0.7941, Train Accuracy: 0.6133, Val Loss: 0.7872, Val Accuracy: 0.5733\n","===== Epoch 1656/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8169. Train Loss: 0.7847, Train Accuracy: 0.6306, Val Loss: 0.7934, Val Accuracy: 0.6267\n","===== Epoch 1657/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8169. Train Loss: 0.7919, Train Accuracy: 0.6094, Val Loss: 0.7341, Val Accuracy: 0.6311\n","===== Epoch 1658/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8169. Train Loss: 0.7854, Train Accuracy: 0.6133, Val Loss: 0.7759, Val Accuracy: 0.5733\n","===== Epoch 1659/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8169. Train Loss: 0.7972, Train Accuracy: 0.6031, Val Loss: 0.7344, Val Accuracy: 0.6089\n","===== Epoch 1660/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8169. Train Loss: 0.8299, Train Accuracy: 0.5953, Val Loss: 0.7467, Val Accuracy: 0.6222\n","===== Epoch 1661/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8169. Train Loss: 0.7785, Train Accuracy: 0.6204, Val Loss: 0.7612, Val Accuracy: 0.6222\n","===== Epoch 1662/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8169. Train Loss: 0.8170, Train Accuracy: 0.5843, Val Loss: 0.7919, Val Accuracy: 0.5778\n","===== Epoch 1663/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8169. Train Loss: 0.8091, Train Accuracy: 0.6110, Val Loss: 0.7895, Val Accuracy: 0.5733\n","===== Epoch 1664/2000 =====\n","New best model saved with Val ROC AUC: 0.8198, Train Loss: 0.7949, Train Accuracy: 0.6118, Val Loss: 0.7625, Val Accuracy: 0.6400\n","===== Epoch 1665/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8198. Train Loss: 0.7962, Train Accuracy: 0.5867, Val Loss: 0.7550, Val Accuracy: 0.6178\n","===== Epoch 1666/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8198. Train Loss: 0.7940, Train Accuracy: 0.5937, Val Loss: 0.7715, Val Accuracy: 0.6178\n","===== Epoch 1667/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8198. Train Loss: 0.8125, Train Accuracy: 0.6102, Val Loss: 0.7935, Val Accuracy: 0.5778\n","===== Epoch 1668/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8198. Train Loss: 0.8185, Train Accuracy: 0.5867, Val Loss: 0.7797, Val Accuracy: 0.6622\n","===== Epoch 1669/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8198. Train Loss: 0.7983, Train Accuracy: 0.5969, Val Loss: 0.8243, Val Accuracy: 0.5733\n","===== Epoch 1670/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8198. Train Loss: 0.8217, Train Accuracy: 0.5812, Val Loss: 0.7411, Val Accuracy: 0.6222\n","===== Epoch 1671/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8198. Train Loss: 0.7917, Train Accuracy: 0.6188, Val Loss: 0.7461, Val Accuracy: 0.6000\n","===== Epoch 1672/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8198. Train Loss: 0.7875, Train Accuracy: 0.5945, Val Loss: 0.7222, Val Accuracy: 0.6400\n","===== Epoch 1673/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8198. Train Loss: 0.8238, Train Accuracy: 0.5922, Val Loss: 0.8302, Val Accuracy: 0.5689\n","===== Epoch 1674/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8198. Train Loss: 0.7878, Train Accuracy: 0.6071, Val Loss: 0.7735, Val Accuracy: 0.6044\n","===== Epoch 1675/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8198. Train Loss: 0.8479, Train Accuracy: 0.5804, Val Loss: 0.7477, Val Accuracy: 0.6267\n","===== Epoch 1676/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8198. Train Loss: 0.8034, Train Accuracy: 0.6086, Val Loss: 0.7507, Val Accuracy: 0.6000\n","===== Epoch 1677/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8198. Train Loss: 0.8089, Train Accuracy: 0.5859, Val Loss: 0.7506, Val Accuracy: 0.6444\n","===== Epoch 1678/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8198. Train Loss: 0.8234, Train Accuracy: 0.5961, Val Loss: 0.7809, Val Accuracy: 0.6400\n","===== Epoch 1679/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8198. Train Loss: 0.7747, Train Accuracy: 0.6071, Val Loss: 0.7649, Val Accuracy: 0.5956\n","===== Epoch 1680/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8198. Train Loss: 0.7998, Train Accuracy: 0.6039, Val Loss: 0.7527, Val Accuracy: 0.6178\n","===== Epoch 1681/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8198. Train Loss: 0.7903, Train Accuracy: 0.6071, Val Loss: 0.7414, Val Accuracy: 0.6178\n","===== Epoch 1682/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8198. Train Loss: 0.8164, Train Accuracy: 0.6000, Val Loss: 0.8109, Val Accuracy: 0.6222\n","===== Epoch 1683/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8198. Train Loss: 0.8074, Train Accuracy: 0.5922, Val Loss: 0.7240, Val Accuracy: 0.6178\n","===== Epoch 1684/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8198. Train Loss: 0.7901, Train Accuracy: 0.6173, Val Loss: 0.7056, Val Accuracy: 0.6667\n","===== Epoch 1685/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8198. Train Loss: 0.7840, Train Accuracy: 0.6094, Val Loss: 0.7286, Val Accuracy: 0.6178\n","===== Epoch 1686/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8198. Train Loss: 0.7847, Train Accuracy: 0.5969, Val Loss: 0.7538, Val Accuracy: 0.6089\n","===== Epoch 1687/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8198. Train Loss: 0.7948, Train Accuracy: 0.6031, Val Loss: 0.7377, Val Accuracy: 0.6489\n","===== Epoch 1688/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8198. Train Loss: 0.8165, Train Accuracy: 0.5796, Val Loss: 0.7996, Val Accuracy: 0.6089\n","===== Epoch 1689/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8198. Train Loss: 0.8090, Train Accuracy: 0.5898, Val Loss: 0.7575, Val Accuracy: 0.6533\n","===== Epoch 1690/2000 =====\n","New best model saved with Val ROC AUC: 0.8288, Train Loss: 0.7976, Train Accuracy: 0.6133, Val Loss: 0.7480, Val Accuracy: 0.6800\n","===== Epoch 1691/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8288. Train Loss: 0.7939, Train Accuracy: 0.6157, Val Loss: 0.7497, Val Accuracy: 0.6044\n","===== Epoch 1692/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8288. Train Loss: 0.8356, Train Accuracy: 0.5976, Val Loss: 0.7382, Val Accuracy: 0.5956\n","===== Epoch 1693/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8288. Train Loss: 0.8026, Train Accuracy: 0.6039, Val Loss: 0.7934, Val Accuracy: 0.5822\n","===== Epoch 1694/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8288. Train Loss: 0.8157, Train Accuracy: 0.5945, Val Loss: 0.7552, Val Accuracy: 0.6267\n","===== Epoch 1695/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8288. Train Loss: 0.7907, Train Accuracy: 0.6063, Val Loss: 0.7834, Val Accuracy: 0.6000\n","===== Epoch 1696/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8288. Train Loss: 0.8033, Train Accuracy: 0.6016, Val Loss: 0.7825, Val Accuracy: 0.6133\n","===== Epoch 1697/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8288. Train Loss: 0.8069, Train Accuracy: 0.6071, Val Loss: 0.7663, Val Accuracy: 0.5867\n","===== Epoch 1698/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8288. Train Loss: 0.8133, Train Accuracy: 0.5984, Val Loss: 0.7384, Val Accuracy: 0.6311\n","===== Epoch 1699/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8288. Train Loss: 0.7812, Train Accuracy: 0.6235, Val Loss: 0.7365, Val Accuracy: 0.6133\n","===== Epoch 1700/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8288. Train Loss: 0.7721, Train Accuracy: 0.6196, Val Loss: 0.7492, Val Accuracy: 0.6622\n","===== Epoch 1701/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8288. Train Loss: 0.7949, Train Accuracy: 0.5882, Val Loss: 0.7507, Val Accuracy: 0.6133\n","===== Epoch 1702/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8288. Train Loss: 0.8216, Train Accuracy: 0.5969, Val Loss: 0.6939, Val Accuracy: 0.6578\n","===== Epoch 1703/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8288. Train Loss: 0.7845, Train Accuracy: 0.6086, Val Loss: 0.7140, Val Accuracy: 0.6267\n","===== Epoch 1704/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8288. Train Loss: 0.7760, Train Accuracy: 0.6212, Val Loss: 0.7132, Val Accuracy: 0.6089\n","===== Epoch 1705/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8288. Train Loss: 0.7955, Train Accuracy: 0.6157, Val Loss: 0.7122, Val Accuracy: 0.6444\n","===== Epoch 1706/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8288. Train Loss: 0.7721, Train Accuracy: 0.6157, Val Loss: 0.7415, Val Accuracy: 0.6089\n","===== Epoch 1707/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8288. Train Loss: 0.8004, Train Accuracy: 0.6063, Val Loss: 0.7959, Val Accuracy: 0.6089\n","===== Epoch 1708/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8288. Train Loss: 0.7754, Train Accuracy: 0.6282, Val Loss: 0.7686, Val Accuracy: 0.5867\n","===== Epoch 1709/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8288. Train Loss: 0.7829, Train Accuracy: 0.6165, Val Loss: 0.7172, Val Accuracy: 0.6311\n","===== Epoch 1710/2000 =====\n","New best model saved with Val ROC AUC: 0.8354, Train Loss: 0.7713, Train Accuracy: 0.6416, Val Loss: 0.6830, Val Accuracy: 0.7067\n","===== Epoch 1711/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8354. Train Loss: 0.7821, Train Accuracy: 0.6157, Val Loss: 0.7623, Val Accuracy: 0.6356\n","===== Epoch 1712/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8354. Train Loss: 0.7838, Train Accuracy: 0.6149, Val Loss: 0.7549, Val Accuracy: 0.6267\n","===== Epoch 1713/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8354. Train Loss: 0.7662, Train Accuracy: 0.6267, Val Loss: 0.7081, Val Accuracy: 0.6444\n","===== Epoch 1714/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8354. Train Loss: 0.7723, Train Accuracy: 0.6212, Val Loss: 0.7006, Val Accuracy: 0.6533\n","===== Epoch 1715/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8354. Train Loss: 0.7792, Train Accuracy: 0.6227, Val Loss: 0.7781, Val Accuracy: 0.6178\n","===== Epoch 1716/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8354. Train Loss: 0.7466, Train Accuracy: 0.6267, Val Loss: 0.7526, Val Accuracy: 0.6444\n","===== Epoch 1717/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8354. Train Loss: 0.7651, Train Accuracy: 0.6259, Val Loss: 0.7145, Val Accuracy: 0.6267\n","===== Epoch 1718/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8354. Train Loss: 0.7595, Train Accuracy: 0.6039, Val Loss: 0.7405, Val Accuracy: 0.6489\n","===== Epoch 1719/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8354. Train Loss: 0.7726, Train Accuracy: 0.6157, Val Loss: 0.6967, Val Accuracy: 0.6622\n","===== Epoch 1720/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8354. Train Loss: 0.7649, Train Accuracy: 0.6243, Val Loss: 0.7300, Val Accuracy: 0.6711\n","===== Epoch 1721/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8354. Train Loss: 0.7458, Train Accuracy: 0.6290, Val Loss: 0.6848, Val Accuracy: 0.6844\n","===== Epoch 1722/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8354. Train Loss: 0.7591, Train Accuracy: 0.6110, Val Loss: 0.7037, Val Accuracy: 0.6489\n","===== Epoch 1723/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8354. Train Loss: 0.7705, Train Accuracy: 0.6204, Val Loss: 0.7459, Val Accuracy: 0.6222\n","===== Epoch 1724/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8354. Train Loss: 0.7620, Train Accuracy: 0.6039, Val Loss: 0.6768, Val Accuracy: 0.6711\n","===== Epoch 1725/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8354. Train Loss: 0.7708, Train Accuracy: 0.6251, Val Loss: 0.7298, Val Accuracy: 0.6178\n","===== Epoch 1726/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8354. Train Loss: 0.7640, Train Accuracy: 0.6227, Val Loss: 0.7363, Val Accuracy: 0.6622\n","===== Epoch 1727/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8354. Train Loss: 0.7423, Train Accuracy: 0.6243, Val Loss: 0.7241, Val Accuracy: 0.6444\n","===== Epoch 1728/2000 =====\n","New best model saved with Val ROC AUC: 0.8511, Train Loss: 0.7670, Train Accuracy: 0.6275, Val Loss: 0.6570, Val Accuracy: 0.6889\n","===== Epoch 1729/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8511. Train Loss: 0.7587, Train Accuracy: 0.6322, Val Loss: 0.6876, Val Accuracy: 0.6578\n","===== Epoch 1730/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8511. Train Loss: 0.7624, Train Accuracy: 0.6235, Val Loss: 0.7242, Val Accuracy: 0.6533\n","===== Epoch 1731/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8511. Train Loss: 0.7585, Train Accuracy: 0.6345, Val Loss: 0.7182, Val Accuracy: 0.6400\n","===== Epoch 1732/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8511. Train Loss: 0.7547, Train Accuracy: 0.6361, Val Loss: 0.6962, Val Accuracy: 0.6889\n","===== Epoch 1733/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8511. Train Loss: 0.7537, Train Accuracy: 0.6329, Val Loss: 0.7218, Val Accuracy: 0.6489\n","===== Epoch 1734/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8511. Train Loss: 0.7488, Train Accuracy: 0.6282, Val Loss: 0.6817, Val Accuracy: 0.6800\n","===== Epoch 1735/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8511. Train Loss: 0.7457, Train Accuracy: 0.6235, Val Loss: 0.7337, Val Accuracy: 0.6133\n","===== Epoch 1736/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8511. Train Loss: 0.7529, Train Accuracy: 0.6580, Val Loss: 0.7334, Val Accuracy: 0.6044\n","===== Epoch 1737/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8511. Train Loss: 0.7515, Train Accuracy: 0.6212, Val Loss: 0.7106, Val Accuracy: 0.6533\n","===== Epoch 1738/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8511. Train Loss: 0.7568, Train Accuracy: 0.6180, Val Loss: 0.7059, Val Accuracy: 0.6356\n","===== Epoch 1739/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8511. Train Loss: 0.7515, Train Accuracy: 0.6322, Val Loss: 0.7551, Val Accuracy: 0.6089\n","===== Epoch 1740/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8511. Train Loss: 0.7411, Train Accuracy: 0.6400, Val Loss: 0.7220, Val Accuracy: 0.6311\n","===== Epoch 1741/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8511. Train Loss: 0.7387, Train Accuracy: 0.6408, Val Loss: 0.7072, Val Accuracy: 0.6444\n","===== Epoch 1742/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8511. Train Loss: 0.7532, Train Accuracy: 0.6235, Val Loss: 0.7103, Val Accuracy: 0.6400\n","===== Epoch 1743/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8511. Train Loss: 0.7326, Train Accuracy: 0.6533, Val Loss: 0.7301, Val Accuracy: 0.6000\n","===== Epoch 1744/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8511. Train Loss: 0.7448, Train Accuracy: 0.6408, Val Loss: 0.7211, Val Accuracy: 0.6444\n","===== Epoch 1745/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8511. Train Loss: 0.7420, Train Accuracy: 0.6369, Val Loss: 0.7193, Val Accuracy: 0.6178\n","===== Epoch 1746/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8511. Train Loss: 0.7352, Train Accuracy: 0.6463, Val Loss: 0.6943, Val Accuracy: 0.6400\n","===== Epoch 1747/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8511. Train Loss: 0.7319, Train Accuracy: 0.6353, Val Loss: 0.7146, Val Accuracy: 0.6667\n","===== Epoch 1748/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8511. Train Loss: 0.7652, Train Accuracy: 0.6212, Val Loss: 0.7390, Val Accuracy: 0.6400\n","===== Epoch 1749/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8511. Train Loss: 0.7424, Train Accuracy: 0.6463, Val Loss: 0.7200, Val Accuracy: 0.6178\n","===== Epoch 1750/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8511. Train Loss: 0.7343, Train Accuracy: 0.6455, Val Loss: 0.7303, Val Accuracy: 0.6356\n","===== Epoch 1751/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8511. Train Loss: 0.7464, Train Accuracy: 0.6565, Val Loss: 0.7179, Val Accuracy: 0.6578\n","===== Epoch 1752/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8511. Train Loss: 0.7685, Train Accuracy: 0.6188, Val Loss: 0.7071, Val Accuracy: 0.6711\n","===== Epoch 1753/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8511. Train Loss: 0.7749, Train Accuracy: 0.6063, Val Loss: 0.7023, Val Accuracy: 0.6578\n","===== Epoch 1754/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8511. Train Loss: 0.7287, Train Accuracy: 0.6314, Val Loss: 0.6779, Val Accuracy: 0.6889\n","===== Epoch 1755/2000 =====\n","New best model saved with Val ROC AUC: 0.8528, Train Loss: 0.7473, Train Accuracy: 0.6439, Val Loss: 0.6806, Val Accuracy: 0.6933\n","===== Epoch 1756/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8528. Train Loss: 0.7479, Train Accuracy: 0.6337, Val Loss: 0.7071, Val Accuracy: 0.6533\n","===== Epoch 1757/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8528. Train Loss: 0.7526, Train Accuracy: 0.6447, Val Loss: 0.6756, Val Accuracy: 0.6844\n","===== Epoch 1758/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8528. Train Loss: 0.7300, Train Accuracy: 0.6510, Val Loss: 0.6993, Val Accuracy: 0.6578\n","===== Epoch 1759/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8528. Train Loss: 0.7558, Train Accuracy: 0.6329, Val Loss: 0.7351, Val Accuracy: 0.6089\n","===== Epoch 1760/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8528. Train Loss: 0.7736, Train Accuracy: 0.6259, Val Loss: 0.7475, Val Accuracy: 0.6400\n","===== Epoch 1761/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8528. Train Loss: 0.7582, Train Accuracy: 0.6290, Val Loss: 0.7393, Val Accuracy: 0.6400\n","===== Epoch 1762/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8528. Train Loss: 0.7440, Train Accuracy: 0.6322, Val Loss: 0.6809, Val Accuracy: 0.6711\n","===== Epoch 1763/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8528. Train Loss: 0.7594, Train Accuracy: 0.6408, Val Loss: 0.7603, Val Accuracy: 0.6267\n","===== Epoch 1764/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8528. Train Loss: 0.7740, Train Accuracy: 0.6180, Val Loss: 0.6931, Val Accuracy: 0.6667\n","===== Epoch 1765/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8528. Train Loss: 0.7324, Train Accuracy: 0.6573, Val Loss: 0.7329, Val Accuracy: 0.5956\n","===== Epoch 1766/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8528. Train Loss: 0.7474, Train Accuracy: 0.6416, Val Loss: 0.6706, Val Accuracy: 0.6711\n","===== Epoch 1767/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8528. Train Loss: 0.7646, Train Accuracy: 0.6314, Val Loss: 0.6976, Val Accuracy: 0.6578\n","===== Epoch 1768/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8528. Train Loss: 0.7681, Train Accuracy: 0.6180, Val Loss: 0.7089, Val Accuracy: 0.6489\n","===== Epoch 1769/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8528. Train Loss: 0.7865, Train Accuracy: 0.6141, Val Loss: 0.7480, Val Accuracy: 0.6000\n","===== Epoch 1770/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8528. Train Loss: 0.7800, Train Accuracy: 0.6157, Val Loss: 0.7316, Val Accuracy: 0.6044\n","===== Epoch 1771/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8528. Train Loss: 0.7596, Train Accuracy: 0.6322, Val Loss: 0.6859, Val Accuracy: 0.6667\n","===== Epoch 1772/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8528. Train Loss: 0.7681, Train Accuracy: 0.6102, Val Loss: 0.7084, Val Accuracy: 0.6400\n","===== Epoch 1773/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8528. Train Loss: 0.7777, Train Accuracy: 0.6243, Val Loss: 0.7018, Val Accuracy: 0.6756\n","===== Epoch 1774/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8528. Train Loss: 0.7798, Train Accuracy: 0.6157, Val Loss: 0.7441, Val Accuracy: 0.6578\n","===== Epoch 1775/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8528. Train Loss: 0.7714, Train Accuracy: 0.6204, Val Loss: 0.7530, Val Accuracy: 0.6400\n","===== Epoch 1776/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8528. Train Loss: 0.7488, Train Accuracy: 0.6384, Val Loss: 0.7590, Val Accuracy: 0.6222\n","===== Epoch 1777/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8528. Train Loss: 0.7630, Train Accuracy: 0.5976, Val Loss: 0.7306, Val Accuracy: 0.6044\n","===== Epoch 1778/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8528. Train Loss: 0.7842, Train Accuracy: 0.5976, Val Loss: 0.7806, Val Accuracy: 0.5822\n","===== Epoch 1779/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8528. Train Loss: 0.7525, Train Accuracy: 0.6471, Val Loss: 0.7613, Val Accuracy: 0.6089\n","===== Epoch 1780/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8528. Train Loss: 0.7631, Train Accuracy: 0.6024, Val Loss: 0.7532, Val Accuracy: 0.6356\n","===== Epoch 1781/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8528. Train Loss: 0.7866, Train Accuracy: 0.6086, Val Loss: 0.7232, Val Accuracy: 0.6044\n","===== Epoch 1782/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8528. Train Loss: 0.7841, Train Accuracy: 0.6039, Val Loss: 0.7809, Val Accuracy: 0.6267\n","===== Epoch 1783/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8528. Train Loss: 0.7720, Train Accuracy: 0.6078, Val Loss: 0.8030, Val Accuracy: 0.5333\n","===== Epoch 1784/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8528. Train Loss: 0.7610, Train Accuracy: 0.5984, Val Loss: 0.7020, Val Accuracy: 0.6533\n","===== Epoch 1785/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8528. Train Loss: 0.7536, Train Accuracy: 0.6314, Val Loss: 0.7603, Val Accuracy: 0.6444\n","===== Epoch 1786/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8528. Train Loss: 0.7644, Train Accuracy: 0.6235, Val Loss: 0.7284, Val Accuracy: 0.6356\n","===== Epoch 1787/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8528. Train Loss: 0.7534, Train Accuracy: 0.6282, Val Loss: 0.7454, Val Accuracy: 0.6400\n","===== Epoch 1788/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8528. Train Loss: 0.7670, Train Accuracy: 0.6165, Val Loss: 0.7451, Val Accuracy: 0.6356\n","===== Epoch 1789/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8528. Train Loss: 0.7590, Train Accuracy: 0.6204, Val Loss: 0.7653, Val Accuracy: 0.6044\n","===== Epoch 1790/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8528. Train Loss: 0.7592, Train Accuracy: 0.6275, Val Loss: 0.6745, Val Accuracy: 0.6356\n","===== Epoch 1791/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8528. Train Loss: 0.8055, Train Accuracy: 0.6024, Val Loss: 0.6963, Val Accuracy: 0.7022\n","===== Epoch 1792/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8528. Train Loss: 0.7521, Train Accuracy: 0.6345, Val Loss: 0.7808, Val Accuracy: 0.5778\n","===== Epoch 1793/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8528. Train Loss: 0.7635, Train Accuracy: 0.6235, Val Loss: 0.7112, Val Accuracy: 0.6489\n","===== Epoch 1794/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8528. Train Loss: 0.7493, Train Accuracy: 0.6345, Val Loss: 0.7505, Val Accuracy: 0.6356\n","===== Epoch 1795/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8528. Train Loss: 0.7777, Train Accuracy: 0.5969, Val Loss: 0.6946, Val Accuracy: 0.6444\n","===== Epoch 1796/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8528. Train Loss: 0.7415, Train Accuracy: 0.6361, Val Loss: 0.7581, Val Accuracy: 0.5778\n","===== Epoch 1797/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8528. Train Loss: 0.7581, Train Accuracy: 0.6227, Val Loss: 0.7478, Val Accuracy: 0.6533\n","===== Epoch 1798/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8528. Train Loss: 0.7632, Train Accuracy: 0.6141, Val Loss: 0.8229, Val Accuracy: 0.5644\n","===== Epoch 1799/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8528. Train Loss: 0.7516, Train Accuracy: 0.6392, Val Loss: 0.7302, Val Accuracy: 0.6844\n","===== Epoch 1800/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8528. Train Loss: 0.7561, Train Accuracy: 0.6196, Val Loss: 0.7105, Val Accuracy: 0.6578\n","===== Epoch 1801/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8528. Train Loss: 0.7471, Train Accuracy: 0.6510, Val Loss: 0.7243, Val Accuracy: 0.6356\n","===== Epoch 1802/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8528. Train Loss: 0.7467, Train Accuracy: 0.6329, Val Loss: 0.7463, Val Accuracy: 0.5911\n","===== Epoch 1803/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8528. Train Loss: 0.7781, Train Accuracy: 0.6118, Val Loss: 0.7741, Val Accuracy: 0.6089\n","===== Epoch 1804/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8528. Train Loss: 0.7513, Train Accuracy: 0.6447, Val Loss: 0.7344, Val Accuracy: 0.6444\n","===== Epoch 1805/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8528. Train Loss: 0.7380, Train Accuracy: 0.6275, Val Loss: 0.7201, Val Accuracy: 0.6667\n","===== Epoch 1806/2000 =====\n","New best model saved with Val ROC AUC: 0.8562, Train Loss: 0.7615, Train Accuracy: 0.6494, Val Loss: 0.6657, Val Accuracy: 0.7067\n","===== Epoch 1807/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8562. Train Loss: 0.7271, Train Accuracy: 0.6353, Val Loss: 0.6741, Val Accuracy: 0.6933\n","===== Epoch 1808/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8562. Train Loss: 0.7413, Train Accuracy: 0.6329, Val Loss: 0.7276, Val Accuracy: 0.6400\n","===== Epoch 1809/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8562. Train Loss: 0.7563, Train Accuracy: 0.6196, Val Loss: 0.6719, Val Accuracy: 0.7067\n","===== Epoch 1810/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8562. Train Loss: 0.7141, Train Accuracy: 0.6557, Val Loss: 0.7427, Val Accuracy: 0.6311\n","===== Epoch 1811/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8562. Train Loss: 0.7349, Train Accuracy: 0.6439, Val Loss: 0.6864, Val Accuracy: 0.6711\n","===== Epoch 1812/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8562. Train Loss: 0.7241, Train Accuracy: 0.6439, Val Loss: 0.7177, Val Accuracy: 0.6267\n","===== Epoch 1813/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8562. Train Loss: 0.7317, Train Accuracy: 0.6400, Val Loss: 0.6765, Val Accuracy: 0.6667\n","===== Epoch 1814/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8562. Train Loss: 0.7317, Train Accuracy: 0.6431, Val Loss: 0.6844, Val Accuracy: 0.6578\n","===== Epoch 1815/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8562. Train Loss: 0.7376, Train Accuracy: 0.6502, Val Loss: 0.7526, Val Accuracy: 0.6311\n","===== Epoch 1816/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8562. Train Loss: 0.7235, Train Accuracy: 0.6384, Val Loss: 0.6877, Val Accuracy: 0.6800\n","===== Epoch 1817/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8562. Train Loss: 0.7471, Train Accuracy: 0.6424, Val Loss: 0.6713, Val Accuracy: 0.6444\n","===== Epoch 1818/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8562. Train Loss: 0.7227, Train Accuracy: 0.6361, Val Loss: 0.6519, Val Accuracy: 0.6578\n","===== Epoch 1819/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8562. Train Loss: 0.7120, Train Accuracy: 0.6447, Val Loss: 0.6758, Val Accuracy: 0.6444\n","===== Epoch 1820/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8562. Train Loss: 0.7249, Train Accuracy: 0.6392, Val Loss: 0.6973, Val Accuracy: 0.6000\n","===== Epoch 1821/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8562. Train Loss: 0.7451, Train Accuracy: 0.6251, Val Loss: 0.6452, Val Accuracy: 0.7067\n","===== Epoch 1822/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8562. Train Loss: 0.7182, Train Accuracy: 0.6533, Val Loss: 0.7323, Val Accuracy: 0.6489\n","===== Epoch 1823/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8562. Train Loss: 0.7171, Train Accuracy: 0.6596, Val Loss: 0.6939, Val Accuracy: 0.6533\n","===== Epoch 1824/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8562. Train Loss: 0.7445, Train Accuracy: 0.6314, Val Loss: 0.6807, Val Accuracy: 0.6444\n","===== Epoch 1825/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8562. Train Loss: 0.7067, Train Accuracy: 0.6455, Val Loss: 0.6972, Val Accuracy: 0.6578\n","===== Epoch 1826/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8562. Train Loss: 0.7258, Train Accuracy: 0.6518, Val Loss: 0.7008, Val Accuracy: 0.6889\n","===== Epoch 1827/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8562. Train Loss: 0.7331, Train Accuracy: 0.6478, Val Loss: 0.6843, Val Accuracy: 0.6978\n","===== Epoch 1828/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8562. Train Loss: 0.7100, Train Accuracy: 0.6667, Val Loss: 0.6576, Val Accuracy: 0.6667\n","===== Epoch 1829/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8562. Train Loss: 0.7122, Train Accuracy: 0.6667, Val Loss: 0.6451, Val Accuracy: 0.7067\n","===== Epoch 1830/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8562. Train Loss: 0.7392, Train Accuracy: 0.6400, Val Loss: 0.7131, Val Accuracy: 0.6711\n","===== Epoch 1831/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8562. Train Loss: 0.7304, Train Accuracy: 0.6455, Val Loss: 0.6822, Val Accuracy: 0.6756\n","===== Epoch 1832/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8562. Train Loss: 0.6968, Train Accuracy: 0.6627, Val Loss: 0.6744, Val Accuracy: 0.6667\n","===== Epoch 1833/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8562. Train Loss: 0.7044, Train Accuracy: 0.6486, Val Loss: 0.6889, Val Accuracy: 0.6667\n","===== Epoch 1834/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6627, Val Loss: 0.6638, Val Accuracy: 0.6756\n","===== Epoch 1835/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8562. Train Loss: 0.7092, Train Accuracy: 0.6635, Val Loss: 0.6502, Val Accuracy: 0.6978\n","===== Epoch 1836/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8562. Train Loss: 0.7148, Train Accuracy: 0.6416, Val Loss: 0.6783, Val Accuracy: 0.6400\n","===== Epoch 1837/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8562. Train Loss: 0.7142, Train Accuracy: 0.6620, Val Loss: 0.7257, Val Accuracy: 0.6133\n","===== Epoch 1838/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8562. Train Loss: 0.7161, Train Accuracy: 0.6510, Val Loss: 0.6485, Val Accuracy: 0.6667\n","===== Epoch 1839/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8562. Train Loss: 0.7045, Train Accuracy: 0.6682, Val Loss: 0.6902, Val Accuracy: 0.6533\n","===== Epoch 1840/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8562. Train Loss: 0.7186, Train Accuracy: 0.6455, Val Loss: 0.6641, Val Accuracy: 0.6489\n","===== Epoch 1841/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8562. Train Loss: 0.7090, Train Accuracy: 0.6573, Val Loss: 0.7173, Val Accuracy: 0.6533\n","===== Epoch 1842/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6604, Val Loss: 0.6590, Val Accuracy: 0.6489\n","===== Epoch 1843/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8562. Train Loss: 0.7256, Train Accuracy: 0.6502, Val Loss: 0.6588, Val Accuracy: 0.6933\n","===== Epoch 1844/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8562. Train Loss: 0.7203, Train Accuracy: 0.6620, Val Loss: 0.6515, Val Accuracy: 0.7022\n","===== Epoch 1845/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8562. Train Loss: 0.7123, Train Accuracy: 0.6557, Val Loss: 0.6642, Val Accuracy: 0.6978\n","===== Epoch 1846/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8562. Train Loss: 0.7133, Train Accuracy: 0.6549, Val Loss: 0.6915, Val Accuracy: 0.6933\n","===== Epoch 1847/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8562. Train Loss: 0.7050, Train Accuracy: 0.6447, Val Loss: 0.6803, Val Accuracy: 0.6489\n","===== Epoch 1848/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8562. Train Loss: 0.7052, Train Accuracy: 0.6698, Val Loss: 0.7007, Val Accuracy: 0.6933\n","===== Epoch 1849/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8562. Train Loss: 0.7058, Train Accuracy: 0.6525, Val Loss: 0.7177, Val Accuracy: 0.6356\n","===== Epoch 1850/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8562. Train Loss: 0.7267, Train Accuracy: 0.6510, Val Loss: 0.6937, Val Accuracy: 0.6578\n","===== Epoch 1851/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8562. Train Loss: 0.7156, Train Accuracy: 0.6471, Val Loss: 0.6812, Val Accuracy: 0.6756\n","===== Epoch 1852/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6651, Val Loss: 0.6367, Val Accuracy: 0.6756\n","===== Epoch 1853/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8562. Train Loss: 0.7213, Train Accuracy: 0.6400, Val Loss: 0.6976, Val Accuracy: 0.6222\n","===== Epoch 1854/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8562. Train Loss: 0.7231, Train Accuracy: 0.6667, Val Loss: 0.6946, Val Accuracy: 0.6444\n","===== Epoch 1855/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8562. Train Loss: 0.7111, Train Accuracy: 0.6565, Val Loss: 0.6435, Val Accuracy: 0.6978\n","===== Epoch 1856/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8562. Train Loss: 0.7120, Train Accuracy: 0.6471, Val Loss: 0.6504, Val Accuracy: 0.7156\n","===== Epoch 1857/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8562. Train Loss: 0.7180, Train Accuracy: 0.6518, Val Loss: 0.6897, Val Accuracy: 0.6622\n","===== Epoch 1858/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8562. Train Loss: 0.6997, Train Accuracy: 0.6682, Val Loss: 0.6769, Val Accuracy: 0.6711\n","===== Epoch 1859/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8562. Train Loss: 0.7040, Train Accuracy: 0.6502, Val Loss: 0.7018, Val Accuracy: 0.6400\n","===== Epoch 1860/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8562. Train Loss: 0.7087, Train Accuracy: 0.6549, Val Loss: 0.6633, Val Accuracy: 0.6533\n","===== Epoch 1861/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8562. Train Loss: 0.7433, Train Accuracy: 0.6447, Val Loss: 0.6370, Val Accuracy: 0.7111\n","===== Epoch 1862/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8562. Train Loss: 0.7108, Train Accuracy: 0.6329, Val Loss: 0.7566, Val Accuracy: 0.5956\n","===== Epoch 1863/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8562. Train Loss: 0.7155, Train Accuracy: 0.6573, Val Loss: 0.6547, Val Accuracy: 0.6622\n","===== Epoch 1864/2000 =====\n","New best model saved with Val ROC AUC: 0.8661, Train Loss: 0.7220, Train Accuracy: 0.6392, Val Loss: 0.6386, Val Accuracy: 0.7244\n","===== Epoch 1865/2000 =====\n","No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8661. Train Loss: 0.7395, Train Accuracy: 0.6392, Val Loss: 0.6613, Val Accuracy: 0.6444\n","===== Epoch 1866/2000 =====\n","No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8661. Train Loss: 0.7513, Train Accuracy: 0.6235, Val Loss: 0.6307, Val Accuracy: 0.7067\n","===== Epoch 1867/2000 =====\n","No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8661. Train Loss: 0.7105, Train Accuracy: 0.6424, Val Loss: 0.6486, Val Accuracy: 0.6756\n","===== Epoch 1868/2000 =====\n","No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8661. Train Loss: 0.7534, Train Accuracy: 0.6306, Val Loss: 0.6964, Val Accuracy: 0.6356\n","===== Epoch 1869/2000 =====\n","No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8661. Train Loss: 0.7142, Train Accuracy: 0.6494, Val Loss: 0.6729, Val Accuracy: 0.6800\n","===== Epoch 1870/2000 =====\n","No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8661. Train Loss: 0.7265, Train Accuracy: 0.6400, Val Loss: 0.7831, Val Accuracy: 0.6089\n","===== Epoch 1871/2000 =====\n","No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8661. Train Loss: 0.7440, Train Accuracy: 0.6322, Val Loss: 0.6536, Val Accuracy: 0.6711\n","===== Epoch 1872/2000 =====\n","No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8661. Train Loss: 0.7277, Train Accuracy: 0.6431, Val Loss: 0.7337, Val Accuracy: 0.6222\n","===== Epoch 1873/2000 =====\n","No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8661. Train Loss: 0.7552, Train Accuracy: 0.6267, Val Loss: 0.7159, Val Accuracy: 0.6444\n","===== Epoch 1874/2000 =====\n","No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8661. Train Loss: 0.7570, Train Accuracy: 0.6196, Val Loss: 0.6953, Val Accuracy: 0.6533\n","===== Epoch 1875/2000 =====\n","No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8661. Train Loss: 0.7382, Train Accuracy: 0.6424, Val Loss: 0.6589, Val Accuracy: 0.7067\n","===== Epoch 1876/2000 =====\n","No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8661. Train Loss: 0.7281, Train Accuracy: 0.6565, Val Loss: 0.7162, Val Accuracy: 0.6356\n","===== Epoch 1877/2000 =====\n","No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8661. Train Loss: 0.7457, Train Accuracy: 0.6180, Val Loss: 0.6805, Val Accuracy: 0.6800\n","===== Epoch 1878/2000 =====\n","No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8661. Train Loss: 0.7429, Train Accuracy: 0.6376, Val Loss: 0.7338, Val Accuracy: 0.6489\n","===== Epoch 1879/2000 =====\n","No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8661. Train Loss: 0.7261, Train Accuracy: 0.6259, Val Loss: 0.7310, Val Accuracy: 0.6222\n","===== Epoch 1880/2000 =====\n","No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8661. Train Loss: 0.7733, Train Accuracy: 0.6118, Val Loss: 0.8081, Val Accuracy: 0.6178\n","===== Epoch 1881/2000 =====\n","No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8661. Train Loss: 0.7504, Train Accuracy: 0.6408, Val Loss: 0.6754, Val Accuracy: 0.6844\n","===== Epoch 1882/2000 =====\n","No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8661. Train Loss: 0.7378, Train Accuracy: 0.6337, Val Loss: 0.6969, Val Accuracy: 0.6533\n","===== Epoch 1883/2000 =====\n","No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8661. Train Loss: 0.7035, Train Accuracy: 0.6494, Val Loss: 0.7107, Val Accuracy: 0.6178\n","===== Epoch 1884/2000 =====\n","No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8661. Train Loss: 0.7127, Train Accuracy: 0.6345, Val Loss: 0.6848, Val Accuracy: 0.6622\n","===== Epoch 1885/2000 =====\n","No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8661. Train Loss: 0.7318, Train Accuracy: 0.6337, Val Loss: 0.6867, Val Accuracy: 0.6489\n","===== Epoch 1886/2000 =====\n","No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8661. Train Loss: 0.7176, Train Accuracy: 0.6690, Val Loss: 0.7476, Val Accuracy: 0.6311\n","===== Epoch 1887/2000 =====\n","No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8661. Train Loss: 0.7712, Train Accuracy: 0.6282, Val Loss: 0.7374, Val Accuracy: 0.6356\n","===== Epoch 1888/2000 =====\n","No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8661. Train Loss: 0.7459, Train Accuracy: 0.6267, Val Loss: 0.6771, Val Accuracy: 0.6800\n","===== Epoch 1889/2000 =====\n","No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8661. Train Loss: 0.7223, Train Accuracy: 0.6455, Val Loss: 0.7030, Val Accuracy: 0.6444\n","===== Epoch 1890/2000 =====\n","No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8661. Train Loss: 0.7275, Train Accuracy: 0.6596, Val Loss: 0.6798, Val Accuracy: 0.6578\n","===== Epoch 1891/2000 =====\n","No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8661. Train Loss: 0.7221, Train Accuracy: 0.6565, Val Loss: 0.6604, Val Accuracy: 0.6622\n","===== Epoch 1892/2000 =====\n","No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8661. Train Loss: 0.7176, Train Accuracy: 0.6424, Val Loss: 0.6925, Val Accuracy: 0.6489\n","===== Epoch 1893/2000 =====\n","No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8661. Train Loss: 0.7341, Train Accuracy: 0.6353, Val Loss: 0.8074, Val Accuracy: 0.6311\n","===== Epoch 1894/2000 =====\n","No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8661. Train Loss: 0.7158, Train Accuracy: 0.6518, Val Loss: 0.6438, Val Accuracy: 0.6933\n","===== Epoch 1895/2000 =====\n","No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8661. Train Loss: 0.6994, Train Accuracy: 0.6588, Val Loss: 0.7332, Val Accuracy: 0.6222\n","===== Epoch 1896/2000 =====\n","No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8661. Train Loss: 0.7254, Train Accuracy: 0.6322, Val Loss: 0.6772, Val Accuracy: 0.6444\n","===== Epoch 1897/2000 =====\n","No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8661. Train Loss: 0.7285, Train Accuracy: 0.6494, Val Loss: 0.7251, Val Accuracy: 0.6089\n","===== Epoch 1898/2000 =====\n","No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8661. Train Loss: 0.7273, Train Accuracy: 0.6455, Val Loss: 0.6316, Val Accuracy: 0.6844\n","===== Epoch 1899/2000 =====\n","No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8661. Train Loss: 0.7511, Train Accuracy: 0.6392, Val Loss: 0.6682, Val Accuracy: 0.6578\n","===== Epoch 1900/2000 =====\n","No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8661. Train Loss: 0.7235, Train Accuracy: 0.6604, Val Loss: 0.6672, Val Accuracy: 0.6889\n","===== Epoch 1901/2000 =====\n","No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8661. Train Loss: 0.7221, Train Accuracy: 0.6447, Val Loss: 0.6589, Val Accuracy: 0.6978\n","===== Epoch 1902/2000 =====\n","No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8661. Train Loss: 0.7110, Train Accuracy: 0.6557, Val Loss: 0.6534, Val Accuracy: 0.6800\n","===== Epoch 1903/2000 =====\n","No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8661. Train Loss: 0.7126, Train Accuracy: 0.6510, Val Loss: 0.6683, Val Accuracy: 0.7067\n","===== Epoch 1904/2000 =====\n","No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8661. Train Loss: 0.7219, Train Accuracy: 0.6416, Val Loss: 0.6811, Val Accuracy: 0.6311\n","===== Epoch 1905/2000 =====\n","No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8661. Train Loss: 0.7116, Train Accuracy: 0.6510, Val Loss: 0.6694, Val Accuracy: 0.6489\n","===== Epoch 1906/2000 =====\n","No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8661. Train Loss: 0.7510, Train Accuracy: 0.6251, Val Loss: 0.7060, Val Accuracy: 0.6400\n","===== Epoch 1907/2000 =====\n","No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8661. Train Loss: 0.7051, Train Accuracy: 0.6463, Val Loss: 0.7166, Val Accuracy: 0.6311\n","===== Epoch 1908/2000 =====\n","No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8661. Train Loss: 0.6999, Train Accuracy: 0.6588, Val Loss: 0.6293, Val Accuracy: 0.7333\n","===== Epoch 1909/2000 =====\n","No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8661. Train Loss: 0.7195, Train Accuracy: 0.6471, Val Loss: 0.6704, Val Accuracy: 0.6667\n","===== Epoch 1910/2000 =====\n","No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8661. Train Loss: 0.7239, Train Accuracy: 0.6455, Val Loss: 0.6290, Val Accuracy: 0.7333\n","===== Epoch 1911/2000 =====\n","No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8661. Train Loss: 0.7165, Train Accuracy: 0.6424, Val Loss: 0.6691, Val Accuracy: 0.6800\n","===== Epoch 1912/2000 =====\n","No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8661. Train Loss: 0.7122, Train Accuracy: 0.6400, Val Loss: 0.6587, Val Accuracy: 0.6667\n","===== Epoch 1913/2000 =====\n","No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8661. Train Loss: 0.7268, Train Accuracy: 0.6478, Val Loss: 0.7185, Val Accuracy: 0.6711\n","===== Epoch 1914/2000 =====\n","No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8661. Train Loss: 0.7240, Train Accuracy: 0.6455, Val Loss: 0.6747, Val Accuracy: 0.6400\n","===== Epoch 1915/2000 =====\n","No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8661. Train Loss: 0.7207, Train Accuracy: 0.6502, Val Loss: 0.6555, Val Accuracy: 0.6800\n","===== Epoch 1916/2000 =====\n","No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8661. Train Loss: 0.6860, Train Accuracy: 0.6737, Val Loss: 0.6380, Val Accuracy: 0.6978\n","===== Epoch 1917/2000 =====\n","No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8661. Train Loss: 0.7169, Train Accuracy: 0.6345, Val Loss: 0.6912, Val Accuracy: 0.6578\n","===== Epoch 1918/2000 =====\n","No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8661. Train Loss: 0.6978, Train Accuracy: 0.6486, Val Loss: 0.6002, Val Accuracy: 0.6844\n","===== Epoch 1919/2000 =====\n","No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8661. Train Loss: 0.7028, Train Accuracy: 0.6722, Val Loss: 0.6372, Val Accuracy: 0.6889\n","===== Epoch 1920/2000 =====\n","No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8661. Train Loss: 0.6909, Train Accuracy: 0.6573, Val Loss: 0.6907, Val Accuracy: 0.6311\n","===== Epoch 1921/2000 =====\n","No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8661. Train Loss: 0.7001, Train Accuracy: 0.6478, Val Loss: 0.6385, Val Accuracy: 0.6667\n","===== Epoch 1922/2000 =====\n","No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8661. Train Loss: 0.6845, Train Accuracy: 0.6612, Val Loss: 0.6329, Val Accuracy: 0.7200\n","===== Epoch 1923/2000 =====\n","No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8661. Train Loss: 0.6921, Train Accuracy: 0.6729, Val Loss: 0.6685, Val Accuracy: 0.6800\n","===== Epoch 1924/2000 =====\n","No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8661. Train Loss: 0.6822, Train Accuracy: 0.6612, Val Loss: 0.6697, Val Accuracy: 0.7156\n","===== Epoch 1925/2000 =====\n","No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8661. Train Loss: 0.7150, Train Accuracy: 0.6588, Val Loss: 0.6700, Val Accuracy: 0.6578\n","===== Epoch 1926/2000 =====\n","No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8661. Train Loss: 0.6934, Train Accuracy: 0.6745, Val Loss: 0.6728, Val Accuracy: 0.6578\n","===== Epoch 1927/2000 =====\n","No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8661. Train Loss: 0.6959, Train Accuracy: 0.6635, Val Loss: 0.6891, Val Accuracy: 0.6311\n","===== Epoch 1928/2000 =====\n","No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8661. Train Loss: 0.6818, Train Accuracy: 0.6816, Val Loss: 0.6495, Val Accuracy: 0.6933\n","===== Epoch 1929/2000 =====\n","No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8661. Train Loss: 0.6965, Train Accuracy: 0.6745, Val Loss: 0.6073, Val Accuracy: 0.7067\n","===== Epoch 1930/2000 =====\n","No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8661. Train Loss: 0.6838, Train Accuracy: 0.6894, Val Loss: 0.6563, Val Accuracy: 0.6533\n","===== Epoch 1931/2000 =====\n","No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8661. Train Loss: 0.6868, Train Accuracy: 0.6588, Val Loss: 0.6725, Val Accuracy: 0.6711\n","===== Epoch 1932/2000 =====\n","No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8661. Train Loss: 0.6838, Train Accuracy: 0.6682, Val Loss: 0.6516, Val Accuracy: 0.6578\n","===== Epoch 1933/2000 =====\n","No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8661. Train Loss: 0.6910, Train Accuracy: 0.6714, Val Loss: 0.6437, Val Accuracy: 0.6756\n","===== Epoch 1934/2000 =====\n","No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8661. Train Loss: 0.6814, Train Accuracy: 0.6675, Val Loss: 0.7163, Val Accuracy: 0.6489\n","===== Epoch 1935/2000 =====\n","No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8661. Train Loss: 0.6891, Train Accuracy: 0.6541, Val Loss: 0.6677, Val Accuracy: 0.6889\n","===== Epoch 1936/2000 =====\n","No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8661. Train Loss: 0.6820, Train Accuracy: 0.6612, Val Loss: 0.6390, Val Accuracy: 0.7067\n","===== Epoch 1937/2000 =====\n","No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8661. Train Loss: 0.6871, Train Accuracy: 0.6573, Val Loss: 0.6092, Val Accuracy: 0.7244\n","===== Epoch 1938/2000 =====\n","No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8661. Train Loss: 0.6725, Train Accuracy: 0.6784, Val Loss: 0.6406, Val Accuracy: 0.6978\n","===== Epoch 1939/2000 =====\n","No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8661. Train Loss: 0.6834, Train Accuracy: 0.6729, Val Loss: 0.6717, Val Accuracy: 0.6667\n","===== Epoch 1940/2000 =====\n","No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8661. Train Loss: 0.6984, Train Accuracy: 0.6478, Val Loss: 0.6554, Val Accuracy: 0.6622\n","===== Epoch 1941/2000 =====\n","No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8661. Train Loss: 0.6809, Train Accuracy: 0.6682, Val Loss: 0.6034, Val Accuracy: 0.7289\n","===== Epoch 1942/2000 =====\n","No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8661. Train Loss: 0.6784, Train Accuracy: 0.6902, Val Loss: 0.6605, Val Accuracy: 0.6711\n","===== Epoch 1943/2000 =====\n","No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8661. Train Loss: 0.6824, Train Accuracy: 0.6737, Val Loss: 0.6471, Val Accuracy: 0.7111\n","===== Epoch 1944/2000 =====\n","No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8661. Train Loss: 0.6707, Train Accuracy: 0.6847, Val Loss: 0.6348, Val Accuracy: 0.6622\n","===== Epoch 1945/2000 =====\n","No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8661. Train Loss: 0.6912, Train Accuracy: 0.6557, Val Loss: 0.6655, Val Accuracy: 0.6489\n","===== Epoch 1946/2000 =====\n","No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8661. Train Loss: 0.6730, Train Accuracy: 0.6659, Val Loss: 0.6558, Val Accuracy: 0.6800\n","===== Epoch 1947/2000 =====\n","No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8661. Train Loss: 0.6970, Train Accuracy: 0.6627, Val Loss: 0.6842, Val Accuracy: 0.6667\n","===== Epoch 1948/2000 =====\n","No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8661. Train Loss: 0.6779, Train Accuracy: 0.6714, Val Loss: 0.6124, Val Accuracy: 0.7067\n","===== Epoch 1949/2000 =====\n","No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8661. Train Loss: 0.6770, Train Accuracy: 0.6698, Val Loss: 0.6456, Val Accuracy: 0.6622\n","===== Epoch 1950/2000 =====\n","No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8661. Train Loss: 0.6853, Train Accuracy: 0.6604, Val Loss: 0.6578, Val Accuracy: 0.6533\n","===== Epoch 1951/2000 =====\n","No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8661. Train Loss: 0.6891, Train Accuracy: 0.6808, Val Loss: 0.6312, Val Accuracy: 0.7156\n","===== Epoch 1952/2000 =====\n","No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8661. Train Loss: 0.7069, Train Accuracy: 0.6557, Val Loss: 0.6511, Val Accuracy: 0.6978\n","===== Epoch 1953/2000 =====\n","No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8661. Train Loss: 0.6880, Train Accuracy: 0.6698, Val Loss: 0.6695, Val Accuracy: 0.6711\n","===== Epoch 1954/2000 =====\n","No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8661. Train Loss: 0.6687, Train Accuracy: 0.6831, Val Loss: 0.6957, Val Accuracy: 0.6444\n","===== Epoch 1955/2000 =====\n","No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8661. Train Loss: 0.6871, Train Accuracy: 0.6690, Val Loss: 0.6651, Val Accuracy: 0.7022\n","===== Epoch 1956/2000 =====\n","No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8661. Train Loss: 0.7066, Train Accuracy: 0.6471, Val Loss: 0.6303, Val Accuracy: 0.7156\n","===== Epoch 1957/2000 =====\n","No improvement in Val ROC AUC for 93 epoch(s). Best is 0.8661. Train Loss: 0.6692, Train Accuracy: 0.6706, Val Loss: 0.6612, Val Accuracy: 0.6800\n","===== Epoch 1958/2000 =====\n","No improvement in Val ROC AUC for 94 epoch(s). Best is 0.8661. Train Loss: 0.6918, Train Accuracy: 0.6776, Val Loss: 0.7065, Val Accuracy: 0.6533\n","===== Epoch 1959/2000 =====\n","No improvement in Val ROC AUC for 95 epoch(s). Best is 0.8661. Train Loss: 0.6941, Train Accuracy: 0.6651, Val Loss: 0.6879, Val Accuracy: 0.6622\n","===== Epoch 1960/2000 =====\n","No improvement in Val ROC AUC for 96 epoch(s). Best is 0.8661. Train Loss: 0.7157, Train Accuracy: 0.6486, Val Loss: 0.6280, Val Accuracy: 0.7111\n","===== Epoch 1961/2000 =====\n","No improvement in Val ROC AUC for 97 epoch(s). Best is 0.8661. Train Loss: 0.6850, Train Accuracy: 0.6549, Val Loss: 0.6570, Val Accuracy: 0.6756\n","===== Epoch 1962/2000 =====\n","No improvement in Val ROC AUC for 98 epoch(s). Best is 0.8661. Train Loss: 0.6914, Train Accuracy: 0.6651, Val Loss: 0.6346, Val Accuracy: 0.7022\n","===== Epoch 1963/2000 =====\n","No improvement in Val ROC AUC for 99 epoch(s). Best is 0.8661. Train Loss: 0.6921, Train Accuracy: 0.6776, Val Loss: 0.6717, Val Accuracy: 0.6933\n","===== Epoch 1964/2000 =====\n","No improvement in Val ROC AUC for 100 epoch(s). Best is 0.8661. Train Loss: 0.7042, Train Accuracy: 0.6682, Val Loss: 0.6319, Val Accuracy: 0.6889\n","===== Epoch 1965/2000 =====\n","No improvement in Val ROC AUC for 101 epoch(s). Best is 0.8661. Train Loss: 0.6759, Train Accuracy: 0.6722, Val Loss: 0.6705, Val Accuracy: 0.6711\n","===== Epoch 1966/2000 =====\n","No improvement in Val ROC AUC for 102 epoch(s). Best is 0.8661. Train Loss: 0.7193, Train Accuracy: 0.6486, Val Loss: 0.6677, Val Accuracy: 0.6756\n","===== Epoch 1967/2000 =====\n","No improvement in Val ROC AUC for 103 epoch(s). Best is 0.8661. Train Loss: 0.7010, Train Accuracy: 0.6690, Val Loss: 0.6959, Val Accuracy: 0.6489\n","===== Epoch 1968/2000 =====\n","No improvement in Val ROC AUC for 104 epoch(s). Best is 0.8661. Train Loss: 0.7116, Train Accuracy: 0.6518, Val Loss: 0.6123, Val Accuracy: 0.7244\n","===== Epoch 1969/2000 =====\n","No improvement in Val ROC AUC for 105 epoch(s). Best is 0.8661. Train Loss: 0.7139, Train Accuracy: 0.6502, Val Loss: 0.6871, Val Accuracy: 0.6667\n","===== Epoch 1970/2000 =====\n","No improvement in Val ROC AUC for 106 epoch(s). Best is 0.8661. Train Loss: 0.7118, Train Accuracy: 0.6635, Val Loss: 0.6483, Val Accuracy: 0.6578\n","===== Epoch 1971/2000 =====\n","No improvement in Val ROC AUC for 107 epoch(s). Best is 0.8661. Train Loss: 0.6890, Train Accuracy: 0.6533, Val Loss: 0.6418, Val Accuracy: 0.7156\n","===== Epoch 1972/2000 =====\n","No improvement in Val ROC AUC for 108 epoch(s). Best is 0.8661. Train Loss: 0.7000, Train Accuracy: 0.6525, Val Loss: 0.7315, Val Accuracy: 0.6311\n","===== Epoch 1973/2000 =====\n","No improvement in Val ROC AUC for 109 epoch(s). Best is 0.8661. Train Loss: 0.7002, Train Accuracy: 0.6612, Val Loss: 0.7611, Val Accuracy: 0.6000\n","===== Epoch 1974/2000 =====\n","No improvement in Val ROC AUC for 110 epoch(s). Best is 0.8661. Train Loss: 0.6957, Train Accuracy: 0.6533, Val Loss: 0.7047, Val Accuracy: 0.6444\n","===== Epoch 1975/2000 =====\n","No improvement in Val ROC AUC for 111 epoch(s). Best is 0.8661. Train Loss: 0.6909, Train Accuracy: 0.6651, Val Loss: 0.6687, Val Accuracy: 0.6844\n","===== Epoch 1976/2000 =====\n","No improvement in Val ROC AUC for 112 epoch(s). Best is 0.8661. Train Loss: 0.7043, Train Accuracy: 0.6455, Val Loss: 0.6284, Val Accuracy: 0.6978\n","===== Epoch 1977/2000 =====\n","No improvement in Val ROC AUC for 113 epoch(s). Best is 0.8661. Train Loss: 0.7205, Train Accuracy: 0.6369, Val Loss: 0.6365, Val Accuracy: 0.6711\n","===== Epoch 1978/2000 =====\n","No improvement in Val ROC AUC for 114 epoch(s). Best is 0.8661. Train Loss: 0.7109, Train Accuracy: 0.6627, Val Loss: 0.6807, Val Accuracy: 0.6533\n","===== Epoch 1979/2000 =====\n","No improvement in Val ROC AUC for 115 epoch(s). Best is 0.8661. Train Loss: 0.7129, Train Accuracy: 0.6424, Val Loss: 0.6238, Val Accuracy: 0.7156\n","===== Epoch 1980/2000 =====\n","No improvement in Val ROC AUC for 116 epoch(s). Best is 0.8661. Train Loss: 0.7097, Train Accuracy: 0.6455, Val Loss: 0.6586, Val Accuracy: 0.6844\n","===== Epoch 1981/2000 =====\n","No improvement in Val ROC AUC for 117 epoch(s). Best is 0.8661. Train Loss: 0.6945, Train Accuracy: 0.6471, Val Loss: 0.6825, Val Accuracy: 0.6667\n","===== Epoch 1982/2000 =====\n","No improvement in Val ROC AUC for 118 epoch(s). Best is 0.8661. Train Loss: 0.7042, Train Accuracy: 0.6431, Val Loss: 0.8068, Val Accuracy: 0.6133\n","===== Epoch 1983/2000 =====\n","No improvement in Val ROC AUC for 119 epoch(s). Best is 0.8661. Train Loss: 0.7693, Train Accuracy: 0.6227, Val Loss: 0.6607, Val Accuracy: 0.6667\n","===== Epoch 1984/2000 =====\n","No improvement in Val ROC AUC for 120 epoch(s). Best is 0.8661. Train Loss: 0.7086, Train Accuracy: 0.6690, Val Loss: 0.7193, Val Accuracy: 0.6356\n","===== Epoch 1985/2000 =====\n","No improvement in Val ROC AUC for 121 epoch(s). Best is 0.8661. Train Loss: 0.6864, Train Accuracy: 0.6651, Val Loss: 0.6656, Val Accuracy: 0.6489\n","===== Epoch 1986/2000 =====\n","No improvement in Val ROC AUC for 122 epoch(s). Best is 0.8661. Train Loss: 0.7187, Train Accuracy: 0.6471, Val Loss: 0.6730, Val Accuracy: 0.6311\n","===== Epoch 1987/2000 =====\n","No improvement in Val ROC AUC for 123 epoch(s). Best is 0.8661. Train Loss: 0.6980, Train Accuracy: 0.6541, Val Loss: 0.6364, Val Accuracy: 0.7022\n","===== Epoch 1988/2000 =====\n","No improvement in Val ROC AUC for 124 epoch(s). Best is 0.8661. Train Loss: 0.7081, Train Accuracy: 0.6690, Val Loss: 0.6610, Val Accuracy: 0.6889\n","===== Epoch 1989/2000 =====\n","No improvement in Val ROC AUC for 125 epoch(s). Best is 0.8661. Train Loss: 0.7001, Train Accuracy: 0.6596, Val Loss: 0.6844, Val Accuracy: 0.6578\n","===== Epoch 1990/2000 =====\n","No improvement in Val ROC AUC for 126 epoch(s). Best is 0.8661. Train Loss: 0.6803, Train Accuracy: 0.6761, Val Loss: 0.6161, Val Accuracy: 0.7244\n","===== Epoch 1991/2000 =====\n","No improvement in Val ROC AUC for 127 epoch(s). Best is 0.8661. Train Loss: 0.6983, Train Accuracy: 0.6510, Val Loss: 0.6490, Val Accuracy: 0.6933\n","===== Epoch 1992/2000 =====\n","No improvement in Val ROC AUC for 128 epoch(s). Best is 0.8661. Train Loss: 0.7086, Train Accuracy: 0.6659, Val Loss: 0.6251, Val Accuracy: 0.6978\n","===== Epoch 1993/2000 =====\n","No improvement in Val ROC AUC for 129 epoch(s). Best is 0.8661. Train Loss: 0.7188, Train Accuracy: 0.6416, Val Loss: 0.6767, Val Accuracy: 0.6622\n","===== Epoch 1994/2000 =====\n","No improvement in Val ROC AUC for 130 epoch(s). Best is 0.8661. Train Loss: 0.6899, Train Accuracy: 0.6471, Val Loss: 0.6818, Val Accuracy: 0.6933\n","===== Epoch 1995/2000 =====\n","No improvement in Val ROC AUC for 131 epoch(s). Best is 0.8661. Train Loss: 0.7218, Train Accuracy: 0.6659, Val Loss: 0.6744, Val Accuracy: 0.6489\n","===== Epoch 1996/2000 =====\n","No improvement in Val ROC AUC for 132 epoch(s). Best is 0.8661. Train Loss: 0.7105, Train Accuracy: 0.6439, Val Loss: 0.6889, Val Accuracy: 0.6844\n","===== Epoch 1997/2000 =====\n","No improvement in Val ROC AUC for 133 epoch(s). Best is 0.8661. Train Loss: 0.6956, Train Accuracy: 0.6486, Val Loss: 0.6619, Val Accuracy: 0.7067\n","===== Epoch 1998/2000 =====\n","No improvement in Val ROC AUC for 134 epoch(s). Best is 0.8661. Train Loss: 0.7152, Train Accuracy: 0.6431, Val Loss: 0.6319, Val Accuracy: 0.7244\n","===== Epoch 1999/2000 =====\n","No improvement in Val ROC AUC for 135 epoch(s). Best is 0.8661. Train Loss: 0.6914, Train Accuracy: 0.6643, Val Loss: 0.6577, Val Accuracy: 0.6889\n","===== Epoch 2000/2000 =====\n","No improvement in Val ROC AUC for 136 epoch(s). Best is 0.8661. Train Loss: 0.7051, Train Accuracy: 0.6682, Val Loss: 0.6653, Val Accuracy: 0.6844\n","\n","Training Complete!\n","\n","ROC curve plot saved as roc_curve.png\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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/vw5ihcvbrTzFboky9bWFoDygbSzsxM5GiIiIiIiEktMTAw8PT1VOYKxFLokK32KoJ2dHZMsIiIiIiIy+jIiFr4gIiIiIiIyIiZZRERERERERsQki4iIiIiIyIiYZBERERERERkRkywiIiIiIiIjYpJFRERERERkREyyiIiIiIiIjIhJFhERERERkRExySIiIiIiIjIiJllERERERERGxCSLiIiIiIjIiJhkERERERERGRGTLCIiIiIiIiNikkVERERERGRETLKIiIiIiIiMiEkWERERERGRETHJIiIiIiIiMiImWUREREREREbEJIuIiIiIiMiImGQREREREREZEZMsIiIiIiIiI2KSRUREREREZESiJllnzpxBu3bt4OHhAYlEgj179mTZ59SpU6hRowbMzc1RunRprF+/PsfjJCIiIiIi0peJmHceHx+PqlWron///ujUqVOWx4eEhKBNmzYYOnQotmzZguPHj2PgwIFwd3dHy5YtcyFiIiIiov+cfg5suws8i37fNqgq0Kms7n6HQoAlVzXbV7QAvO119/3uInDuhXpbEUtgc9us4+20B0hMVW9r4QOM9dXd785b4KuTmu2T6wKNPTWat2z5G7t330NcXArwKg54HQcAMJdKsK9mCeVBuzoA1qZa765Pn98RFhYP3HsHxCvjre9ohemlnYFyRYBFn2nt9+JFDAYM2AfIFcCNN6r2UV5OaOtiC/SoAPSuqLXv3r33sHz5VSAyCXgSpWrfUKUY3MxNgAWfAhWKau07bdoJBAe/Uj4P3iYCAIpZmGJtZQ/A0hTY3UFrPwD4/PMtkMsF4FY4kCIHAPzPxRYjvJyAhsWBKfW09rtxIxSTJh1T/n/eeadqn1nGGXUcrIDRvkArH619V6++hqCgO0BYPPAiVtX+Z80SMJFKgI1tAGcrrX2HDt2PkJAo4GEkEJMMAKhqZ4EfP3EFStgBq7R/Ho+ISET37r8pr/wVqmofUNwBXd3tgQ5lgSFVtfY9evQx5s+/qLy/h5Gq9hUV3VHSygyY1QjwddPa9/vvz+HkyafK3zMsHgDgaCrD9mrFlQcc9NfazxhETbJat26N1q1b6338ypUr4ePjgwULFgAAypcvj3PnzmHRokVMsoiIiCj3nH4OdPsDSFOot/8vPuu+4QnA1TDN9qS0rPs+jtLs626ddT8AuB4GxGVIsj4p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iIiI9HDjxg2UL18e5ubmqra+ffuid+/eLG5BVAjxVU+ie/jwHVavvqbW9uZNPM6ceQYnJ0uRoiIiIsqaIAhYunQpateujfHjx2vczgSLqHDiSBZ9nEMhQHiCepuzFdDKR+9TTJhwFKmpCo32du0+gZ2duZYeRERE4ouOjsbAgQOxa9cuAMCyZcvQpk0btGrVSuTIiEhsTLLo4yy5ClwNU2/zddU7yQoPj8flyy812k1MpJg7lwuEiYgob7px4wb8/f3x6NEjVdtXX33F4hZEBIDTBUlkzs7WePBgJCZPbgjzD/bXGjGiFsqVKypiZERERJoEQcCvv/6KunXrqhIsBwcH7NmzB/Pnz4epqanIERJRXsCRLBKdra055sxpikGDamDixGM4cSIEgYF+YodF2twPAi4EAimx4tx//Gtx7peICEBcXByGDRuGzZs3q9p8fX2xc+dO+PjoP02eiAo+JlmUZ/j4OCIoyB9v3sSz4EVedSEQiLgndhSAma3YERBRIfPy5Us0b94cd+/eVbWNHDkS8+fPV6soSEQEMMmiPMjFxVrsECgz6SNYEilg7S5ODGa2QINZ4tw3ERVaLi4uKFKkCADA1tYWq1evRteuXUWOiojyKiZZ9HFWtACS0tTbLPi0KvCs3YEhL8SOgogo15iammL79u344osv8PPPP6Ns2bJih0REeRg/DdPH8bbP8pC0NAWmTj2BXr2qoFIll1wIioiI6OPcv38fSUlJqFq1qqqtWLFiOHr0qIhREVF+weqClGMiIxOxaNFFlCmzFD/8cB6ff74Fr16JVDCBiIhIT9u3b4evry86deqEqKgoscMhonyISRbliNevY1Gs2EKMG3cET59GAQCeP49BmzZbERubLG5wREREWiQlJWH48OHo3r074uLi8OTJE3z77bdih0VE+RCTLMoR7u628PX10Gi/cSMU/v5BSE2VixAVERGRdk+ePEGDBg2wYsUKVVvv3r0xe/ZsEaMiovyKa7KM7OqjFOwNTkBSqqBqi04QdPQouEaMqIWzZ//VaD958in++us16tYtLkJURERE6n7//Xf069cP0dHRAAALCwssXboUAwYMgEQiETk6IsqPOJJlZHuDExAapUBUvKC6CP/lWBamheuNumPH8nB1VS/H7uPjgOPH+zDBIiIi0aWkpGDcuHHo1KmTKsEqU6YMLl26hIED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\n"},"metadata":{}}],"source":["\"\"\"\n","Args:\n"," image_size (int): Size of the input image (e.g., 224).\n"," patch_size (int): Size of each patch (e.g., 16).\n"," in_channels (int): Number of input channels (e.g., 1 for your task).\n"," num_classes (int): Number of output classes (e.g., 3 for your task).\n"," embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n"," depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n"," num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n"," mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n"," dropout (float): Dropout probability.\n","\"\"\"\n","from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n","batch_size = 32\n","learning_rate = 1e-4\n","weight_decay = 0.05\n","num_epochs = 2000\n","warmup_epochs = 10\n","model = SwinTransformerForClassification(\n"," img_size=(150, 150),\n"," patch_size=(10, 10),\n"," in_chans=1,\n"," num_classes=3,\n"," embed_dim=48,\n"," depths=[2, 2, 2],\n"," num_heads=[3, 6, 12],\n"," window_size=(5, 5),\n"," use_relativistic_encoder=False, # <-- Set to True\n"," relativistic_encoder_blocks=0 # <-- Hyperparameter for the new encoder\n"," )\n","\n","\n","criterion = nn.CrossEntropyLoss()\n","optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n","\n","\n","#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n","def warmup_lambda(current_epoch):\n"," if current_epoch < warmup_epochs:\n"," return float(current_epoch) / float(max(1, warmup_epochs))\n"," return 1.0\n","warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n","main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n","scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n","\n","\n","print(\"Optimizer: Adam\")\n","print(f\"Learning Rate: {learning_rate}\")\n","\n","# Train Model\n","model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)"]},{"cell_type":"markdown","source":["\"\"\" ROC Curve Plotting Function\"\"\"\n","def plot_roc_curve(all_preds, all_labels):\n"," print(\"Generating ROC Curve\")\n","\n"," # Convert predictions and labels to numpy arrays\n"," all_preds = np.array(all_preds)\n"," all_labels = np.array(all_labels)\n","\n"," fpr = dict()\n"," tpr = dict()\n"," roc_auc = dict()\n"," n_classes = 3\n","\n"," for i in range(n_classes):\n"," fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n"," roc_auc[i] = auc(fpr[i], tpr[i])\n","\n"," print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n","\n"," # Plot ROC curves\n"," plt.figure(figsize=(10, 8))\n"," colors = ['blue', 'red', 'green']\n"," class_names = ['Axion', 'CDM', 'No Substructure']\n","\n"," for i, color in zip(range(n_classes), colors):\n"," plt.plot(fpr[i], tpr[i], color=color,\n"," label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n","\n"," plt.plot([0, 1], [0, 1], 'k--')\n"," plt.xlim([0.0, 1.0])\n"," plt.ylim([0.0, 1.05])\n"," plt.xlabel('False Positive Rate')\n"," plt.ylabel('True Positive Rate')\n"," plt.title('Receiver Operating Characteristic (ROC) Curve')\n"," plt.legend(loc=\"lower right\")\n"," plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_swin.png')\n"," plt.close()\n","\n"," print(\"ROC Curve saved as roc_curve.png\")\n","\n","\n","plot_roc_curve(all_probs, all_labels)\n","\n","print(\"Training and Evaluation Complete!\")"],"metadata":{"id":"G_-lEQtu_txF"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"MZ59pFZa_txG"},"outputs":[],"source":[]}],"metadata":{"colab":{"provenance":[{"file_id":"1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf","timestamp":1756322133533},{"file_id":"1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28","timestamp":1756243482189}],"gpuType":"A100","machine_shape":"hm"},"kernelspec":{"display_name":"Python 3","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.11.2"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":0} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "X7Ekxmo1XV5I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 443, + "status": "ok", + "timestamp": 1756379455134, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "_mFRKD8F__hl", + "outputId": "3c0de2ad-ccfe-4495-aba8-a4b41cfa5e01" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vRM2kxST8KJZ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "\"\"\"Import dependencies\"\"\"\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import Dataset, DataLoader\n", + "from torchvision.models import resnet18\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9Dm6SC1o_txB" + }, + "outputs": [], + "source": [ + "\n", + "class MyDatasetViT(Dataset):\n", + " def __init__(self, data_dir, transform=None):\n", + " self.data = []\n", + " self.labels = []\n", + " self.class_names = ['axion', 'cdm', 'no_sub']\n", + " self.transform = transform\n", + "\n", + " print(f\"Loading dataset from: {data_dir}\")\n", + " print(f\"Looking for classes: {self.class_names}\")\n", + "\n", + " for idx, class_name in enumerate(self.class_names):\n", + " class_dir = os.path.join(data_dir, class_name)\n", + " print(f\"--- Processing class: {class_name} ---\")\n", + "\n", + " if not os.path.exists(class_dir):\n", + " print(f\"[ERROR] Directory not found: {class_dir}\")\n", + " continue\n", + "\n", + " files = os.listdir(class_dir)\n", + "\n", + " for file_name in files:\n", + " if file_name.endswith('.npy'):\n", + " file_path = os.path.join(class_dir, file_name)\n", + " loaded_data = np.load(file_path, allow_pickle=True)\n", + "\n", + " if class_name == 'axion':\n", + " image = loaded_data[0]\n", + " else:\n", + " image = loaded_data\n", + "\n", + " # [DEBUG] Print the shape of the raw numpy array\n", + " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", + "\n", + " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", + " if image.ndim != 2:\n", + " image = np.squeeze(image)\n", + "\n", + " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", + " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", + "\n", + " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", + " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", + "\n", + " self.data.append(image_tensor)\n", + " self.labels.append(idx)\n", + "\n", + " print(\"\\n--- Dataset Loading Complete ---\")\n", + " print(f\"Total images loaded: {len(self.data)}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " \"\"\"\n", + " This method is called by the DataLoader to get one item from the dataset.\n", + " The debug prints here are CRITICAL for finding the error.\n", + " \"\"\"\n", + " #print(f\"--- Getting item index: {idx} ---\")\n", + "\n", + " # Retrieve the pre-loaded tensor and its label\n", + " image = self.data[idx]\n", + " label = self.labels[idx]\n", + "\n", + " # [DEBUG] Print shape BEFORE the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", + "\n", + " # Apply transformations (e.g., resizing) if they are provided\n", + " if self.transform:\n", + " image = self.transform(image)\n", + " # [DEBUG] Print shape AFTER the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", + " else:\n", + " #print(\" [DEBUG] No transform was applied.\")\n", + " pass\n", + "\n", + " return image, label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 9, + "status": "ok", + "timestamp": 1756379455158, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "VJEgowwT_txC", + "outputId": "b782b3c2-133f-40c7-8fcf-e2e1b5ff8b24" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n" + ] + } + ], + "source": [ + "\n", + "# Import the transforms module\n", + "from torchvision import transforms\n", + "# Hyperparameters\n", + "batch_size = 32\n", + "learning_rate = 0.001\n", + "num_epochs = 100\n", + "\n", + "# Data Directories\n", + "train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n", + "#val_dir = '../dataset/dataset/val'\n", + "\n", + "print(f\"Training Directory: {train_dir}\")\n", + "#print(f\"Validation Directory: {val_dir}\")\n", + "\n", + "vit_transforms = transforms.Compose([\n", + " # transforms.ToTensor(), # Removed ToTensor()\n", + " transforms.RandomHorizontalFlip(p=0.5),\n", + " transforms.RandomVerticalFlip(p=0.5),\n", + " transforms.RandomRotation(degrees=90), # Can be any angle range\n", + "])\n", + "\n", + "# Create Datasets and Dataloaders\n", + "#train_dataset = MyDataset(train_dir)\n", + "#val_dataset = MyDataset(val_dir)\n", + "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", + "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", + "\n", + "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", + "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", + "\n", + "#print(f\"Batch Size: {batch_size}\")\n", + "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", + "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", + "\n", + "#Save the dataloader so that we don't have to bear with this pain again\n", + "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", + "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gvqsjdgzKmOL" + }, + "outputs": [], + "source": [ + "#import data loaders from file\n", + "train_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_train_loader.pth', weights_only=False)\n", + "val_loader = torch.load('/content/drive/MyDrive/model_alpha/vit_val_loader.pth', weights_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "y6Q9I1Hw_txD" + }, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.utils.checkpoint as checkpoint\n", + "from timm.layers import DropPath, trunc_normal_\n", + "from torch import Tensor\n", + "\n", + "# --- Helper Classes from Original Swin Transformer ---\n", + "\n", + "class Mlp(nn.Module):\n", + " \"\"\" Multi-Layer Perceptron \"\"\"\n", + " def __init__(\n", + " self,\n", + " in_features,\n", + " hidden_features=None,\n", + " out_features=None,\n", + " act_layer=nn.GELU,\n", + " drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " out_features = out_features or in_features\n", + " hidden_features = hidden_features or in_features\n", + " self.fc1 = nn.Linear(in_features, hidden_features)\n", + " self.act = act_layer()\n", + " self.fc2 = nn.Linear(hidden_features, out_features)\n", + " self.drop = nn.Dropout(drop)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.act(x)\n", + " x = self.drop(x)\n", + " x = self.fc2(x)\n", + " x = self.drop(x)\n", + " return x\n", + "\n", + "\n", + "def window_partition(x, window_size):\n", + " \"\"\"\n", + " Partitions the input tensor into non-overlapping windows.\n", + " Args:\n", + " x: (B, H, W, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + "\n", + " Returns:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " \"\"\"\n", + " B, H, W, C = x.shape\n", + " x = x.view(B, H // window_size[0], window_size[0], W // window_size[1], window_size[1], C)\n", + " windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size[0], window_size[1], C)\n", + " return windows\n", + "\n", + "\n", + "def window_reverse(windows, window_size, H, W):\n", + " \"\"\"\n", + " Reverses the window partitioning.\n", + " Args:\n", + " windows: (num_windows*B, window_size, window_size, C)\n", + " window_size (tuple[int]): Window size (height, width).\n", + " H (int): Height of image.\n", + " W (int): Width of image.\n", + "\n", + " Returns:\n", + " x: (B, H, W, C)\n", + " \"\"\"\n", + " B = int(windows.shape[0] / (H * W / window_size[0] / window_size[1]))\n", + " x = windows.view(\n", + " B, H // window_size[0], W // window_size[1], window_size[0], window_size[1], -1\n", + " )\n", + " x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n", + " return x\n", + "\n", + "\n", + "class WindowAttention(nn.Module):\n", + " r\"\"\" Window based multi-head self attention (W-MSA) module with relative position bias.\n", + " It supports both shifted and non-shifted windows.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " window_size,\n", + " num_heads,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " attn_drop=0.0,\n", + " proj_drop=0.0,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.window_size = window_size\n", + " self.num_heads = num_heads\n", + " head_dim = dim // num_heads\n", + " self.scale = qk_scale or head_dim**-0.5\n", + "\n", + " self.relative_position_bias_table = nn.Parameter(\n", + " torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)\n", + " )\n", + "\n", + " coords_h = torch.arange(self.window_size[0])\n", + " coords_w = torch.arange(self.window_size[1])\n", + " coords = torch.stack(torch.meshgrid([coords_h, coords_w], indexing=\"ij\"))\n", + " coords_flatten = torch.flatten(coords, 1)\n", + " relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :]\n", + " relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n", + " relative_coords[:, :, 0] += self.window_size[0] - 1\n", + " relative_coords[:, :, 1] += self.window_size[1] - 1\n", + " relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n", + " relative_position_index = relative_coords.sum(-1)\n", + " self.register_buffer(\"relative_position_index\", relative_position_index)\n", + "\n", + " self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n", + " self.attn_drop = nn.Dropout(attn_drop)\n", + " self.proj = nn.Linear(dim, dim)\n", + " self.proj_drop = nn.Dropout(proj_drop)\n", + "\n", + " trunc_normal_(self.relative_position_bias_table, std=0.02)\n", + " self.softmax = nn.Softmax(dim=-1)\n", + "\n", + " def forward(self, x, mask=None):\n", + " B_, N, C = x.shape\n", + " qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)\n", + " q, k, v = qkv[0], qkv[1], qkv[2]\n", + "\n", + " q = q * self.scale\n", + " attn = q @ k.transpose(-2, -1)\n", + "\n", + " relative_position_bias = self.relative_position_bias_table[\n", + " self.relative_position_index.view(-1)\n", + " ].view(\n", + " self.window_size[0] * self.window_size[1],\n", + " self.window_size[0] * self.window_size[1],\n", + " -1,\n", + " )\n", + " relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous()\n", + " attn = attn + relative_position_bias.unsqueeze(0)\n", + "\n", + " if mask is not None:\n", + " nW = mask.shape[0]\n", + " attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)\n", + " attn = attn.view(-1, self.num_heads, N, N)\n", + " attn = self.softmax(attn)\n", + " else:\n", + " attn = self.softmax(attn)\n", + "\n", + " attn = self.attn_drop(attn)\n", + "\n", + " x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n", + " x = self.proj(x)\n", + " x = self.proj_drop(x)\n", + " return x\n", + "\n", + "\n", + "class SwinTransformerBlock(nn.Module):\n", + " r\"\"\" Swin Transformer Block.\"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " num_heads,\n", + " window_size=(5, 5),\n", + " shift_size=(0, 0),\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " act_layer=nn.GELU,\n", + " norm_layer=nn.LayerNorm,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.num_heads = num_heads\n", + " self.window_size = window_size\n", + " self.shift_size = shift_size\n", + " self.mlp_ratio = mlp_ratio\n", + "\n", + " if min(self.input_resolution) <= min(self.window_size):\n", + " self.shift_size = (0, 0)\n", + " self.window_size = self.input_resolution\n", + "\n", + " assert 0 <= self.shift_size[0] < self.window_size[0], \"shift_size must be less than window_size\"\n", + " assert 0 <= self.shift_size[1] < self.window_size[1], \"shift_size must be less than window_size\"\n", + "\n", + " self.norm1 = norm_layer(dim)\n", + " self.attn = WindowAttention(\n", + " dim,\n", + " window_size=self.window_size,\n", + " num_heads=num_heads,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " attn_drop=attn_drop,\n", + " proj_drop=drop,\n", + " )\n", + "\n", + " self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n", + " self.norm2 = norm_layer(dim)\n", + " mlp_hidden_dim = int(dim * mlp_ratio)\n", + " self.mlp = Mlp(\n", + " in_features=dim,\n", + " hidden_features=mlp_hidden_dim,\n", + " act_layer=act_layer,\n", + " drop=drop,\n", + " )\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " H, W = self.input_resolution\n", + " img_mask = torch.zeros((1, H, W, 1))\n", + " h_slices = (\n", + " slice(0, -self.window_size[0]),\n", + " slice(-self.window_size[0], -self.shift_size[0]),\n", + " slice(-self.shift_size[0], None),\n", + " )\n", + " w_slices = (\n", + " slice(0, -self.window_size[1]),\n", + " slice(-self.window_size[1], -self.shift_size[1]),\n", + " slice(-self.shift_size[1], None),\n", + " )\n", + " cnt = 0\n", + " for h in h_slices:\n", + " for w in w_slices:\n", + " img_mask[:, h, w, :] = cnt\n", + " cnt += 1\n", + "\n", + " mask_windows = window_partition(img_mask, self.window_size)\n", + " mask_windows = mask_windows.view(-1, self.window_size[0] * self.window_size[1])\n", + " attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n", + " attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(\n", + " attn_mask == 0, float(0.0)\n", + " )\n", + " else:\n", + " attn_mask = None\n", + "\n", + " self.register_buffer(\"attn_mask\", attn_mask)\n", + "\n", + " def forward(self, x):\n", + " H, W = self.input_resolution\n", + " B, L, C = x.shape\n", + " assert L == H * W, \"input feature has wrong size\"\n", + "\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x = x.view(B, H, W, C)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " shifted_x = torch.roll(x, shifts=(-self.shift_size[0], -self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " shifted_x = x\n", + "\n", + " x_windows = window_partition(shifted_x, self.window_size)\n", + " x_windows = x_windows.view(-1, self.window_size[0] * self.window_size[1], C)\n", + "\n", + " attn_windows = self.attn(x_windows, mask=self.attn_mask)\n", + "\n", + " attn_windows = attn_windows.view(-1, self.window_size[0], self.window_size[1], C)\n", + " shifted_x = window_reverse(attn_windows, self.window_size, H, W)\n", + "\n", + " if self.shift_size[0] > 0 or self.shift_size[1] > 0:\n", + " x = torch.roll(shifted_x, shifts=(self.shift_size[0], self.shift_size[1]), dims=(1, 2))\n", + " else:\n", + " x = shifted_x\n", + " x = x.view(B, H * W, C)\n", + "\n", + " x = shortcut + self.drop_path(x)\n", + " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", + "\n", + " return x\n", + "\n", + "\n", + "class BasicLayer(nn.Module):\n", + " \"\"\" A basic Swin Transformer layer for one stage. \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " dim,\n", + " input_resolution,\n", + " depth,\n", + " num_heads,\n", + " window_size,\n", + " mlp_ratio=4.0,\n", + " qkv_bias=True,\n", + " qk_scale=None,\n", + " drop=0.0,\n", + " attn_drop=0.0,\n", + " drop_path=0.0,\n", + " norm_layer=nn.LayerNorm,\n", + " downsample=None,\n", + " ):\n", + " super().__init__()\n", + " self.dim = dim\n", + " self.input_resolution = input_resolution\n", + " self.depth = depth\n", + "\n", + " self.blocks = nn.ModuleList(\n", + " [\n", + " SwinTransformerBlock(\n", + " dim=dim,\n", + " input_resolution=input_resolution,\n", + " num_heads=num_heads,\n", + " window_size=window_size,\n", + " shift_size=(0, 0) if (i % 2 == 0) else (window_size[0] // 2, window_size[1] // 2),\n", + " mlp_ratio=mlp_ratio,\n", + " qkv_bias=qkv_bias,\n", + " qk_scale=qk_scale,\n", + " drop=drop,\n", + " attn_drop=attn_drop,\n", + " drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path,\n", + " norm_layer=norm_layer,\n", + " )\n", + " for i in range(depth)\n", + " ]\n", + " )\n", + "\n", + " if downsample is not None:\n", + " self.downsample = downsample(input_resolution, dim=dim, norm_layer=norm_layer)\n", + " else:\n", + " self.downsample = None\n", + "\n", + " def forward(self, x):\n", + " for blk in self.blocks:\n", + " x = blk(x)\n", + " if self.downsample is not None:\n", + " x = self.downsample(x)\n", + " return x\n", + "\n", + "\n", + "class PatchEmbed(nn.Module):\n", + " r\"\"\" Image to Patch Embedding \"\"\"\n", + "\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, embed_dim=96, norm_layer=None):\n", + " super().__init__()\n", + " self.img_size = img_size\n", + " self.patch_size = patch_size\n", + " self.patches_resolution = [img_size[0] // patch_size[0], img_size[1] // patch_size[1]]\n", + " self.num_patches = self.patches_resolution[0] * self.patches_resolution[1]\n", + " self.in_chans = in_chans\n", + " self.embed_dim = embed_dim\n", + "\n", + " self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)\n", + " if norm_layer is not None:\n", + " self.norm = norm_layer(embed_dim)\n", + " else:\n", + " self.norm = None\n", + "\n", + " def forward(self, x):\n", + " B, C, H, W = x.shape\n", + " assert H == self.img_size[0] and W == self.img_size[1], \\\n", + " f\"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]}).\"\n", + " x = self.proj(x).flatten(2).transpose(1, 2)\n", + " if self.norm is not None:\n", + " x = self.norm(x)\n", + " return x\n", + "\n", + "# --- New and Modified Classes ---\n", + "\n", + "class TransformerLSABlock(nn.Module):\n", + " \"\"\"\n", + " A standard Transformer block with Multi-Head Self-Attention and a Feed-Forward Network.\n", + " This is a placeholder for the block used in the RelativisticPhysicalInformedEncoder.\n", + " \"\"\"\n", + " def __init__(self, embed_dim, num_heads, num_patches, num_hidden_neurons, activation_function, device, dropout):\n", + " super().__init__()\n", + " self.norm1 = nn.LayerNorm(embed_dim)\n", + " self.attn = nn.MultiheadAttention(embed_dim, num_heads, dropout=dropout, batch_first=True)\n", + " self.norm2 = nn.LayerNorm(embed_dim)\n", + " self.mlp = nn.Sequential(\n", + " nn.Linear(embed_dim, num_hidden_neurons),\n", + " activation_function,\n", + " nn.Dropout(dropout),\n", + " nn.Linear(num_hidden_neurons, embed_dim),\n", + " nn.Dropout(dropout)\n", + " )\n", + " self.dropout = nn.Dropout(dropout)\n", + "\n", + " def forward(self, x):\n", + " # Attention part\n", + " shortcut = x\n", + " x = self.norm1(x)\n", + " x, _ = self.attn(x, x, x)\n", + " x = self.dropout(x)\n", + " x = x + shortcut\n", + "\n", + " # MLP part\n", + " shortcut = x\n", + " x = self.norm2(x)\n", + " x = self.mlp(x)\n", + " x = x + shortcut\n", + " return x\n", + "\n", + "\n", + "class RelativisticPhysicalInformedEncoder(nn.Module):\n", + " \"\"\"\n", + " A PyTorch module to perform inverse gravitational lensing using the Singular Isothermal Sphere (SIS) model.\n", + " \"\"\"\n", + " def __init__( self,\n", + " image_size: int,\n", + " patch_size: int,\n", + " embed_dim: int,\n", + " num_patches: int,\n", + " num_heads: int,\n", + " num_hidden_neurons: int,\n", + " transformer_activation_function: nn.Module,\n", + " num_transformer_blocks: int,\n", + " dropout: float = 0.1,\n", + " pixel_scale:float =0.101,\n", + " k_min: float = 0.8,\n", + " k_max: float = 1.2,\n", + " eps: float = 1e-8\n", + " ):\n", + " super(RelativisticPhysicalInformedEncoder, self).__init__()\n", + " self.pixel_scale = pixel_scale\n", + " self.profile_size = image_size\n", + " self.half_profile_size = self.profile_size // 2\n", + " self.num_patches = num_patches\n", + " self.embed_dim = embed_dim\n", + " self.num_heads = num_heads\n", + " self.num_hidden_neurons = num_hidden_neurons\n", + " self.transformer_activation_function = transformer_activation_function\n", + " self.num_transformer_blocks = num_transformer_blocks\n", + " self.k_min = k_min\n", + " self.k_max = k_max\n", + " self.eps = eps\n", + "\n", + " self.transformer = nn.ModuleList()\n", + " self.num_neurons_flatten = (self.num_patches) * embed_dim # Removed +1 for CLS token as it's not used\n", + "\n", + " for _ in range(num_transformer_blocks):\n", + " self.transformer.append(\n", + " TransformerLSABlock(embed_dim,\n", + " num_heads,\n", + " self.num_patches,\n", + " num_hidden_neurons,\n", + " transformer_activation_function,\n", + " None, # Device is handled in forward pass\n", + " dropout)\n", + " )\n", + "\n", + " self.compressor = nn.Sequential(\n", + " nn.Flatten(),\n", + " nn.Linear(self.num_neurons_flatten, self.profile_size * self.profile_size),\n", + " nn.Sigmoid()\n", + " )\n", + "\n", + " # Create coordinate grids, but don't move to device yet\n", + " x_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n", + " y_coordinates = torch.linspace(-self.half_profile_size, self.half_profile_size - 1, self.profile_size) * self.pixel_scale\n", + " grid_x, grid_y = torch.meshgrid(x_coordinates, y_coordinates, indexing='ij')\n", + " self.register_buffer('grid_x', grid_x)\n", + " self.register_buffer('grid_y', grid_y)\n", + "\n", + "\n", + " def forward(self, input_images: Tensor, patches: Tensor)->Tensor:\n", + " \"\"\"\n", + " Forward pass through the module.\n", + " \"\"\"\n", + " # Ensure input_images is 2D (B, H*W) if it's not already\n", + " if input_images.dim() == 3:\n", + " input_images = input_images.squeeze(1)\n", + "\n", + " batch_size = input_images.shape[0]\n", + " device = input_images.device\n", + "\n", + " # Move grid tensors to the correct device\n", + " flat_grid_x = self.grid_x.flatten().to(device)\n", + " flat_grid_y = self.grid_y.flatten().to(device)\n", + "\n", + " # Pass patches through transformer blocks\n", + " k_transformed = patches\n", + " for layer in self.transformer:\n", + " k_transformed = layer(k_transformed)\n", + "\n", + " # Generate k using the compressor\n", + " k_sigmoid = self.compressor(k_transformed)\n", + "\n", + " k_sigmoid = k_sigmoid.view(-1, self.profile_size, self.profile_size)\n", + " k_sigmoid_flat = k_sigmoid.view(-1, self.profile_size * self.profile_size)\n", + " k_sigmoid_flat = self.k_min + (self.k_max - self.k_min) * k_sigmoid_flat\n", + "\n", + " flat_input_images = input_images.view(batch_size, -1)\n", + " non_zero_mask = (flat_grid_x != 0) | (flat_grid_y != 0)\n", + " k_sigmoid_non_zero = k_sigmoid_flat[:, non_zero_mask]\n", + "\n", + " shape_k_sigmoid_non_zero = k_sigmoid_non_zero.shape\n", + " k = k_sigmoid_non_zero.view(shape_k_sigmoid_non_zero[0], 1, 1, shape_k_sigmoid_non_zero[1])\n", + "\n", + " non_zero_x = flat_grid_x[non_zero_mask]\n", + " non_zero_y = flat_grid_y[non_zero_mask]\n", + " non_zero_radius = torch.sqrt(non_zero_x ** 2 + non_zero_y ** 2)\n", + " non_zero_radius = non_zero_radius[None, None, None, :]\n", + "\n", + " shifted_x = (non_zero_x[None, None, None, :] - k * non_zero_x[None, None, None, :] / (non_zero_radius + self.eps))\n", + " shifted_y = (non_zero_y[None, None, None, :] - k * non_zero_y[None, None, None, :] / (non_zero_radius + self.eps))\n", + "\n", + " shifted_x_idx = torch.round(shifted_x / self.pixel_scale + self.half_profile_size).long()\n", + " shifted_y_idx = torch.round(shifted_y / self.pixel_scale + self.half_profile_size).long()\n", + "\n", + " # Clamp indices to be within the valid range [0, profile_size-1]\n", + " shifted_x_idx.clamp_(0, self.profile_size - 1)\n", + " shifted_y_idx.clamp_(0, self.profile_size - 1)\n", + "\n", + " output_images = torch.zeros(batch_size, self.profile_size, self.profile_size, device=device)\n", + " flat_output_images = output_images.view(batch_size, -1)\n", + "\n", + " one_d_indices = shifted_x_idx * self.profile_size + shifted_y_idx\n", + " one_d_indices = one_d_indices.view(batch_size, -1)\n", + "\n", + " input_values_at_original_positions = flat_input_images[:, non_zero_mask]\n", + "\n", + " # Use scatter_add_ for safe parallel updates\n", + " # To handle multiple source pixels mapping to the same target pixel, we average them.\n", + " # We need a count tensor for averaging.\n", + " counts = torch.zeros_like(flat_output_images)\n", + " ones = torch.ones_like(input_values_at_original_positions)\n", + "\n", + " flat_output_images.scatter_add_(1, one_d_indices, input_values_at_original_positions)\n", + " counts.scatter_add_(1, one_d_indices, ones)\n", + "\n", + " # Avoid division by zero\n", + " flat_output_images = torch.where(counts > 0, flat_output_images / counts, 0)\n", + "\n", + " output_images = flat_output_images.view(batch_size, self.profile_size, self.profile_size)\n", + "\n", + " max_values = torch.amax(output_images, dim=(1, 2), keepdim=True)\n", + " output_images = output_images / (max_values + self.eps)\n", + "\n", + " return output_images\n", + "\n", + "\n", + "class SwinTransformerForClassification(nn.Module):\n", + " \"\"\"\n", + " Swin Transformer with an optional Relativistic Physics Informed Encoder.\n", + " \"\"\"\n", + " def __init__(self, img_size=(150, 150), patch_size=(10, 10), in_chans=1, num_classes=3,\n", + " embed_dim=96, depths=[2, 2, 6], num_heads=[3, 6, 12],\n", + " window_size=(5, 5), mlp_ratio=4., qkv_bias=True, qk_scale=None,\n", + " drop_rate=0., attn_drop_rate=0., drop_path_rate=0.1,\n", + " norm_layer=nn.LayerNorm, ape=False, patch_norm=True,\n", + " use_relativistic_encoder=False, relativistic_encoder_blocks=2, **kwargs):\n", + " super().__init__()\n", + "\n", + " self.num_classes = num_classes\n", + " self.num_layers = len(depths)\n", + " self.embed_dim = embed_dim\n", + " self.ape = ape\n", + " self.patch_norm = patch_norm\n", + " self.num_features = int(embed_dim)\n", + " self.mlp_ratio = mlp_ratio\n", + " self.use_relativistic_encoder = use_relativistic_encoder\n", + "\n", + " self.patch_embed = PatchEmbed(\n", + " img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim,\n", + " norm_layer=norm_layer if self.patch_norm else None)\n", + " num_patches = self.patch_embed.num_patches\n", + " patches_resolution = self.patch_embed.patches_resolution\n", + " self.patches_resolution = patches_resolution\n", + "\n", + " if self.use_relativistic_encoder:\n", + " self.relativistic_encoder = RelativisticPhysicalInformedEncoder(\n", + " image_size=img_size[0],\n", + " patch_size=patch_size[0],\n", + " embed_dim=embed_dim,\n", + " num_patches=num_patches,\n", + " num_heads=num_heads[0], # Use heads from the first Swin stage\n", + " num_hidden_neurons=int(embed_dim * mlp_ratio),\n", + " transformer_activation_function=nn.GELU(),\n", + " num_transformer_blocks=relativistic_encoder_blocks,\n", + " dropout=drop_rate\n", + " )\n", + "\n", + " if self.ape:\n", + " self.absolute_pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))\n", + " trunc_normal_(self.absolute_pos_embed, std=.02)\n", + "\n", + " self.pos_drop = nn.Dropout(p=drop_rate)\n", + " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))]\n", + "\n", + " self.layers = nn.ModuleList()\n", + " layer = BasicLayer(dim=int(embed_dim),\n", + " input_resolution=patches_resolution,\n", + " depth=sum(depths),\n", + " num_heads=num_heads[0],\n", + " window_size=window_size,\n", + " mlp_ratio=self.mlp_ratio,\n", + " qkv_bias=qkv_bias, qk_scale=qk_scale,\n", + " drop=drop_rate, attn_drop=attn_drop_rate,\n", + " drop_path=dpr,\n", + " norm_layer=norm_layer,\n", + " downsample=None)\n", + " self.layers.append(layer)\n", + "\n", + " self.norm = norm_layer(self.num_features)\n", + " self.avgpool = nn.AdaptiveAvgPool1d(1)\n", + " self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity()\n", + "\n", + " self.apply(self._init_weights)\n", + "\n", + " def _init_weights(self, m):\n", + " if isinstance(m, nn.Linear):\n", + " trunc_normal_(m.weight, std=.02)\n", + " if isinstance(m, nn.Linear) and m.bias is not None:\n", + " nn.init.constant_(m.bias, 0)\n", + " elif isinstance(m, nn.LayerNorm):\n", + " nn.init.constant_(m.bias, 0)\n", + " nn.init.constant_(m.weight, 1.0)\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay(self):\n", + " return {'absolute_pos_embed'}\n", + "\n", + " @torch.jit.ignore\n", + " def no_weight_decay_keywords(self):\n", + " return {'relative_position_bias_table'}\n", + "\n", + " def forward_features(self, x):\n", + " x = self.patch_embed(x)\n", + " if self.ape:\n", + " x = x + self.absolute_pos_embed\n", + " x = self.pos_drop(x)\n", + "\n", + " for layer in self.layers:\n", + " x = layer(x)\n", + "\n", + " x = self.norm(x)\n", + " x = self.avgpool(x.transpose(1, 2))\n", + " x = torch.flatten(x, 1)\n", + " return x\n", + "\n", + " def forward(self, x):\n", + " if self.use_relativistic_encoder:\n", + " # The input 'x' is expected to be (B, C, H, W)\n", + " # The relativistic encoder needs the initial patches for its internal transformer\n", + " initial_patches = self.patch_embed(x)\n", + " # The encoder also needs the 2D image (B, H, W)\n", + " x_encoded = self.relativistic_encoder(x.squeeze(1), initial_patches)\n", + " # Reshape the output to (B, 1, H, W) to proceed with feature extraction\n", + " x = x_encoded.unsqueeze(1)\n", + "\n", + " # The rest of the forward pass proceeds from here\n", + " x = self.forward_features(x)\n", + " x = self.head(x)\n", + " return x\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hivvAHcI41JJ" + }, + "outputs": [], + "source": [ + "\n", + "\n", + "#!pip install torch_xla[tpu]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GtiRNfT34-6a" + }, + "outputs": [], + "source": [ + "#import torch_xla" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Q3rnNlt1_txE" + }, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from sklearn.metrics import roc_auc_score, roc_curve, auc\n", + "from sklearn.preprocessing import label_binarize\n", + "import copy\n", + "import matplotlib.pyplot as plt\n", + "from itertools import cycle\n", + "\n", + "def plot_roc_curve(all_labels, all_probs, class_names):\n", + " \"\"\"\n", + " Plots the ROC curve for each class and the micro/macro averages.\n", + " \"\"\"\n", + " # Binarize the labels for multi-class ROC analysis\n", + " all_labels_bin = label_binarize(all_labels, classes=range(len(class_names)))\n", + " all_probs = np.array(all_probs)\n", + "\n", + " # Compute ROC curve and ROC area for each class\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " for i in range(len(class_names)):\n", + " fpr[i], tpr[i], _ = roc_curve(all_labels_bin[:, i], all_probs[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " # Compute micro-average ROC curve and ROC area\n", + " fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(all_labels_bin.ravel(), all_probs.ravel())\n", + " roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", + "\n", + " # Compute macro-average ROC curve and ROC area\n", + " # First aggregate all false positive rates\n", + " all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(class_names))]))\n", + " # Then interpolate all ROC curves at these points\n", + " mean_tpr = np.zeros_like(all_fpr)\n", + " for i in range(len(class_names)):\n", + " mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", + " # Finally average it and compute AUC\n", + " mean_tpr /= len(class_names)\n", + " fpr[\"macro\"] = all_fpr\n", + " tpr[\"macro\"] = mean_tpr\n", + " roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", + "\n", + " # Plot all ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + "\n", + " plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n", + " label=f'micro-average ROC curve (area = {roc_auc[\"micro\"]:.2f})',\n", + " color='deeppink', linestyle=':', linewidth=4)\n", + "\n", + " plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n", + " label=f'macro-average ROC curve (area = {roc_auc[\"macro\"]:.2f})',\n", + " color='navy', linestyle=':', linewidth=4)\n", + "\n", + " colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])\n", + " for i, color in zip(range(len(class_names)), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color, lw=2,\n", + " label=f'ROC curve of class {class_names[i]} (area = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--', lw=2)\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Multi-class Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig(\"/content/drive/MyDrive/Model_III_dataset/roc_curve_swin.png\")\n", + " print(\"\\nROC curve plot saved as roc_curve.png\")\n", + "\n", + "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", + "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=2000):\n", + " \"\"\"\n", + " Trains the model with early stopping based on validation ROC AUC score.\n", + "\n", + " Args:\n", + " model (torch.nn.Module): The neural network model to train.\n", + " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", + " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", + " criterion: The loss function.\n", + " optimizer: The optimization algorithm.\n", + " scheduler: The learning rate scheduler.\n", + " num_epochs (int): The maximum number of epochs to train for.\n", + " patience (int): Number of epochs to wait for improvement before stopping.\n", + " \"\"\"\n", + " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + " print(f\"Training on device: {device}\")\n", + "\n", + " model.to(device)\n", + "\n", + " best_roc_auc = 0.0\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = []\n", + " best_labels = []\n", + "\n", + " class_names = ['axion', 'cdm', 'no_sub']\n", + "\n", + " for epoch in range(num_epochs):\n", + " print(f\"===== Epoch {epoch+1}/{num_epochs} =====\")\n", + "\n", + " # --- Training Phase ---\n", + " model.train()\n", + " train_loss = 0.0\n", + " train_correct = 0\n", + "\n", + " for images, labels in train_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " scheduler.step()\n", + "\n", + " train_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " train_correct += (predicted == labels).sum().item()\n", + "\n", + " # --- Validation Phase ---\n", + " model.eval()\n", + " val_loss = 0.0\n", + " val_correct = 0\n", + " all_probs = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for images, labels in val_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " val_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " val_correct += (predicted == labels).sum().item()\n", + "\n", + " probs = torch.softmax(outputs, dim=1)\n", + " all_probs.extend(probs.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " # --- Calculate Metrics ---\n", + " train_loss = train_loss / len(train_loader.dataset)\n", + " val_loss = val_loss / len(val_loader.dataset)\n", + " train_accuracy = train_correct / len(train_loader.dataset)\n", + " val_accuracy = val_correct / len(val_loader.dataset)\n", + "\n", + " # Calculate multi-class ROC AUC score\n", + " all_labels_np = np.array(all_labels)\n", + " all_probs_np = np.array(all_probs)\n", + " try:\n", + " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", + " except ValueError as e:\n", + " print(f\"Could not calculate ROC AUC: {e}\")\n", + " val_roc_auc = 0.0\n", + "\n", + " # Epoch-level summary\n", + " #print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", + " #print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", + " #print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", + "\n", + " if val_roc_auc > best_roc_auc:\n", + " best_roc_auc = val_roc_auc\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " best_probs = all_probs\n", + " best_labels = all_labels\n", + " #torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", + " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + " else:\n", + " epochs_no_improve += 1\n", + " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}. Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}\")\n", + "\n", + " if epochs_no_improve >= patience:\n", + " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", + " model.load_state_dict(best_model_wts)\n", + " break\n", + "\n", + " print(\"\\nTraining Complete!\")\n", + " model.load_state_dict(best_model_wts)\n", + "\n", + " # After the training loop, plot the ROC curve for the best model\n", + " if best_probs and best_labels:\n", + " plot_roc_curve(best_labels, best_probs, class_names)\n", + "\n", + " return model, best_probs, best_labels" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9QBIRCLEkikD" + }, + "outputs": [], + "source": [ + "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "executionInfo": { + "elapsed": 0, + "status": "ok", + "timestamp": 1756364272381, + "user": { + "displayName": "Dhruv Srivastava", + "userId": "05383083715668215672" + }, + "user_tz": 300 + }, + "id": "-ZJepKUw_txF", + "outputId": "44cf084f-d4e6-4899-c1bf-d322c7c89863" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimizer: Adam\n", + "Learning Rate: 0.0001\n", + "Training on device: cuda\n", + "===== Epoch 1/2000 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/torch/optim/lr_scheduler.py:209: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n", + " warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New best model saved with Val ROC AUC: 0.5687, Train Loss: 1.0999, Train Accuracy: 0.3443, Val Loss: 1.0993, Val Accuracy: 0.2978\n", + "===== Epoch 2/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5687. Train Loss: 1.0991, Train Accuracy: 0.3404, Val Loss: 1.0990, Val Accuracy: 0.3556\n", + "===== Epoch 3/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5687. Train Loss: 1.0998, Train Accuracy: 0.3341, Val Loss: 1.1006, Val Accuracy: 0.3244\n", + "===== Epoch 4/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3286, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 5/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3200, Val Loss: 1.1007, Val Accuracy: 0.2978\n", + "===== Epoch 6/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3435, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 7/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3459, Val Loss: 1.1009, Val Accuracy: 0.2800\n", + "===== Epoch 8/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3184, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 9/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5687. Train Loss: 1.0992, Train Accuracy: 0.3451, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 10/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5687. Train Loss: 1.0997, Train Accuracy: 0.3427, Val Loss: 1.1031, Val Accuracy: 0.2844\n", + "===== Epoch 11/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5687. Train Loss: 1.1001, Train Accuracy: 0.3106, Val Loss: 1.1020, Val Accuracy: 0.2844\n", + "===== Epoch 12/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1028, Val Accuracy: 0.2844\n", + "===== Epoch 13/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5687. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 14/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5687. Train Loss: 1.1000, Train Accuracy: 0.3420, Val Loss: 1.0998, Val Accuracy: 0.2844\n", + "===== Epoch 15/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5687. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.0991, Val Accuracy: 0.3200\n", + "===== Epoch 16/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5687. Train Loss: 1.0984, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 17/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1021, Val Accuracy: 0.2844\n", + "===== Epoch 18/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3443, Val Loss: 1.1002, Val Accuracy: 0.2933\n", + "===== Epoch 19/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5687. Train Loss: 1.0994, Train Accuracy: 0.3310, Val Loss: 1.1035, Val Accuracy: 0.2844\n", + "===== Epoch 20/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3388, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 21/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5687. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 22/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3341, Val Loss: 1.0986, Val Accuracy: 0.3200\n", + "===== Epoch 23/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5687. Train Loss: 1.0988, Train Accuracy: 0.3333, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 24/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5687. Train Loss: 1.0993, Train Accuracy: 0.3443, Val Loss: 1.1022, Val Accuracy: 0.2844\n", + "===== Epoch 25/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5687. Train Loss: 1.0985, Train Accuracy: 0.3388, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 26/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5687. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1001, Val Accuracy: 0.2844\n", + "===== Epoch 27/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 28/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5687. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 29/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5687. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1020, Val Accuracy: 0.2844\n", + "===== Epoch 30/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5687. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 31/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5687. Train Loss: 1.0987, Train Accuracy: 0.3396, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 32/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5766, Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 33/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 34/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 35/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3412, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 36/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 37/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 38/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 39/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 40/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 41/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 42/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 43/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 44/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 45/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 46/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 47/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 48/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 49/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 50/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 51/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 52/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 53/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 54/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 55/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 56/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 57/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 58/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 59/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 60/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 61/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 62/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3388, Val Loss: 1.1023, Val Accuracy: 0.2889\n", + "===== Epoch 63/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 64/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3310, Val Loss: 1.1023, Val Accuracy: 0.2889\n", + "===== Epoch 65/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 66/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1026, Val Accuracy: 0.2844\n", + "===== Epoch 67/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3239, Val Loss: 1.1003, Val Accuracy: 0.2933\n", + "===== Epoch 68/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 69/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 70/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 71/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.0992, Val Accuracy: 0.2978\n", + "===== Epoch 72/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3365, Val Loss: 1.1009, Val Accuracy: 0.2711\n", + "===== Epoch 73/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3357, Val Loss: 1.1027, Val Accuracy: 0.2756\n", + "===== Epoch 74/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3396, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 75/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1020, Val Accuracy: 0.2844\n", + "===== Epoch 76/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 77/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3388, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 78/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3467, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 79/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3404, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 80/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3427, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 81/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1021, Val Accuracy: 0.2844\n", + "===== Epoch 82/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3388, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 83/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3302, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 84/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5766. Train Loss: 1.0997, Train Accuracy: 0.3224, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 85/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 86/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 87/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3239, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 88/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 89/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3161, Val Loss: 1.1014, Val Accuracy: 0.2756\n", + "===== Epoch 90/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3325, Val Loss: 1.1025, Val Accuracy: 0.2844\n", + "===== Epoch 91/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1036, Val Accuracy: 0.2844\n", + "===== Epoch 92/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3294, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 93/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3420, Val Loss: 1.1025, Val Accuracy: 0.2844\n", + "===== Epoch 94/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5766. Train Loss: 1.0996, Train Accuracy: 0.3114, Val Loss: 1.1000, Val Accuracy: 0.3422\n", + "===== Epoch 95/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 96/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 97/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3318, Val Loss: 1.1021, Val Accuracy: 0.3600\n", + "===== Epoch 98/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5766. Train Loss: 1.1000, Train Accuracy: 0.3082, Val Loss: 1.0998, Val Accuracy: 0.3333\n", + "===== Epoch 99/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 100/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 101/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 102/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3388, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 103/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5766. Train Loss: 1.0993, Train Accuracy: 0.3090, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 104/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 105/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n", + "===== Epoch 106/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3459, Val Loss: 1.1024, Val Accuracy: 0.2844\n", + "===== Epoch 107/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 108/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3271, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 109/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3216, Val Loss: 1.0997, Val Accuracy: 0.2844\n", + "===== Epoch 110/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3420, Val Loss: 1.1021, Val Accuracy: 0.2844\n", + "===== Epoch 111/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3098, Val Loss: 1.1001, Val Accuracy: 0.3156\n", + "===== Epoch 112/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3396, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 113/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 114/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5766. Train Loss: 1.1001, Train Accuracy: 0.3090, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 115/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1025, Val Accuracy: 0.2844\n", + "===== Epoch 116/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3271, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 117/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 118/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1022, Val Accuracy: 0.2844\n", + "===== Epoch 119/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 120/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 121/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 122/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 123/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 124/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 125/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n", + "===== Epoch 126/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 127/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 128/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 129/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 130/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 131/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 132/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 133/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 134/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 135/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 136/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 137/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 138/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 139/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 140/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 141/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 142/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 143/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 144/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 145/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 146/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 147/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 148/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 149/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 150/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 151/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 152/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 153/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 154/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 155/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 156/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 157/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 158/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 159/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 160/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 161/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 162/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 163/2000 =====\n", + "No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 164/2000 =====\n", + "No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 165/2000 =====\n", + "No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 166/2000 =====\n", + "No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 167/2000 =====\n", + "No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 168/2000 =====\n", + "No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 169/2000 =====\n", + "No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3169, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 170/2000 =====\n", + "No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 171/2000 =====\n", + "No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 172/2000 =====\n", + "No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 173/2000 =====\n", + "No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 174/2000 =====\n", + "No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1019, Val Accuracy: 0.2844\n", + "===== Epoch 175/2000 =====\n", + "No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 176/2000 =====\n", + "No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 177/2000 =====\n", + "No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1020, Val Accuracy: 0.2844\n", + "===== Epoch 178/2000 =====\n", + "No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1029, Val Accuracy: 0.2844\n", + "===== Epoch 179/2000 =====\n", + "No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.0996, Val Accuracy: 0.2844\n", + "===== Epoch 180/2000 =====\n", + "No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3373, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 181/2000 =====\n", + "No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 182/2000 =====\n", + "No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3161, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 183/2000 =====\n", + "No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 184/2000 =====\n", + "No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 185/2000 =====\n", + "No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 186/2000 =====\n", + "No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 187/2000 =====\n", + "No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3271, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 188/2000 =====\n", + "No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3443, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 189/2000 =====\n", + "No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 190/2000 =====\n", + "No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 191/2000 =====\n", + "No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 192/2000 =====\n", + "No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2800\n", + "===== Epoch 193/2000 =====\n", + "No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 194/2000 =====\n", + "No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 195/2000 =====\n", + "No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5766. Train Loss: 1.0991, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 196/2000 =====\n", + "No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3231, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 197/2000 =====\n", + "No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 198/2000 =====\n", + "No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 199/2000 =====\n", + "No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3357, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 200/2000 =====\n", + "No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 201/2000 =====\n", + "No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 202/2000 =====\n", + "No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 203/2000 =====\n", + "No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3302, Val Loss: 1.1012, Val Accuracy: 0.2889\n", + "===== Epoch 204/2000 =====\n", + "No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3412, Val Loss: 1.1023, Val Accuracy: 0.2844\n", + "===== Epoch 205/2000 =====\n", + "No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3263, Val Loss: 1.0994, Val Accuracy: 0.3156\n", + "===== Epoch 206/2000 =====\n", + "No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3365, Val Loss: 1.1008, Val Accuracy: 0.2978\n", + "===== Epoch 207/2000 =====\n", + "No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1034, Val Accuracy: 0.2844\n", + "===== Epoch 208/2000 =====\n", + "No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3404, Val Loss: 1.1011, Val Accuracy: 0.3467\n", + "===== Epoch 209/2000 =====\n", + "No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3341, Val Loss: 1.1003, Val Accuracy: 0.3111\n", + "===== Epoch 210/2000 =====\n", + "No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 211/2000 =====\n", + "No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 212/2000 =====\n", + "No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 213/2000 =====\n", + "No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 214/2000 =====\n", + "No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1003, Val Accuracy: 0.2800\n", + "===== Epoch 215/2000 =====\n", + "No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 216/2000 =====\n", + "No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 217/2000 =====\n", + "No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 218/2000 =====\n", + "No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3396, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 219/2000 =====\n", + "No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1001, Val Accuracy: 0.2933\n", + "===== Epoch 220/2000 =====\n", + "No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 221/2000 =====\n", + "No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 222/2000 =====\n", + "No improvement in Val ROC AUC for 190 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 223/2000 =====\n", + "No improvement in Val ROC AUC for 191 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3286, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 224/2000 =====\n", + "No improvement in Val ROC AUC for 192 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 225/2000 =====\n", + "No improvement in Val ROC AUC for 193 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 226/2000 =====\n", + "No improvement in Val ROC AUC for 194 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.0999, Val Accuracy: 0.2844\n", + "===== Epoch 227/2000 =====\n", + "No improvement in Val ROC AUC for 195 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 228/2000 =====\n", + "No improvement in Val ROC AUC for 196 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 229/2000 =====\n", + "No improvement in Val ROC AUC for 197 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 230/2000 =====\n", + "No improvement in Val ROC AUC for 198 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 231/2000 =====\n", + "No improvement in Val ROC AUC for 199 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 232/2000 =====\n", + "No improvement in Val ROC AUC for 200 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 233/2000 =====\n", + "No improvement in Val ROC AUC for 201 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 234/2000 =====\n", + "No improvement in Val ROC AUC for 202 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 235/2000 =====\n", + "No improvement in Val ROC AUC for 203 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 236/2000 =====\n", + "No improvement in Val ROC AUC for 204 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 237/2000 =====\n", + "No improvement in Val ROC AUC for 205 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 238/2000 =====\n", + "No improvement in Val ROC AUC for 206 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 239/2000 =====\n", + "No improvement in Val ROC AUC for 207 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 240/2000 =====\n", + "No improvement in Val ROC AUC for 208 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 241/2000 =====\n", + "No improvement in Val ROC AUC for 209 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 242/2000 =====\n", + "No improvement in Val ROC AUC for 210 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 243/2000 =====\n", + "No improvement in Val ROC AUC for 211 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 244/2000 =====\n", + "No improvement in Val ROC AUC for 212 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 245/2000 =====\n", + "No improvement in Val ROC AUC for 213 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 246/2000 =====\n", + "No improvement in Val ROC AUC for 214 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 247/2000 =====\n", + "No improvement in Val ROC AUC for 215 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 248/2000 =====\n", + "No improvement in Val ROC AUC for 216 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 249/2000 =====\n", + "No improvement in Val ROC AUC for 217 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 250/2000 =====\n", + "No improvement in Val ROC AUC for 218 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 251/2000 =====\n", + "No improvement in Val ROC AUC for 219 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 252/2000 =====\n", + "No improvement in Val ROC AUC for 220 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 253/2000 =====\n", + "No improvement in Val ROC AUC for 221 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 254/2000 =====\n", + "No improvement in Val ROC AUC for 222 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 255/2000 =====\n", + "No improvement in Val ROC AUC for 223 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 256/2000 =====\n", + "No improvement in Val ROC AUC for 224 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 257/2000 =====\n", + "No improvement in Val ROC AUC for 225 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 258/2000 =====\n", + "No improvement in Val ROC AUC for 226 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 259/2000 =====\n", + "No improvement in Val ROC AUC for 227 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 260/2000 =====\n", + "No improvement in Val ROC AUC for 228 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1016, Val Accuracy: 0.2844\n", + "===== Epoch 261/2000 =====\n", + "No improvement in Val ROC AUC for 229 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 262/2000 =====\n", + "No improvement in Val ROC AUC for 230 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 263/2000 =====\n", + "No improvement in Val ROC AUC for 231 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 264/2000 =====\n", + "No improvement in Val ROC AUC for 232 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 265/2000 =====\n", + "No improvement in Val ROC AUC for 233 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 266/2000 =====\n", + "No improvement in Val ROC AUC for 234 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 267/2000 =====\n", + "No improvement in Val ROC AUC for 235 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 268/2000 =====\n", + "No improvement in Val ROC AUC for 236 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 269/2000 =====\n", + "No improvement in Val ROC AUC for 237 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 270/2000 =====\n", + "No improvement in Val ROC AUC for 238 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 271/2000 =====\n", + "No improvement in Val ROC AUC for 239 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 272/2000 =====\n", + "No improvement in Val ROC AUC for 240 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 273/2000 =====\n", + "No improvement in Val ROC AUC for 241 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 274/2000 =====\n", + "No improvement in Val ROC AUC for 242 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 275/2000 =====\n", + "No improvement in Val ROC AUC for 243 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 276/2000 =====\n", + "No improvement in Val ROC AUC for 244 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 277/2000 =====\n", + "No improvement in Val ROC AUC for 245 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3365, Val Loss: 1.1006, Val Accuracy: 0.3067\n", + "===== Epoch 278/2000 =====\n", + "No improvement in Val ROC AUC for 246 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3341, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 279/2000 =====\n", + "No improvement in Val ROC AUC for 247 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 280/2000 =====\n", + "No improvement in Val ROC AUC for 248 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 281/2000 =====\n", + "No improvement in Val ROC AUC for 249 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 282/2000 =====\n", + "No improvement in Val ROC AUC for 250 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3435, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 283/2000 =====\n", + "No improvement in Val ROC AUC for 251 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 284/2000 =====\n", + "No improvement in Val ROC AUC for 252 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 285/2000 =====\n", + "No improvement in Val ROC AUC for 253 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 286/2000 =====\n", + "No improvement in Val ROC AUC for 254 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1024, Val Accuracy: 0.2844\n", + "===== Epoch 287/2000 =====\n", + "No improvement in Val ROC AUC for 255 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 288/2000 =====\n", + "No improvement in Val ROC AUC for 256 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 289/2000 =====\n", + "No improvement in Val ROC AUC for 257 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 290/2000 =====\n", + "No improvement in Val ROC AUC for 258 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3427, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 291/2000 =====\n", + "No improvement in Val ROC AUC for 259 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3310, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 292/2000 =====\n", + "No improvement in Val ROC AUC for 260 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3412, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 293/2000 =====\n", + "No improvement in Val ROC AUC for 261 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1000, Val Accuracy: 0.2844\n", + "===== Epoch 294/2000 =====\n", + "No improvement in Val ROC AUC for 262 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3412, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 295/2000 =====\n", + "No improvement in Val ROC AUC for 263 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 296/2000 =====\n", + "No improvement in Val ROC AUC for 264 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3396, Val Loss: 1.0998, Val Accuracy: 0.3111\n", + "===== Epoch 297/2000 =====\n", + "No improvement in Val ROC AUC for 265 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3443, Val Loss: 1.1021, Val Accuracy: 0.2844\n", + "===== Epoch 298/2000 =====\n", + "No improvement in Val ROC AUC for 266 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3443, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 299/2000 =====\n", + "No improvement in Val ROC AUC for 267 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1012, Val Accuracy: 0.2889\n", + "===== Epoch 300/2000 =====\n", + "No improvement in Val ROC AUC for 268 epoch(s). Best is 0.5766. Train Loss: 1.0995, Train Accuracy: 0.3412, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 301/2000 =====\n", + "No improvement in Val ROC AUC for 269 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 302/2000 =====\n", + "No improvement in Val ROC AUC for 270 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3427, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 303/2000 =====\n", + "No improvement in Val ROC AUC for 271 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2889\n", + "===== Epoch 304/2000 =====\n", + "No improvement in Val ROC AUC for 272 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 305/2000 =====\n", + "No improvement in Val ROC AUC for 273 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 306/2000 =====\n", + "No improvement in Val ROC AUC for 274 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 307/2000 =====\n", + "No improvement in Val ROC AUC for 275 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3333, Val Loss: 1.1007, Val Accuracy: 0.2978\n", + "===== Epoch 308/2000 =====\n", + "No improvement in Val ROC AUC for 276 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3302, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 309/2000 =====\n", + "No improvement in Val ROC AUC for 277 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3412, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 310/2000 =====\n", + "No improvement in Val ROC AUC for 278 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3412, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 311/2000 =====\n", + "No improvement in Val ROC AUC for 279 epoch(s). Best is 0.5766. Train Loss: 1.0987, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2844\n", + "===== Epoch 312/2000 =====\n", + "No improvement in Val ROC AUC for 280 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2800\n", + "===== Epoch 313/2000 =====\n", + "No improvement in Val ROC AUC for 281 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 314/2000 =====\n", + "No improvement in Val ROC AUC for 282 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 315/2000 =====\n", + "No improvement in Val ROC AUC for 283 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3420, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 316/2000 =====\n", + "No improvement in Val ROC AUC for 284 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 317/2000 =====\n", + "No improvement in Val ROC AUC for 285 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 318/2000 =====\n", + "No improvement in Val ROC AUC for 286 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 319/2000 =====\n", + "No improvement in Val ROC AUC for 287 epoch(s). Best is 0.5766. Train Loss: 1.0989, Train Accuracy: 0.3325, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 320/2000 =====\n", + "No improvement in Val ROC AUC for 288 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3404, Val Loss: 1.1007, Val Accuracy: 0.2889\n", + "===== Epoch 321/2000 =====\n", + "No improvement in Val ROC AUC for 289 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1011, Val Accuracy: 0.2933\n", + "===== Epoch 322/2000 =====\n", + "No improvement in Val ROC AUC for 290 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 323/2000 =====\n", + "No improvement in Val ROC AUC for 291 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3435, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 324/2000 =====\n", + "No improvement in Val ROC AUC for 292 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 325/2000 =====\n", + "No improvement in Val ROC AUC for 293 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1009, Val Accuracy: 0.2844\n", + "===== Epoch 326/2000 =====\n", + "No improvement in Val ROC AUC for 294 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3404, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 327/2000 =====\n", + "No improvement in Val ROC AUC for 295 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3451, Val Loss: 1.1007, Val Accuracy: 0.2844\n", + "===== Epoch 328/2000 =====\n", + "No improvement in Val ROC AUC for 296 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 329/2000 =====\n", + "No improvement in Val ROC AUC for 297 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3365, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 330/2000 =====\n", + "No improvement in Val ROC AUC for 298 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3427, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 331/2000 =====\n", + "No improvement in Val ROC AUC for 299 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2800\n", + "===== Epoch 332/2000 =====\n", + "No improvement in Val ROC AUC for 300 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1014, Val Accuracy: 0.2756\n", + "===== Epoch 333/2000 =====\n", + "No improvement in Val ROC AUC for 301 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1007, Val Accuracy: 0.2800\n", + "===== Epoch 334/2000 =====\n", + "No improvement in Val ROC AUC for 302 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1015, Val Accuracy: 0.2800\n", + "===== Epoch 335/2000 =====\n", + "No improvement in Val ROC AUC for 303 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3420, Val Loss: 1.1017, Val Accuracy: 0.2800\n", + "===== Epoch 336/2000 =====\n", + "No improvement in Val ROC AUC for 304 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3443, Val Loss: 1.1001, Val Accuracy: 0.2889\n", + "===== Epoch 337/2000 =====\n", + "No improvement in Val ROC AUC for 305 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3373, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 338/2000 =====\n", + "No improvement in Val ROC AUC for 306 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3380, Val Loss: 1.1003, Val Accuracy: 0.2800\n", + "===== Epoch 339/2000 =====\n", + "No improvement in Val ROC AUC for 307 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3388, Val Loss: 1.1011, Val Accuracy: 0.2800\n", + "===== Epoch 340/2000 =====\n", + "No improvement in Val ROC AUC for 308 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1010, Val Accuracy: 0.2844\n", + "===== Epoch 341/2000 =====\n", + "No improvement in Val ROC AUC for 309 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 342/2000 =====\n", + "No improvement in Val ROC AUC for 310 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3459, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 343/2000 =====\n", + "No improvement in Val ROC AUC for 311 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.1012, Val Accuracy: 0.2800\n", + "===== Epoch 344/2000 =====\n", + "No improvement in Val ROC AUC for 312 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3404, Val Loss: 1.1004, Val Accuracy: 0.2844\n", + "===== Epoch 345/2000 =====\n", + "No improvement in Val ROC AUC for 313 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 346/2000 =====\n", + "No improvement in Val ROC AUC for 314 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3451, Val Loss: 1.1016, Val Accuracy: 0.2800\n", + "===== Epoch 347/2000 =====\n", + "No improvement in Val ROC AUC for 315 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2844\n", + "===== Epoch 348/2000 =====\n", + "No improvement in Val ROC AUC for 316 epoch(s). Best is 0.5766. Train Loss: 1.0978, Train Accuracy: 0.3404, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 349/2000 =====\n", + "No improvement in Val ROC AUC for 317 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1012, Val Accuracy: 0.2889\n", + "===== Epoch 350/2000 =====\n", + "No improvement in Val ROC AUC for 318 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1003, Val Accuracy: 0.2889\n", + "===== Epoch 351/2000 =====\n", + "No improvement in Val ROC AUC for 319 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2844\n", + "===== Epoch 352/2000 =====\n", + "No improvement in Val ROC AUC for 320 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1018, Val Accuracy: 0.2844\n", + "===== Epoch 353/2000 =====\n", + "No improvement in Val ROC AUC for 321 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3420, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 354/2000 =====\n", + "No improvement in Val ROC AUC for 322 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 355/2000 =====\n", + "No improvement in Val ROC AUC for 323 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1016, Val Accuracy: 0.2800\n", + "===== Epoch 356/2000 =====\n", + "No improvement in Val ROC AUC for 324 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 357/2000 =====\n", + "No improvement in Val ROC AUC for 325 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3443, Val Loss: 1.1013, Val Accuracy: 0.2844\n", + "===== Epoch 358/2000 =====\n", + "No improvement in Val ROC AUC for 326 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.1006, Val Accuracy: 0.2889\n", + "===== Epoch 359/2000 =====\n", + "No improvement in Val ROC AUC for 327 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 360/2000 =====\n", + "No improvement in Val ROC AUC for 328 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3396, Val Loss: 1.1012, Val Accuracy: 0.2844\n", + "===== Epoch 361/2000 =====\n", + "No improvement in Val ROC AUC for 329 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2756\n", + "===== Epoch 362/2000 =====\n", + "No improvement in Val ROC AUC for 330 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3412, Val Loss: 1.1009, Val Accuracy: 0.2800\n", + "===== Epoch 363/2000 =====\n", + "No improvement in Val ROC AUC for 331 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3420, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 364/2000 =====\n", + "No improvement in Val ROC AUC for 332 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1010, Val Accuracy: 0.2800\n", + "===== Epoch 365/2000 =====\n", + "No improvement in Val ROC AUC for 333 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3435, Val Loss: 1.1011, Val Accuracy: 0.2889\n", + "===== Epoch 366/2000 =====\n", + "No improvement in Val ROC AUC for 334 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3396, Val Loss: 1.1005, Val Accuracy: 0.3022\n", + "===== Epoch 367/2000 =====\n", + "No improvement in Val ROC AUC for 335 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3467, Val Loss: 1.1006, Val Accuracy: 0.2933\n", + "===== Epoch 368/2000 =====\n", + "No improvement in Val ROC AUC for 336 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3412, Val Loss: 1.1002, Val Accuracy: 0.2889\n", + "===== Epoch 369/2000 =====\n", + "No improvement in Val ROC AUC for 337 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3380, Val Loss: 1.1012, Val Accuracy: 0.2800\n", + "===== Epoch 370/2000 =====\n", + "No improvement in Val ROC AUC for 338 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3404, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 371/2000 =====\n", + "No improvement in Val ROC AUC for 339 epoch(s). Best is 0.5766. Train Loss: 1.0985, Train Accuracy: 0.3420, Val Loss: 1.1005, Val Accuracy: 0.2844\n", + "===== Epoch 372/2000 =====\n", + "No improvement in Val ROC AUC for 340 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3427, Val Loss: 1.1017, Val Accuracy: 0.2756\n", + "===== Epoch 373/2000 =====\n", + "No improvement in Val ROC AUC for 341 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3396, Val Loss: 1.1015, Val Accuracy: 0.2978\n", + "===== Epoch 374/2000 =====\n", + "No improvement in Val ROC AUC for 342 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.1022, Val Accuracy: 0.2844\n", + "===== Epoch 375/2000 =====\n", + "No improvement in Val ROC AUC for 343 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3396, Val Loss: 1.1014, Val Accuracy: 0.2844\n", + "===== Epoch 376/2000 =====\n", + "No improvement in Val ROC AUC for 344 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3396, Val Loss: 1.0995, Val Accuracy: 0.3244\n", + "===== Epoch 377/2000 =====\n", + "No improvement in Val ROC AUC for 345 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3475, Val Loss: 1.1006, Val Accuracy: 0.2933\n", + "===== Epoch 378/2000 =====\n", + "No improvement in Val ROC AUC for 346 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3404, Val Loss: 1.1020, Val Accuracy: 0.2889\n", + "===== Epoch 379/2000 =====\n", + "No improvement in Val ROC AUC for 347 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3388, Val Loss: 1.1013, Val Accuracy: 0.2933\n", + "===== Epoch 380/2000 =====\n", + "No improvement in Val ROC AUC for 348 epoch(s). Best is 0.5766. Train Loss: 1.0990, Train Accuracy: 0.3404, Val Loss: 1.1024, Val Accuracy: 0.2933\n", + "===== Epoch 381/2000 =====\n", + "No improvement in Val ROC AUC for 349 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3396, Val Loss: 1.1003, Val Accuracy: 0.3067\n", + "===== Epoch 382/2000 =====\n", + "No improvement in Val ROC AUC for 350 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3467, Val Loss: 1.1008, Val Accuracy: 0.2844\n", + "===== Epoch 383/2000 =====\n", + "No improvement in Val ROC AUC for 351 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 384/2000 =====\n", + "No improvement in Val ROC AUC for 352 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1013, Val Accuracy: 0.2800\n", + "===== Epoch 385/2000 =====\n", + "No improvement in Val ROC AUC for 353 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3373, Val Loss: 1.1002, Val Accuracy: 0.2844\n", + "===== Epoch 386/2000 =====\n", + "No improvement in Val ROC AUC for 354 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3467, Val Loss: 1.1009, Val Accuracy: 0.2889\n", + "===== Epoch 387/2000 =====\n", + "No improvement in Val ROC AUC for 355 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3333, Val Loss: 1.1000, Val Accuracy: 0.2933\n", + "===== Epoch 388/2000 =====\n", + "No improvement in Val ROC AUC for 356 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3427, Val Loss: 1.1016, Val Accuracy: 0.2800\n", + "===== Epoch 389/2000 =====\n", + "No improvement in Val ROC AUC for 357 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3420, Val Loss: 1.1027, Val Accuracy: 0.2800\n", + "===== Epoch 390/2000 =====\n", + "No improvement in Val ROC AUC for 358 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3490, Val Loss: 1.1015, Val Accuracy: 0.3111\n", + "===== Epoch 391/2000 =====\n", + "No improvement in Val ROC AUC for 359 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3451, Val Loss: 1.0998, Val Accuracy: 0.3111\n", + "===== Epoch 392/2000 =====\n", + "No improvement in Val ROC AUC for 360 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3459, Val Loss: 1.0999, Val Accuracy: 0.3111\n", + "===== Epoch 393/2000 =====\n", + "No improvement in Val ROC AUC for 361 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3498, Val Loss: 1.1023, Val Accuracy: 0.3289\n", + "===== Epoch 394/2000 =====\n", + "No improvement in Val ROC AUC for 362 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3388, Val Loss: 1.0997, Val Accuracy: 0.3244\n", + "===== Epoch 395/2000 =====\n", + "No improvement in Val ROC AUC for 363 epoch(s). Best is 0.5766. Train Loss: 1.0988, Train Accuracy: 0.3482, Val Loss: 1.0996, Val Accuracy: 0.3111\n", + "===== Epoch 396/2000 =====\n", + "No improvement in Val ROC AUC for 364 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3545, Val Loss: 1.0965, Val Accuracy: 0.3422\n", + "===== Epoch 397/2000 =====\n", + "No improvement in Val ROC AUC for 365 epoch(s). Best is 0.5766. Train Loss: 1.0980, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3111\n", + "===== Epoch 398/2000 =====\n", + "No improvement in Val ROC AUC for 366 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3459, Val Loss: 1.1006, Val Accuracy: 0.3289\n", + "===== Epoch 399/2000 =====\n", + "No improvement in Val ROC AUC for 367 epoch(s). Best is 0.5766. Train Loss: 1.0992, Train Accuracy: 0.3373, Val Loss: 1.1011, Val Accuracy: 0.2844\n", + "===== Epoch 400/2000 =====\n", + "No improvement in Val ROC AUC for 368 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3569, Val Loss: 1.0972, Val Accuracy: 0.3644\n", + "===== Epoch 401/2000 =====\n", + "No improvement in Val ROC AUC for 369 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3435, Val Loss: 1.1047, Val Accuracy: 0.3156\n", + "===== Epoch 402/2000 =====\n", + "No improvement in Val ROC AUC for 370 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3655, Val Loss: 1.0986, Val Accuracy: 0.3467\n", + "===== Epoch 403/2000 =====\n", + "No improvement in Val ROC AUC for 371 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3310, Val Loss: 1.0999, Val Accuracy: 0.3200\n", + "===== Epoch 404/2000 =====\n", + "No improvement in Val ROC AUC for 372 epoch(s). Best is 0.5766. Train Loss: 1.0994, Train Accuracy: 0.3333, Val Loss: 1.1005, Val Accuracy: 0.3022\n", + "===== Epoch 405/2000 =====\n", + "No improvement in Val ROC AUC for 373 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3443, Val Loss: 1.0969, Val Accuracy: 0.3644\n", + "===== Epoch 406/2000 =====\n", + "No improvement in Val ROC AUC for 374 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3341, Val Loss: 1.1013, Val Accuracy: 0.3511\n", + "===== Epoch 407/2000 =====\n", + "No improvement in Val ROC AUC for 375 epoch(s). Best is 0.5766. Train Loss: 1.0971, Train Accuracy: 0.3639, Val Loss: 1.1021, Val Accuracy: 0.3022\n", + "===== Epoch 408/2000 =====\n", + "No improvement in Val ROC AUC for 376 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3459, Val Loss: 1.1032, Val Accuracy: 0.2889\n", + "===== Epoch 409/2000 =====\n", + "No improvement in Val ROC AUC for 377 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3467, Val Loss: 1.0980, Val Accuracy: 0.3378\n", + "===== Epoch 410/2000 =====\n", + "No improvement in Val ROC AUC for 378 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3427, Val Loss: 1.1015, Val Accuracy: 0.3244\n", + "===== Epoch 411/2000 =====\n", + "No improvement in Val ROC AUC for 379 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3435, Val Loss: 1.0985, Val Accuracy: 0.3289\n", + "===== Epoch 412/2000 =====\n", + "No improvement in Val ROC AUC for 380 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3357, Val Loss: 1.0989, Val Accuracy: 0.3156\n", + "===== Epoch 413/2000 =====\n", + "No improvement in Val ROC AUC for 381 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3451, Val Loss: 1.0973, Val Accuracy: 0.3467\n", + "===== Epoch 414/2000 =====\n", + "No improvement in Val ROC AUC for 382 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3467, Val Loss: 1.1013, Val Accuracy: 0.3200\n", + "===== Epoch 415/2000 =====\n", + "No improvement in Val ROC AUC for 383 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3592, Val Loss: 1.1037, Val Accuracy: 0.3067\n", + "===== Epoch 416/2000 =====\n", + "No improvement in Val ROC AUC for 384 epoch(s). Best is 0.5766. Train Loss: 1.0977, Train Accuracy: 0.3373, Val Loss: 1.0974, Val Accuracy: 0.3289\n", + "===== Epoch 417/2000 =====\n", + "No improvement in Val ROC AUC for 385 epoch(s). Best is 0.5766. Train Loss: 1.0978, Train Accuracy: 0.3459, Val Loss: 1.1025, Val Accuracy: 0.3156\n", + "===== Epoch 418/2000 =====\n", + "No improvement in Val ROC AUC for 386 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3333, Val Loss: 1.0994, Val Accuracy: 0.3156\n", + "===== Epoch 419/2000 =====\n", + "No improvement in Val ROC AUC for 387 epoch(s). Best is 0.5766. Train Loss: 1.0979, Train Accuracy: 0.3490, Val Loss: 1.1034, Val Accuracy: 0.2933\n", + "===== Epoch 420/2000 =====\n", + "No improvement in Val ROC AUC for 388 epoch(s). Best is 0.5766. Train Loss: 1.0973, Train Accuracy: 0.3451, Val Loss: 1.1024, Val Accuracy: 0.3200\n", + "===== Epoch 421/2000 =====\n", + "No improvement in Val ROC AUC for 389 epoch(s). Best is 0.5766. Train Loss: 1.0981, Train Accuracy: 0.3576, Val Loss: 1.0991, Val Accuracy: 0.3067\n", + "===== Epoch 422/2000 =====\n", + "No improvement in Val ROC AUC for 390 epoch(s). Best is 0.5766. Train Loss: 1.0970, Train Accuracy: 0.3545, Val Loss: 1.0983, Val Accuracy: 0.3511\n", + "===== Epoch 423/2000 =====\n", + "No improvement in Val ROC AUC for 391 epoch(s). Best is 0.5766. Train Loss: 1.0983, Train Accuracy: 0.3451, Val Loss: 1.0991, Val Accuracy: 0.3511\n", + "===== Epoch 424/2000 =====\n", + "No improvement in Val ROC AUC for 392 epoch(s). Best is 0.5766. Train Loss: 1.0968, Train Accuracy: 0.3490, Val Loss: 1.1002, Val Accuracy: 0.3244\n", + "===== Epoch 425/2000 =====\n", + "No improvement in Val ROC AUC for 393 epoch(s). Best is 0.5766. Train Loss: 1.0986, Train Accuracy: 0.3451, Val Loss: 1.0985, Val Accuracy: 0.3200\n", + "===== Epoch 426/2000 =====\n", + "No improvement in Val ROC AUC for 394 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3482, Val Loss: 1.0981, Val Accuracy: 0.3200\n", + "===== Epoch 427/2000 =====\n", + "No improvement in Val ROC AUC for 395 epoch(s). Best is 0.5766. Train Loss: 1.0976, Train Accuracy: 0.3443, Val Loss: 1.0958, Val Accuracy: 0.3244\n", + "===== Epoch 428/2000 =====\n", + "No improvement in Val ROC AUC for 396 epoch(s). Best is 0.5766. Train Loss: 1.0963, Train Accuracy: 0.3553, Val Loss: 1.1000, Val Accuracy: 0.3111\n", + "===== Epoch 429/2000 =====\n", + "No improvement in Val ROC AUC for 397 epoch(s). Best is 0.5766. Train Loss: 1.0959, Train Accuracy: 0.3671, Val Loss: 1.1031, Val Accuracy: 0.3244\n", + "===== Epoch 430/2000 =====\n", + "No improvement in Val ROC AUC for 398 epoch(s). Best is 0.5766. Train Loss: 1.0957, Train Accuracy: 0.3600, Val Loss: 1.0984, Val Accuracy: 0.3244\n", + "===== Epoch 431/2000 =====\n", + "No improvement in Val ROC AUC for 399 epoch(s). Best is 0.5766. Train Loss: 1.0960, Train Accuracy: 0.3576, Val Loss: 1.1011, Val Accuracy: 0.3244\n", + "===== Epoch 432/2000 =====\n", + "No improvement in Val ROC AUC for 400 epoch(s). Best is 0.5766. Train Loss: 1.0973, Train Accuracy: 0.3475, Val Loss: 1.0997, Val Accuracy: 0.3200\n", + "===== Epoch 433/2000 =====\n", + "No improvement in Val ROC AUC for 401 epoch(s). Best is 0.5766. Train Loss: 1.0960, Train Accuracy: 0.3435, Val Loss: 1.0980, Val Accuracy: 0.3378\n", + "===== Epoch 434/2000 =====\n", + "No improvement in Val ROC AUC for 402 epoch(s). Best is 0.5766. Train Loss: 1.0974, Train Accuracy: 0.3561, Val Loss: 1.1022, Val Accuracy: 0.3022\n", + "===== Epoch 435/2000 =====\n", + "No improvement in Val ROC AUC for 403 epoch(s). Best is 0.5766. Train Loss: 1.0984, Train Accuracy: 0.3271, Val Loss: 1.1015, Val Accuracy: 0.3467\n", + "===== Epoch 436/2000 =====\n", + "No improvement in Val ROC AUC for 404 epoch(s). Best is 0.5766. Train Loss: 1.0975, Train Accuracy: 0.3427, Val Loss: 1.0988, Val Accuracy: 0.3111\n", + "===== Epoch 437/2000 =====\n", + "No improvement in Val ROC AUC for 405 epoch(s). Best is 0.5766. Train Loss: 1.0982, Train Accuracy: 0.3373, Val Loss: 1.0982, Val Accuracy: 0.3289\n", + "===== Epoch 438/2000 =====\n", + "No improvement in Val ROC AUC for 406 epoch(s). Best is 0.5766. Train Loss: 1.0965, Train Accuracy: 0.3514, Val Loss: 1.0989, Val Accuracy: 0.3467\n", + "===== Epoch 439/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5831, Train Loss: 1.0967, Train Accuracy: 0.3388, Val Loss: 1.0929, Val Accuracy: 0.3867\n", + "===== Epoch 440/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3263, Val Loss: 1.1007, Val Accuracy: 0.3111\n", + "===== Epoch 441/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3624, Val Loss: 1.0990, Val Accuracy: 0.3111\n", + "===== Epoch 442/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5831. Train Loss: 1.0959, Train Accuracy: 0.3639, Val Loss: 1.1013, Val Accuracy: 0.3156\n", + "===== Epoch 443/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3569, Val Loss: 1.1033, Val Accuracy: 0.3067\n", + "===== Epoch 444/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3451, Val Loss: 1.0989, Val Accuracy: 0.3422\n", + "===== Epoch 445/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5831. Train Loss: 1.0956, Train Accuracy: 0.3616, Val Loss: 1.1015, Val Accuracy: 0.2844\n", + "===== Epoch 446/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5831. Train Loss: 1.0960, Train Accuracy: 0.3522, Val Loss: 1.1002, Val Accuracy: 0.3111\n", + "===== Epoch 447/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3459, Val Loss: 1.1016, Val Accuracy: 0.2933\n", + "===== Epoch 448/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3569, Val Loss: 1.1037, Val Accuracy: 0.2711\n", + "===== Epoch 449/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3506, Val Loss: 1.0972, Val Accuracy: 0.3244\n", + "===== Epoch 450/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3435, Val Loss: 1.0972, Val Accuracy: 0.3556\n", + "===== Epoch 451/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3694, Val Loss: 1.1022, Val Accuracy: 0.2978\n", + "===== Epoch 452/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3529, Val Loss: 1.1036, Val Accuracy: 0.2756\n", + "===== Epoch 453/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3357, Val Loss: 1.1027, Val Accuracy: 0.2978\n", + "===== Epoch 454/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3388, Val Loss: 1.0998, Val Accuracy: 0.3244\n", + "===== Epoch 455/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5831. Train Loss: 1.0972, Train Accuracy: 0.3475, Val Loss: 1.1018, Val Accuracy: 0.2978\n", + "===== Epoch 456/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3592, Val Loss: 1.0998, Val Accuracy: 0.3378\n", + "===== Epoch 457/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3686, Val Loss: 1.1005, Val Accuracy: 0.3067\n", + "===== Epoch 458/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3639, Val Loss: 1.1010, Val Accuracy: 0.3200\n", + "===== Epoch 459/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3475, Val Loss: 1.0976, Val Accuracy: 0.3422\n", + "===== Epoch 460/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3545, Val Loss: 1.0949, Val Accuracy: 0.3689\n", + "===== Epoch 461/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5831. Train Loss: 1.0974, Train Accuracy: 0.3459, Val Loss: 1.1003, Val Accuracy: 0.3200\n", + "===== Epoch 462/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3420, Val Loss: 1.1024, Val Accuracy: 0.3111\n", + "===== Epoch 463/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3459, Val Loss: 1.1047, Val Accuracy: 0.2489\n", + "===== Epoch 464/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3553, Val Loss: 1.1003, Val Accuracy: 0.3111\n", + "===== Epoch 465/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3522, Val Loss: 1.0987, Val Accuracy: 0.3200\n", + "===== Epoch 466/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3451, Val Loss: 1.0990, Val Accuracy: 0.3333\n", + "===== Epoch 467/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3490, Val Loss: 1.0999, Val Accuracy: 0.3200\n", + "===== Epoch 468/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3600, Val Loss: 1.0968, Val Accuracy: 0.3378\n", + "===== Epoch 469/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3569, Val Loss: 1.1012, Val Accuracy: 0.3244\n", + "===== Epoch 470/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3475, Val Loss: 1.0987, Val Accuracy: 0.3244\n", + "===== Epoch 471/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3537, Val Loss: 1.1021, Val Accuracy: 0.2978\n", + "===== Epoch 472/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5831. Train Loss: 1.0972, Train Accuracy: 0.3459, Val Loss: 1.1012, Val Accuracy: 0.2800\n", + "===== Epoch 473/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3592, Val Loss: 1.1024, Val Accuracy: 0.3156\n", + "===== Epoch 474/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3318, Val Loss: 1.0980, Val Accuracy: 0.3244\n", + "===== Epoch 475/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3678, Val Loss: 1.0997, Val Accuracy: 0.3556\n", + "===== Epoch 476/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3420, Val Loss: 1.0982, Val Accuracy: 0.3378\n", + "===== Epoch 477/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5831. Train Loss: 1.0967, Train Accuracy: 0.3514, Val Loss: 1.1067, Val Accuracy: 0.2978\n", + "===== Epoch 478/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5831. Train Loss: 1.0992, Train Accuracy: 0.3427, Val Loss: 1.0960, Val Accuracy: 0.3511\n", + "===== Epoch 479/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0969, Val Accuracy: 0.3422\n", + "===== Epoch 480/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3655, Val Loss: 1.1005, Val Accuracy: 0.3111\n", + "===== Epoch 481/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3522, Val Loss: 1.0986, Val Accuracy: 0.3244\n", + "===== Epoch 482/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5831. Train Loss: 1.0969, Train Accuracy: 0.3443, Val Loss: 1.0968, Val Accuracy: 0.3556\n", + "===== Epoch 483/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3498, Val Loss: 1.1013, Val Accuracy: 0.3067\n", + "===== Epoch 484/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3459, Val Loss: 1.0989, Val Accuracy: 0.3156\n", + "===== Epoch 485/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5831. Train Loss: 1.0981, Train Accuracy: 0.3584, Val Loss: 1.0984, Val Accuracy: 0.3289\n", + "===== Epoch 486/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3435, Val Loss: 1.0969, Val Accuracy: 0.3600\n", + "===== Epoch 487/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.1027, Val Accuracy: 0.2978\n", + "===== Epoch 488/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3694, Val Loss: 1.0967, Val Accuracy: 0.3378\n", + "===== Epoch 489/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5831. Train Loss: 1.0979, Train Accuracy: 0.3443, Val Loss: 1.1023, Val Accuracy: 0.3244\n", + "===== Epoch 490/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5831. Train Loss: 1.0953, Train Accuracy: 0.3655, Val Loss: 1.1013, Val Accuracy: 0.3022\n", + "===== Epoch 491/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3537, Val Loss: 1.1038, Val Accuracy: 0.3067\n", + "===== Epoch 492/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5831. Train Loss: 1.0975, Train Accuracy: 0.3467, Val Loss: 1.1032, Val Accuracy: 0.2978\n", + "===== Epoch 493/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3498, Val Loss: 1.0972, Val Accuracy: 0.3644\n", + "===== Epoch 494/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3522, Val Loss: 1.0978, Val Accuracy: 0.3644\n", + "===== Epoch 495/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3576, Val Loss: 1.0952, Val Accuracy: 0.3378\n", + "===== Epoch 496/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5831. Train Loss: 1.0982, Train Accuracy: 0.3412, Val Loss: 1.0984, Val Accuracy: 0.3600\n", + "===== Epoch 497/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3616, Val Loss: 1.1029, Val Accuracy: 0.2978\n", + "===== Epoch 498/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3608, Val Loss: 1.1000, Val Accuracy: 0.3378\n", + "===== Epoch 499/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5831. Train Loss: 1.0970, Train Accuracy: 0.3592, Val Loss: 1.1045, Val Accuracy: 0.2889\n", + "===== Epoch 500/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5831. Train Loss: 1.0969, Train Accuracy: 0.3475, Val Loss: 1.0999, Val Accuracy: 0.3067\n", + "===== Epoch 501/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3537, Val Loss: 1.0999, Val Accuracy: 0.3378\n", + "===== Epoch 502/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3663, Val Loss: 1.0988, Val Accuracy: 0.3556\n", + "===== Epoch 503/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3624, Val Loss: 1.0960, Val Accuracy: 0.3511\n", + "===== Epoch 504/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5831. Train Loss: 1.0966, Train Accuracy: 0.3576, Val Loss: 1.0915, Val Accuracy: 0.3644\n", + "===== Epoch 505/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3475, Val Loss: 1.0949, Val Accuracy: 0.3911\n", + "===== Epoch 506/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3702, Val Loss: 1.1076, Val Accuracy: 0.2889\n", + "===== Epoch 507/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5831. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0958, Val Accuracy: 0.3822\n", + "===== Epoch 508/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3749, Val Loss: 1.0987, Val Accuracy: 0.3333\n", + "===== Epoch 509/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5831. Train Loss: 1.0964, Train Accuracy: 0.3545, Val Loss: 1.0976, Val Accuracy: 0.3689\n", + "===== Epoch 510/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5831. Train Loss: 1.0960, Train Accuracy: 0.3576, Val Loss: 1.0926, Val Accuracy: 0.3822\n", + "===== Epoch 511/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5831. Train Loss: 1.0971, Train Accuracy: 0.3490, Val Loss: 1.1039, Val Accuracy: 0.3156\n", + "===== Epoch 512/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5831. Train Loss: 1.0942, Train Accuracy: 0.3671, Val Loss: 1.1010, Val Accuracy: 0.3289\n", + "===== Epoch 513/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3663, Val Loss: 1.0971, Val Accuracy: 0.3867\n", + "===== Epoch 514/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5831. Train Loss: 1.0978, Train Accuracy: 0.3412, Val Loss: 1.0997, Val Accuracy: 0.3511\n", + "===== Epoch 515/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5831. Train Loss: 1.0973, Train Accuracy: 0.3482, Val Loss: 1.1020, Val Accuracy: 0.3244\n", + "===== Epoch 516/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5831. Train Loss: 1.0954, Train Accuracy: 0.3584, Val Loss: 1.1025, Val Accuracy: 0.3067\n", + "===== Epoch 517/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3678, Val Loss: 1.0940, Val Accuracy: 0.3822\n", + "===== Epoch 518/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3694, Val Loss: 1.1042, Val Accuracy: 0.3200\n", + "===== Epoch 519/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3561, Val Loss: 1.1022, Val Accuracy: 0.3200\n", + "===== Epoch 520/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3498, Val Loss: 1.0998, Val Accuracy: 0.3111\n", + "===== Epoch 521/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3529, Val Loss: 1.1022, Val Accuracy: 0.3111\n", + "===== Epoch 522/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3608, Val Loss: 1.0969, Val Accuracy: 0.3422\n", + "===== Epoch 523/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3514, Val Loss: 1.0972, Val Accuracy: 0.3689\n", + "===== Epoch 524/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3600, Val Loss: 1.0992, Val Accuracy: 0.3289\n", + "===== Epoch 525/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3741, Val Loss: 1.0886, Val Accuracy: 0.3778\n", + "===== Epoch 526/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5831. Train Loss: 1.0933, Train Accuracy: 0.3741, Val Loss: 1.0993, Val Accuracy: 0.3378\n", + "===== Epoch 527/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5831. Train Loss: 1.0918, Train Accuracy: 0.3859, Val Loss: 1.0943, Val Accuracy: 0.3733\n", + "===== Epoch 528/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3482, Val Loss: 1.0983, Val Accuracy: 0.3289\n", + "===== Epoch 529/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5831. Train Loss: 1.0957, Train Accuracy: 0.3694, Val Loss: 1.0921, Val Accuracy: 0.3911\n", + "===== Epoch 530/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5831. Train Loss: 1.0938, Train Accuracy: 0.3647, Val Loss: 1.0990, Val Accuracy: 0.3156\n", + "===== Epoch 531/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3529, Val Loss: 1.0912, Val Accuracy: 0.3867\n", + "===== Epoch 532/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5831. Train Loss: 1.0935, Train Accuracy: 0.3780, Val Loss: 1.0933, Val Accuracy: 0.3911\n", + "===== Epoch 533/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5831. Train Loss: 1.0919, Train Accuracy: 0.3671, Val Loss: 1.0983, Val Accuracy: 0.3511\n", + "===== Epoch 534/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5831. Train Loss: 1.0941, Train Accuracy: 0.3631, Val Loss: 1.1028, Val Accuracy: 0.3244\n", + "===== Epoch 535/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5831. Train Loss: 1.0915, Train Accuracy: 0.3780, Val Loss: 1.0983, Val Accuracy: 0.3511\n", + "===== Epoch 536/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5831. Train Loss: 1.0926, Train Accuracy: 0.3576, Val Loss: 1.0944, Val Accuracy: 0.3600\n", + "===== Epoch 537/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3686, Val Loss: 1.1026, Val Accuracy: 0.3244\n", + "===== Epoch 538/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3702, Val Loss: 1.1035, Val Accuracy: 0.3422\n", + "===== Epoch 539/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3765, Val Loss: 1.1020, Val Accuracy: 0.3333\n", + "===== Epoch 540/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5831. Train Loss: 1.0920, Train Accuracy: 0.3788, Val Loss: 1.0983, Val Accuracy: 0.3244\n", + "===== Epoch 541/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5831. Train Loss: 1.0932, Train Accuracy: 0.3710, Val Loss: 1.0950, Val Accuracy: 0.3244\n", + "===== Epoch 542/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5831. Train Loss: 1.0928, Train Accuracy: 0.3647, Val Loss: 1.0911, Val Accuracy: 0.3689\n", + "===== Epoch 543/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5831. Train Loss: 1.0910, Train Accuracy: 0.3702, Val Loss: 1.0989, Val Accuracy: 0.3156\n", + "===== Epoch 544/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5831. Train Loss: 1.0947, Train Accuracy: 0.3451, Val Loss: 1.0965, Val Accuracy: 0.3333\n", + "===== Epoch 545/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5831. Train Loss: 1.0908, Train Accuracy: 0.3718, Val Loss: 1.1001, Val Accuracy: 0.3511\n", + "===== Epoch 546/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5831. Train Loss: 1.0949, Train Accuracy: 0.3663, Val Loss: 1.0993, Val Accuracy: 0.3289\n", + "===== Epoch 547/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5831. Train Loss: 1.0920, Train Accuracy: 0.3812, Val Loss: 1.0987, Val Accuracy: 0.3467\n", + "===== Epoch 548/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3655, Val Loss: 1.0985, Val Accuracy: 0.3467\n", + "===== Epoch 549/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5831. Train Loss: 1.0931, Train Accuracy: 0.3686, Val Loss: 1.1030, Val Accuracy: 0.2978\n", + "===== Epoch 550/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3600, Val Loss: 1.1024, Val Accuracy: 0.2844\n", + "===== Epoch 551/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5831. Train Loss: 1.0963, Train Accuracy: 0.3639, Val Loss: 1.0994, Val Accuracy: 0.3378\n", + "===== Epoch 552/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5831. Train Loss: 1.0942, Train Accuracy: 0.3576, Val Loss: 1.0952, Val Accuracy: 0.3511\n", + "===== Epoch 553/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5831. Train Loss: 1.0916, Train Accuracy: 0.3694, Val Loss: 1.1103, Val Accuracy: 0.2756\n", + "===== Epoch 554/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3749, Val Loss: 1.1022, Val Accuracy: 0.3467\n", + "===== Epoch 555/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5831. Train Loss: 1.0940, Train Accuracy: 0.3686, Val Loss: 1.1017, Val Accuracy: 0.3378\n", + "===== Epoch 556/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5831. Train Loss: 1.0938, Train Accuracy: 0.3639, Val Loss: 1.1003, Val Accuracy: 0.3200\n", + "===== Epoch 557/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5831. Train Loss: 1.0958, Train Accuracy: 0.3498, Val Loss: 1.0976, Val Accuracy: 0.3467\n", + "===== Epoch 558/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5831. Train Loss: 1.0935, Train Accuracy: 0.3600, Val Loss: 1.1028, Val Accuracy: 0.3289\n", + "===== Epoch 559/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5831. Train Loss: 1.0961, Train Accuracy: 0.3553, Val Loss: 1.1046, Val Accuracy: 0.3467\n", + "===== Epoch 560/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5831. Train Loss: 1.0923, Train Accuracy: 0.3796, Val Loss: 1.0968, Val Accuracy: 0.3467\n", + "===== Epoch 561/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5831. Train Loss: 1.0945, Train Accuracy: 0.3608, Val Loss: 1.0995, Val Accuracy: 0.3244\n", + "===== Epoch 562/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5831. Train Loss: 1.0927, Train Accuracy: 0.3835, Val Loss: 1.0979, Val Accuracy: 0.3289\n", + "===== Epoch 563/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5831. Train Loss: 1.0950, Train Accuracy: 0.3694, Val Loss: 1.1014, Val Accuracy: 0.3111\n", + "===== Epoch 564/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5831. Train Loss: 1.0955, Train Accuracy: 0.3624, Val Loss: 1.0976, Val Accuracy: 0.3244\n", + "===== Epoch 565/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5831. Train Loss: 1.0913, Train Accuracy: 0.3765, Val Loss: 1.0940, Val Accuracy: 0.3244\n", + "===== Epoch 566/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5831. Train Loss: 1.0951, Train Accuracy: 0.3663, Val Loss: 1.1017, Val Accuracy: 0.3200\n", + "===== Epoch 567/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5831. Train Loss: 1.0948, Train Accuracy: 0.3600, Val Loss: 1.0984, Val Accuracy: 0.3422\n", + "===== Epoch 568/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5831. Train Loss: 1.0902, Train Accuracy: 0.3827, Val Loss: 1.0943, Val Accuracy: 0.3689\n", + "===== Epoch 569/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5831. Train Loss: 1.0921, Train Accuracy: 0.3655, Val Loss: 1.0963, Val Accuracy: 0.3511\n", + "===== Epoch 570/2000 =====\n", + "No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5831. Train Loss: 1.0940, Train Accuracy: 0.3686, Val Loss: 1.0986, Val Accuracy: 0.3422\n", + "===== Epoch 571/2000 =====\n", + "No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5831. Train Loss: 1.0976, Train Accuracy: 0.3569, Val Loss: 1.0993, Val Accuracy: 0.3467\n", + "===== Epoch 572/2000 =====\n", + "No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5831. Train Loss: 1.0941, Train Accuracy: 0.3678, Val Loss: 1.0930, Val Accuracy: 0.3467\n", + "===== Epoch 573/2000 =====\n", + "No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5831. Train Loss: 1.0962, Train Accuracy: 0.3600, Val Loss: 1.0997, Val Accuracy: 0.3644\n", + "===== Epoch 574/2000 =====\n", + "No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5831. Train Loss: 1.0933, Train Accuracy: 0.3733, Val Loss: 1.1044, Val Accuracy: 0.3378\n", + "===== Epoch 575/2000 =====\n", + "No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5831. Train Loss: 1.0900, Train Accuracy: 0.3859, Val Loss: 1.1003, Val Accuracy: 0.3422\n", + "===== Epoch 576/2000 =====\n", + "No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5831. Train Loss: 1.0965, Train Accuracy: 0.3427, Val Loss: 1.0972, Val Accuracy: 0.3911\n", + "===== Epoch 577/2000 =====\n", + "No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5831. Train Loss: 1.0911, Train Accuracy: 0.3773, Val Loss: 1.1015, Val Accuracy: 0.3244\n", + "===== Epoch 578/2000 =====\n", + "No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5831. Train Loss: 1.0959, Train Accuracy: 0.3584, Val Loss: 1.0991, Val Accuracy: 0.3378\n", + "===== Epoch 579/2000 =====\n", + "No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3718, Val Loss: 1.1132, Val Accuracy: 0.3111\n", + "===== Epoch 580/2000 =====\n", + "No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5831. Train Loss: 1.0946, Train Accuracy: 0.3592, Val Loss: 1.0965, Val Accuracy: 0.3156\n", + "===== Epoch 581/2000 =====\n", + "No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5831. Train Loss: 1.0939, Train Accuracy: 0.3600, Val Loss: 1.0986, Val Accuracy: 0.3289\n", + "===== Epoch 582/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5900, Train Loss: 1.0943, Train Accuracy: 0.3616, Val Loss: 1.0952, Val Accuracy: 0.3822\n", + "===== Epoch 583/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5900. Train Loss: 1.0925, Train Accuracy: 0.3561, Val Loss: 1.1010, Val Accuracy: 0.3200\n", + "===== Epoch 584/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5900. Train Loss: 1.0942, Train Accuracy: 0.3592, Val Loss: 1.1146, Val Accuracy: 0.2800\n", + "===== Epoch 585/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3655, Val Loss: 1.0881, Val Accuracy: 0.3689\n", + "===== Epoch 586/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3592, Val Loss: 1.1024, Val Accuracy: 0.3511\n", + "===== Epoch 587/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3875, Val Loss: 1.0999, Val Accuracy: 0.3200\n", + "===== Epoch 588/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3812, Val Loss: 1.0992, Val Accuracy: 0.3644\n", + "===== Epoch 589/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3655, Val Loss: 1.0930, Val Accuracy: 0.3511\n", + "===== Epoch 590/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5900. Train Loss: 1.0968, Train Accuracy: 0.3569, Val Loss: 1.0864, Val Accuracy: 0.3956\n", + "===== Epoch 591/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5900. Train Loss: 1.0927, Train Accuracy: 0.3647, Val Loss: 1.1014, Val Accuracy: 0.3067\n", + "===== Epoch 592/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5900. Train Loss: 1.0950, Train Accuracy: 0.3584, Val Loss: 1.1150, Val Accuracy: 0.3200\n", + "===== Epoch 593/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5900. Train Loss: 1.0968, Train Accuracy: 0.3490, Val Loss: 1.1055, Val Accuracy: 0.3067\n", + "===== Epoch 594/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3647, Val Loss: 1.1073, Val Accuracy: 0.2933\n", + "===== Epoch 595/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5900. Train Loss: 1.0950, Train Accuracy: 0.3694, Val Loss: 1.0996, Val Accuracy: 0.3511\n", + "===== Epoch 596/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5900. Train Loss: 1.0940, Train Accuracy: 0.3671, Val Loss: 1.1043, Val Accuracy: 0.3111\n", + "===== Epoch 597/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5900. Train Loss: 1.0917, Train Accuracy: 0.3773, Val Loss: 1.0933, Val Accuracy: 0.3600\n", + "===== Epoch 598/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3569, Val Loss: 1.1093, Val Accuracy: 0.3111\n", + "===== Epoch 599/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3741, Val Loss: 1.0987, Val Accuracy: 0.3244\n", + "===== Epoch 600/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3647, Val Loss: 1.0989, Val Accuracy: 0.3378\n", + "===== Epoch 601/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3678, Val Loss: 1.1002, Val Accuracy: 0.3111\n", + "===== Epoch 602/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3678, Val Loss: 1.0867, Val Accuracy: 0.4000\n", + "===== Epoch 603/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3584, Val Loss: 1.0975, Val Accuracy: 0.3289\n", + "===== Epoch 604/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5900. Train Loss: 1.0892, Train Accuracy: 0.3867, Val Loss: 1.1058, Val Accuracy: 0.3111\n", + "===== Epoch 605/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5900. Train Loss: 1.0938, Train Accuracy: 0.3694, Val Loss: 1.1108, Val Accuracy: 0.3200\n", + "===== Epoch 606/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5900. Train Loss: 1.0948, Train Accuracy: 0.3592, Val Loss: 1.0997, Val Accuracy: 0.3644\n", + "===== Epoch 607/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5900. Train Loss: 1.0924, Train Accuracy: 0.3725, Val Loss: 1.0963, Val Accuracy: 0.3822\n", + "===== Epoch 608/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3694, Val Loss: 1.1046, Val Accuracy: 0.3422\n", + "===== Epoch 609/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5900. Train Loss: 1.0922, Train Accuracy: 0.3780, Val Loss: 1.1001, Val Accuracy: 0.3556\n", + "===== Epoch 610/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5900. Train Loss: 1.0932, Train Accuracy: 0.3663, Val Loss: 1.0869, Val Accuracy: 0.3689\n", + "===== Epoch 611/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3671, Val Loss: 1.1085, Val Accuracy: 0.3289\n", + "===== Epoch 612/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5900. Train Loss: 1.0907, Train Accuracy: 0.3733, Val Loss: 1.0918, Val Accuracy: 0.3333\n", + "===== Epoch 613/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5900. Train Loss: 1.0893, Train Accuracy: 0.3914, Val Loss: 1.1150, Val Accuracy: 0.3111\n", + "===== Epoch 614/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5900. Train Loss: 1.0952, Train Accuracy: 0.3616, Val Loss: 1.1042, Val Accuracy: 0.3200\n", + "===== Epoch 615/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5900. Train Loss: 1.0983, Train Accuracy: 0.3584, Val Loss: 1.0946, Val Accuracy: 0.3378\n", + "===== Epoch 616/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5900. Train Loss: 1.0933, Train Accuracy: 0.3608, Val Loss: 1.1012, Val Accuracy: 0.3289\n", + "===== Epoch 617/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5900. Train Loss: 1.0887, Train Accuracy: 0.3875, Val Loss: 1.0916, Val Accuracy: 0.3511\n", + "===== Epoch 618/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5900. Train Loss: 1.0923, Train Accuracy: 0.3702, Val Loss: 1.0976, Val Accuracy: 0.3556\n", + "===== Epoch 619/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3804, Val Loss: 1.0977, Val Accuracy: 0.3422\n", + "===== Epoch 620/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5900. Train Loss: 1.0883, Train Accuracy: 0.3796, Val Loss: 1.0851, Val Accuracy: 0.3867\n", + "===== Epoch 621/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5900. Train Loss: 1.0904, Train Accuracy: 0.3780, Val Loss: 1.1032, Val Accuracy: 0.3422\n", + "===== Epoch 622/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5900. Train Loss: 1.0926, Train Accuracy: 0.3631, Val Loss: 1.0921, Val Accuracy: 0.3422\n", + "===== Epoch 623/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5900. Train Loss: 1.0936, Train Accuracy: 0.3702, Val Loss: 1.1081, Val Accuracy: 0.3333\n", + "===== Epoch 624/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3757, Val Loss: 1.0960, Val Accuracy: 0.3467\n", + "===== Epoch 625/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5900. Train Loss: 1.0972, Train Accuracy: 0.3820, Val Loss: 1.0989, Val Accuracy: 0.3378\n", + "===== Epoch 626/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5900. Train Loss: 1.0951, Train Accuracy: 0.3663, Val Loss: 1.0976, Val Accuracy: 0.3422\n", + "===== Epoch 627/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5900. Train Loss: 1.0943, Train Accuracy: 0.3631, Val Loss: 1.1013, Val Accuracy: 0.3511\n", + "===== Epoch 628/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3624, Val Loss: 1.0946, Val Accuracy: 0.3822\n", + "===== Epoch 629/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5900. Train Loss: 1.0887, Train Accuracy: 0.3890, Val Loss: 1.0926, Val Accuracy: 0.3689\n", + "===== Epoch 630/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5900. Train Loss: 1.0985, Train Accuracy: 0.3529, Val Loss: 1.1020, Val Accuracy: 0.3111\n", + "===== Epoch 631/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3584, Val Loss: 1.1027, Val Accuracy: 0.3111\n", + "===== Epoch 632/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3584, Val Loss: 1.0957, Val Accuracy: 0.3022\n", + "===== Epoch 633/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5900. Train Loss: 1.0934, Train Accuracy: 0.3725, Val Loss: 1.1012, Val Accuracy: 0.3556\n", + "===== Epoch 634/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3514, Val Loss: 1.0870, Val Accuracy: 0.4133\n", + "===== Epoch 635/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5900. Train Loss: 1.0885, Train Accuracy: 0.3875, Val Loss: 1.0995, Val Accuracy: 0.3244\n", + "===== Epoch 636/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5900. Train Loss: 1.0954, Train Accuracy: 0.3631, Val Loss: 1.0959, Val Accuracy: 0.3333\n", + "===== Epoch 637/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5900. Train Loss: 1.0900, Train Accuracy: 0.3804, Val Loss: 1.0992, Val Accuracy: 0.3511\n", + "===== Epoch 638/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5900. Train Loss: 1.0923, Train Accuracy: 0.3671, Val Loss: 1.0932, Val Accuracy: 0.3556\n", + "===== Epoch 639/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5900. Train Loss: 1.0888, Train Accuracy: 0.3804, Val Loss: 1.0961, Val Accuracy: 0.3333\n", + "===== Epoch 640/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3976, Val Loss: 1.0903, Val Accuracy: 0.3733\n", + "===== Epoch 641/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5900. Train Loss: 1.0886, Train Accuracy: 0.3788, Val Loss: 1.1028, Val Accuracy: 0.3111\n", + "===== Epoch 642/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5900. Train Loss: 1.0882, Train Accuracy: 0.3969, Val Loss: 1.1088, Val Accuracy: 0.3111\n", + "===== Epoch 643/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5900. Train Loss: 1.0914, Train Accuracy: 0.3953, Val Loss: 1.1000, Val Accuracy: 0.3511\n", + "===== Epoch 644/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5900. Train Loss: 1.0921, Train Accuracy: 0.3741, Val Loss: 1.0932, Val Accuracy: 0.3689\n", + "===== Epoch 645/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3914, Val Loss: 1.1004, Val Accuracy: 0.3511\n", + "===== Epoch 646/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5900. Train Loss: 1.0911, Train Accuracy: 0.3718, Val Loss: 1.1019, Val Accuracy: 0.3244\n", + "===== Epoch 647/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3843, Val Loss: 1.0909, Val Accuracy: 0.3778\n", + "===== Epoch 648/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5900. Train Loss: 1.0915, Train Accuracy: 0.3678, Val Loss: 1.0969, Val Accuracy: 0.3378\n", + "===== Epoch 649/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5900. Train Loss: 1.0915, Train Accuracy: 0.3733, Val Loss: 1.0948, Val Accuracy: 0.3556\n", + "===== Epoch 650/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5900. Train Loss: 1.0864, Train Accuracy: 0.3898, Val Loss: 1.1093, Val Accuracy: 0.3156\n", + "===== Epoch 651/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5900. Train Loss: 1.0867, Train Accuracy: 0.3937, Val Loss: 1.0979, Val Accuracy: 0.3511\n", + "===== Epoch 652/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5900. Train Loss: 1.0940, Train Accuracy: 0.3843, Val Loss: 1.0971, Val Accuracy: 0.3644\n", + "===== Epoch 653/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5900. Train Loss: 1.0946, Train Accuracy: 0.3553, Val Loss: 1.0995, Val Accuracy: 0.3600\n", + "===== Epoch 654/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5900. Train Loss: 1.0897, Train Accuracy: 0.3922, Val Loss: 1.1014, Val Accuracy: 0.3600\n", + "===== Epoch 655/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5900. Train Loss: 1.0948, Train Accuracy: 0.3561, Val Loss: 1.1008, Val Accuracy: 0.3289\n", + "===== Epoch 656/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3624, Val Loss: 1.0937, Val Accuracy: 0.3467\n", + "===== Epoch 657/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5900. Train Loss: 1.0896, Train Accuracy: 0.3843, Val Loss: 1.0977, Val Accuracy: 0.3511\n", + "===== Epoch 658/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3616, Val Loss: 1.1028, Val Accuracy: 0.3111\n", + "===== Epoch 659/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5900. Train Loss: 1.0904, Train Accuracy: 0.3929, Val Loss: 1.0978, Val Accuracy: 0.3644\n", + "===== Epoch 660/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5900. Train Loss: 1.0910, Train Accuracy: 0.3835, Val Loss: 1.1039, Val Accuracy: 0.3333\n", + "===== Epoch 661/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5900. Train Loss: 1.0901, Train Accuracy: 0.3757, Val Loss: 1.1022, Val Accuracy: 0.3422\n", + "===== Epoch 662/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5900. Train Loss: 1.0856, Train Accuracy: 0.3937, Val Loss: 1.0948, Val Accuracy: 0.3600\n", + "===== Epoch 663/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3757, Val Loss: 1.1089, Val Accuracy: 0.3244\n", + "===== Epoch 664/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3757, Val Loss: 1.0896, Val Accuracy: 0.3733\n", + "===== Epoch 665/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3647, Val Loss: 1.1014, Val Accuracy: 0.3556\n", + "===== Epoch 666/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5900. Train Loss: 1.0962, Train Accuracy: 0.3600, Val Loss: 1.1037, Val Accuracy: 0.3200\n", + "===== Epoch 667/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5900. Train Loss: 1.0956, Train Accuracy: 0.3616, Val Loss: 1.0982, Val Accuracy: 0.3600\n", + "===== Epoch 668/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5900. Train Loss: 1.0924, Train Accuracy: 0.3671, Val Loss: 1.0969, Val Accuracy: 0.3467\n", + "===== Epoch 669/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5900. Train Loss: 1.0883, Train Accuracy: 0.3906, Val Loss: 1.0949, Val Accuracy: 0.3733\n", + "===== Epoch 670/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3710, Val Loss: 1.0930, Val Accuracy: 0.3511\n", + "===== Epoch 671/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5900. Train Loss: 1.0925, Train Accuracy: 0.3725, Val Loss: 1.1074, Val Accuracy: 0.3333\n", + "===== Epoch 672/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5900. Train Loss: 1.0949, Train Accuracy: 0.3671, Val Loss: 1.0986, Val Accuracy: 0.3600\n", + "===== Epoch 673/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5900. Train Loss: 1.0913, Train Accuracy: 0.3882, Val Loss: 1.0935, Val Accuracy: 0.3556\n", + "===== Epoch 674/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5900. Train Loss: 1.0963, Train Accuracy: 0.3561, Val Loss: 1.0963, Val Accuracy: 0.3467\n", + "===== Epoch 675/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5900. Train Loss: 1.0928, Train Accuracy: 0.3647, Val Loss: 1.0998, Val Accuracy: 0.3689\n", + "===== Epoch 676/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3843, Val Loss: 1.0851, Val Accuracy: 0.4044\n", + "===== Epoch 677/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3631, Val Loss: 1.0866, Val Accuracy: 0.4000\n", + "===== Epoch 678/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5900. Train Loss: 1.0944, Train Accuracy: 0.3710, Val Loss: 1.0999, Val Accuracy: 0.3200\n", + "===== Epoch 679/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5900. Train Loss: 1.0911, Train Accuracy: 0.3898, Val Loss: 1.0934, Val Accuracy: 0.3689\n", + "===== Epoch 680/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5900. Train Loss: 1.0935, Train Accuracy: 0.3702, Val Loss: 1.1081, Val Accuracy: 0.3156\n", + "===== Epoch 681/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5900. Train Loss: 1.0918, Train Accuracy: 0.3725, Val Loss: 1.0882, Val Accuracy: 0.3689\n", + "===== Epoch 682/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5900. Train Loss: 1.0917, Train Accuracy: 0.3820, Val Loss: 1.1009, Val Accuracy: 0.3511\n", + "===== Epoch 683/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5900. Train Loss: 1.0908, Train Accuracy: 0.3741, Val Loss: 1.0953, Val Accuracy: 0.3289\n", + "===== Epoch 684/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5900. Train Loss: 1.0895, Train Accuracy: 0.3749, Val Loss: 1.0902, Val Accuracy: 0.3778\n", + "===== Epoch 685/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5900. Train Loss: 1.0895, Train Accuracy: 0.3773, Val Loss: 1.0998, Val Accuracy: 0.3244\n", + "===== Epoch 686/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5900. Train Loss: 1.0884, Train Accuracy: 0.3710, Val Loss: 1.1194, Val Accuracy: 0.2933\n", + "===== Epoch 687/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5900. Train Loss: 1.0912, Train Accuracy: 0.3749, Val Loss: 1.1031, Val Accuracy: 0.3289\n", + "===== Epoch 688/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5900. Train Loss: 1.0908, Train Accuracy: 0.3647, Val Loss: 1.0893, Val Accuracy: 0.3778\n", + "===== Epoch 689/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5900. Train Loss: 1.0931, Train Accuracy: 0.3663, Val Loss: 1.1022, Val Accuracy: 0.3467\n", + "===== Epoch 690/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5900. Train Loss: 1.0862, Train Accuracy: 0.3929, Val Loss: 1.0982, Val Accuracy: 0.3600\n", + "===== Epoch 691/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3655, Val Loss: 1.1026, Val Accuracy: 0.3556\n", + "===== Epoch 692/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5900. Train Loss: 1.0988, Train Accuracy: 0.3616, Val Loss: 1.1060, Val Accuracy: 0.3111\n", + "===== Epoch 693/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5900. Train Loss: 1.0962, Train Accuracy: 0.3616, Val Loss: 1.1014, Val Accuracy: 0.3156\n", + "===== Epoch 694/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5900. Train Loss: 1.0937, Train Accuracy: 0.3718, Val Loss: 1.0881, Val Accuracy: 0.3600\n", + "===== Epoch 695/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5900. Train Loss: 1.0930, Train Accuracy: 0.3671, Val Loss: 1.1071, Val Accuracy: 0.3289\n", + "===== Epoch 696/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5900. Train Loss: 1.0903, Train Accuracy: 0.3765, Val Loss: 1.0941, Val Accuracy: 0.3644\n", + "===== Epoch 697/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5900. Train Loss: 1.0910, Train Accuracy: 0.3820, Val Loss: 1.0855, Val Accuracy: 0.3733\n", + "===== Epoch 698/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5900. Train Loss: 1.0888, Train Accuracy: 0.3678, Val Loss: 1.1151, Val Accuracy: 0.2844\n", + "===== Epoch 699/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5900. Train Loss: 1.0877, Train Accuracy: 0.3843, Val Loss: 1.0941, Val Accuracy: 0.3778\n", + "===== Epoch 700/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5900. Train Loss: 1.0953, Train Accuracy: 0.3725, Val Loss: 1.0847, Val Accuracy: 0.4044\n", + "===== Epoch 701/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5900. Train Loss: 1.0921, Train Accuracy: 0.3859, Val Loss: 1.0916, Val Accuracy: 0.3689\n", + "===== Epoch 702/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5900. Train Loss: 1.0927, Train Accuracy: 0.3718, Val Loss: 1.1023, Val Accuracy: 0.3467\n", + "===== Epoch 703/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5900. Train Loss: 1.0916, Train Accuracy: 0.3882, Val Loss: 1.0888, Val Accuracy: 0.3778\n", + "===== Epoch 704/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5900. Train Loss: 1.0926, Train Accuracy: 0.3890, Val Loss: 1.0939, Val Accuracy: 0.3556\n", + "===== Epoch 705/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5900. Train Loss: 1.0945, Train Accuracy: 0.3647, Val Loss: 1.1010, Val Accuracy: 0.3244\n", + "===== Epoch 706/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5900. Train Loss: 1.0952, Train Accuracy: 0.3624, Val Loss: 1.1008, Val Accuracy: 0.3067\n", + "===== Epoch 707/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5900. Train Loss: 1.0902, Train Accuracy: 0.3843, Val Loss: 1.1056, Val Accuracy: 0.3067\n", + "===== Epoch 708/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5900. Train Loss: 1.0919, Train Accuracy: 0.3671, Val Loss: 1.1044, Val Accuracy: 0.3244\n", + "===== Epoch 709/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5905, Train Loss: 1.0918, Train Accuracy: 0.3569, Val Loss: 1.0833, Val Accuracy: 0.3956\n", + "===== Epoch 710/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3875, Val Loss: 1.0957, Val Accuracy: 0.3778\n", + "===== Epoch 711/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3890, Val Loss: 1.0848, Val Accuracy: 0.3822\n", + "===== Epoch 712/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3937, Val Loss: 1.0972, Val Accuracy: 0.3600\n", + "===== Epoch 713/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5905. Train Loss: 1.0885, Train Accuracy: 0.4008, Val Loss: 1.1001, Val Accuracy: 0.3067\n", + "===== Epoch 714/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3733, Val Loss: 1.1065, Val Accuracy: 0.3111\n", + "===== Epoch 715/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5905. Train Loss: 1.0928, Train Accuracy: 0.3702, Val Loss: 1.1024, Val Accuracy: 0.3511\n", + "===== Epoch 716/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5905. Train Loss: 1.0917, Train Accuracy: 0.3718, Val Loss: 1.1033, Val Accuracy: 0.3289\n", + "===== Epoch 717/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5905. Train Loss: 1.0918, Train Accuracy: 0.3796, Val Loss: 1.0970, Val Accuracy: 0.3600\n", + "===== Epoch 718/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5905. Train Loss: 1.0897, Train Accuracy: 0.3733, Val Loss: 1.1020, Val Accuracy: 0.3467\n", + "===== Epoch 719/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5905. Train Loss: 1.0927, Train Accuracy: 0.3765, Val Loss: 1.1092, Val Accuracy: 0.3067\n", + "===== Epoch 720/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5905. Train Loss: 1.0872, Train Accuracy: 0.3796, Val Loss: 1.1012, Val Accuracy: 0.3422\n", + "===== Epoch 721/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5905. Train Loss: 1.0939, Train Accuracy: 0.3631, Val Loss: 1.1082, Val Accuracy: 0.3200\n", + "===== Epoch 722/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5905. Train Loss: 1.0854, Train Accuracy: 0.3937, Val Loss: 1.0966, Val Accuracy: 0.3422\n", + "===== Epoch 723/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3788, Val Loss: 1.1022, Val Accuracy: 0.3600\n", + "===== Epoch 724/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3780, Val Loss: 1.0916, Val Accuracy: 0.3600\n", + "===== Epoch 725/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5905. Train Loss: 1.0884, Train Accuracy: 0.3851, Val Loss: 1.0981, Val Accuracy: 0.3289\n", + "===== Epoch 726/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5905. Train Loss: 1.0869, Train Accuracy: 0.3733, Val Loss: 1.0938, Val Accuracy: 0.3511\n", + "===== Epoch 727/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5905. Train Loss: 1.0881, Train Accuracy: 0.3882, Val Loss: 1.0939, Val Accuracy: 0.3467\n", + "===== Epoch 728/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5905. Train Loss: 1.0886, Train Accuracy: 0.3804, Val Loss: 1.0980, Val Accuracy: 0.3422\n", + "===== Epoch 729/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5905. Train Loss: 1.0852, Train Accuracy: 0.3969, Val Loss: 1.0957, Val Accuracy: 0.3422\n", + "===== Epoch 730/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5905. Train Loss: 1.0868, Train Accuracy: 0.3804, Val Loss: 1.0953, Val Accuracy: 0.3600\n", + "===== Epoch 731/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3702, Val Loss: 1.1013, Val Accuracy: 0.3244\n", + "===== Epoch 732/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3875, Val Loss: 1.0949, Val Accuracy: 0.3600\n", + "===== Epoch 733/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3835, Val Loss: 1.0962, Val Accuracy: 0.3467\n", + "===== Epoch 734/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5905. Train Loss: 1.0914, Train Accuracy: 0.3749, Val Loss: 1.0963, Val Accuracy: 0.3244\n", + "===== Epoch 735/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5905. Train Loss: 1.0879, Train Accuracy: 0.3882, Val Loss: 1.0936, Val Accuracy: 0.3378\n", + "===== Epoch 736/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5905. Train Loss: 1.0946, Train Accuracy: 0.3576, Val Loss: 1.1013, Val Accuracy: 0.3200\n", + "===== Epoch 737/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3835, Val Loss: 1.0993, Val Accuracy: 0.3422\n", + "===== Epoch 738/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3843, Val Loss: 1.0928, Val Accuracy: 0.3911\n", + "===== Epoch 739/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3859, Val Loss: 1.0920, Val Accuracy: 0.3689\n", + "===== Epoch 740/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5905. Train Loss: 1.0910, Train Accuracy: 0.3812, Val Loss: 1.0897, Val Accuracy: 0.4000\n", + "===== Epoch 741/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3765, Val Loss: 1.1066, Val Accuracy: 0.3156\n", + "===== Epoch 742/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3867, Val Loss: 1.0950, Val Accuracy: 0.3511\n", + "===== Epoch 743/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5905. Train Loss: 1.0862, Train Accuracy: 0.4000, Val Loss: 1.1032, Val Accuracy: 0.3067\n", + "===== Epoch 744/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5905. Train Loss: 1.0902, Train Accuracy: 0.3765, Val Loss: 1.1015, Val Accuracy: 0.2933\n", + "===== Epoch 745/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5905. Train Loss: 1.0892, Train Accuracy: 0.3678, Val Loss: 1.1014, Val Accuracy: 0.3422\n", + "===== Epoch 746/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5905. Train Loss: 1.0894, Train Accuracy: 0.3780, Val Loss: 1.0983, Val Accuracy: 0.3467\n", + "===== Epoch 747/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5905. Train Loss: 1.0853, Train Accuracy: 0.3953, Val Loss: 1.0853, Val Accuracy: 0.3822\n", + "===== Epoch 748/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5905. Train Loss: 1.0840, Train Accuracy: 0.4008, Val Loss: 1.0980, Val Accuracy: 0.3378\n", + "===== Epoch 749/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3694, Val Loss: 1.0874, Val Accuracy: 0.3689\n", + "===== Epoch 750/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5905. Train Loss: 1.0900, Train Accuracy: 0.3702, Val Loss: 1.0916, Val Accuracy: 0.3644\n", + "===== Epoch 751/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5905. Train Loss: 1.0909, Train Accuracy: 0.3898, Val Loss: 1.1023, Val Accuracy: 0.3600\n", + "===== Epoch 752/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3882, Val Loss: 1.1020, Val Accuracy: 0.3511\n", + "===== Epoch 753/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5905. Train Loss: 1.0895, Train Accuracy: 0.3710, Val Loss: 1.0918, Val Accuracy: 0.3644\n", + "===== Epoch 754/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3812, Val Loss: 1.0905, Val Accuracy: 0.3822\n", + "===== Epoch 755/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3843, Val Loss: 1.1070, Val Accuracy: 0.3244\n", + "===== Epoch 756/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3702, Val Loss: 1.0956, Val Accuracy: 0.3556\n", + "===== Epoch 757/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.4008, Val Loss: 1.0920, Val Accuracy: 0.3778\n", + "===== Epoch 758/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3976, Val Loss: 1.0890, Val Accuracy: 0.3689\n", + "===== Epoch 759/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5905. Train Loss: 1.0858, Train Accuracy: 0.3827, Val Loss: 1.0894, Val Accuracy: 0.3511\n", + "===== Epoch 760/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3882, Val Loss: 1.0947, Val Accuracy: 0.3689\n", + "===== Epoch 761/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5905. Train Loss: 1.0915, Train Accuracy: 0.3788, Val Loss: 1.0997, Val Accuracy: 0.3422\n", + "===== Epoch 762/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3725, Val Loss: 1.0914, Val Accuracy: 0.3422\n", + "===== Epoch 763/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5905. Train Loss: 1.0854, Train Accuracy: 0.3914, Val Loss: 1.0931, Val Accuracy: 0.3644\n", + "===== Epoch 764/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3788, Val Loss: 1.1033, Val Accuracy: 0.3244\n", + "===== Epoch 765/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5905. Train Loss: 1.0870, Train Accuracy: 0.3859, Val Loss: 1.0955, Val Accuracy: 0.3600\n", + "===== Epoch 766/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5905. Train Loss: 1.0918, Train Accuracy: 0.3749, Val Loss: 1.1012, Val Accuracy: 0.3333\n", + "===== Epoch 767/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5905. Train Loss: 1.0904, Train Accuracy: 0.3718, Val Loss: 1.0913, Val Accuracy: 0.3911\n", + "===== Epoch 768/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5905. Train Loss: 1.0902, Train Accuracy: 0.3851, Val Loss: 1.0969, Val Accuracy: 0.3689\n", + "===== Epoch 769/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5905. Train Loss: 1.0886, Train Accuracy: 0.3827, Val Loss: 1.1008, Val Accuracy: 0.3200\n", + "===== Epoch 770/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3765, Val Loss: 1.0961, Val Accuracy: 0.3333\n", + "===== Epoch 771/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5905. Train Loss: 1.0862, Train Accuracy: 0.3804, Val Loss: 1.1021, Val Accuracy: 0.3467\n", + "===== Epoch 772/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3976, Val Loss: 1.1009, Val Accuracy: 0.3422\n", + "===== Epoch 773/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3827, Val Loss: 1.0837, Val Accuracy: 0.3778\n", + "===== Epoch 774/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3867, Val Loss: 1.0939, Val Accuracy: 0.3644\n", + "===== Epoch 775/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5905. Train Loss: 1.0905, Train Accuracy: 0.3851, Val Loss: 1.0988, Val Accuracy: 0.3600\n", + "===== Epoch 776/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5905. Train Loss: 1.0847, Train Accuracy: 0.3851, Val Loss: 1.1027, Val Accuracy: 0.3600\n", + "===== Epoch 777/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5905. Train Loss: 1.0925, Train Accuracy: 0.3655, Val Loss: 1.0984, Val Accuracy: 0.3333\n", + "===== Epoch 778/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5905. Train Loss: 1.0929, Train Accuracy: 0.3796, Val Loss: 1.0880, Val Accuracy: 0.4089\n", + "===== Epoch 779/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5905. Train Loss: 1.0874, Train Accuracy: 0.3882, Val Loss: 1.0901, Val Accuracy: 0.3600\n", + "===== Epoch 780/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5905. Train Loss: 1.0879, Train Accuracy: 0.3749, Val Loss: 1.0887, Val Accuracy: 0.4133\n", + "===== Epoch 781/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5905. Train Loss: 1.0838, Train Accuracy: 0.3961, Val Loss: 1.1208, Val Accuracy: 0.3156\n", + "===== Epoch 782/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3749, Val Loss: 1.0955, Val Accuracy: 0.3289\n", + "===== Epoch 783/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5905. Train Loss: 1.0917, Train Accuracy: 0.3765, Val Loss: 1.0977, Val Accuracy: 0.3378\n", + "===== Epoch 784/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5905. Train Loss: 1.0953, Train Accuracy: 0.3843, Val Loss: 1.1089, Val Accuracy: 0.3422\n", + "===== Epoch 785/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5905. Train Loss: 1.0909, Train Accuracy: 0.3733, Val Loss: 1.1032, Val Accuracy: 0.3156\n", + "===== Epoch 786/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5905. Train Loss: 1.0861, Train Accuracy: 0.3843, Val Loss: 1.0934, Val Accuracy: 0.3378\n", + "===== Epoch 787/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5905. Train Loss: 1.0874, Train Accuracy: 0.3914, Val Loss: 1.1081, Val Accuracy: 0.3333\n", + "===== Epoch 788/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3890, Val Loss: 1.1011, Val Accuracy: 0.3556\n", + "===== Epoch 789/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5905. Train Loss: 1.0891, Train Accuracy: 0.3757, Val Loss: 1.1091, Val Accuracy: 0.3378\n", + "===== Epoch 790/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3796, Val Loss: 1.1119, Val Accuracy: 0.3244\n", + "===== Epoch 791/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5905. Train Loss: 1.0967, Train Accuracy: 0.3616, Val Loss: 1.0905, Val Accuracy: 0.3422\n", + "===== Epoch 792/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5905. Train Loss: 1.0907, Train Accuracy: 0.3624, Val Loss: 1.1002, Val Accuracy: 0.3511\n", + "===== Epoch 793/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5905. Train Loss: 1.0870, Train Accuracy: 0.3914, Val Loss: 1.0993, Val Accuracy: 0.3289\n", + "===== Epoch 794/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5905. Train Loss: 1.0869, Train Accuracy: 0.4024, Val Loss: 1.1111, Val Accuracy: 0.3422\n", + "===== Epoch 795/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5905. Train Loss: 1.0893, Train Accuracy: 0.3757, Val Loss: 1.1084, Val Accuracy: 0.3333\n", + "===== Epoch 796/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3812, Val Loss: 1.1070, Val Accuracy: 0.3467\n", + "===== Epoch 797/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3898, Val Loss: 1.0966, Val Accuracy: 0.3689\n", + "===== Epoch 798/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5905. Train Loss: 1.0899, Train Accuracy: 0.3843, Val Loss: 1.0968, Val Accuracy: 0.3689\n", + "===== Epoch 799/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3773, Val Loss: 1.1036, Val Accuracy: 0.3289\n", + "===== Epoch 800/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5905. Train Loss: 1.0875, Train Accuracy: 0.3875, Val Loss: 1.1051, Val Accuracy: 0.3333\n", + "===== Epoch 801/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5905. Train Loss: 1.0830, Train Accuracy: 0.4086, Val Loss: 1.0980, Val Accuracy: 0.3689\n", + "===== Epoch 802/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5905. Train Loss: 1.0891, Train Accuracy: 0.3827, Val Loss: 1.0813, Val Accuracy: 0.3867\n", + "===== Epoch 803/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5905. Train Loss: 1.0882, Train Accuracy: 0.3820, Val Loss: 1.0868, Val Accuracy: 0.3511\n", + "===== Epoch 804/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5905. Train Loss: 1.0912, Train Accuracy: 0.3710, Val Loss: 1.1204, Val Accuracy: 0.3022\n", + "===== Epoch 805/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5905. Train Loss: 1.0900, Train Accuracy: 0.3765, Val Loss: 1.0951, Val Accuracy: 0.3511\n", + "===== Epoch 806/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5905. Train Loss: 1.0907, Train Accuracy: 0.3788, Val Loss: 1.0916, Val Accuracy: 0.3778\n", + "===== Epoch 807/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5905. Train Loss: 1.0901, Train Accuracy: 0.3820, Val Loss: 1.1071, Val Accuracy: 0.3200\n", + "===== Epoch 808/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5905. Train Loss: 1.0905, Train Accuracy: 0.3820, Val Loss: 1.0964, Val Accuracy: 0.3644\n", + "===== Epoch 809/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5905. Train Loss: 1.0877, Train Accuracy: 0.3906, Val Loss: 1.0978, Val Accuracy: 0.3556\n", + "===== Epoch 810/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5905. Train Loss: 1.0883, Train Accuracy: 0.3812, Val Loss: 1.1178, Val Accuracy: 0.3022\n", + "===== Epoch 811/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5905. Train Loss: 1.0848, Train Accuracy: 0.3922, Val Loss: 1.1072, Val Accuracy: 0.3156\n", + "===== Epoch 812/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5905. Train Loss: 1.0915, Train Accuracy: 0.3678, Val Loss: 1.0976, Val Accuracy: 0.3733\n", + "===== Epoch 813/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5905. Train Loss: 1.0914, Train Accuracy: 0.3749, Val Loss: 1.0879, Val Accuracy: 0.3733\n", + "===== Epoch 814/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5905. Train Loss: 1.0896, Train Accuracy: 0.3812, Val Loss: 1.0831, Val Accuracy: 0.4000\n", + "===== Epoch 815/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5905. Train Loss: 1.0880, Train Accuracy: 0.3804, Val Loss: 1.0877, Val Accuracy: 0.3733\n", + "===== Epoch 816/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5905. Train Loss: 1.0858, Train Accuracy: 0.3937, Val Loss: 1.0880, Val Accuracy: 0.3956\n", + "===== Epoch 817/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5905. Train Loss: 1.0885, Train Accuracy: 0.3827, Val Loss: 1.0964, Val Accuracy: 0.3289\n", + "===== Epoch 818/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5905. Train Loss: 1.0883, Train Accuracy: 0.3812, Val Loss: 1.0993, Val Accuracy: 0.3200\n", + "===== Epoch 819/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5905. Train Loss: 1.0890, Train Accuracy: 0.3906, Val Loss: 1.0918, Val Accuracy: 0.3600\n", + "===== Epoch 820/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5905. Train Loss: 1.0873, Train Accuracy: 0.3929, Val Loss: 1.0815, Val Accuracy: 0.3778\n", + "===== Epoch 821/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5905. Train Loss: 1.0927, Train Accuracy: 0.3655, Val Loss: 1.0795, Val Accuracy: 0.3689\n", + "===== Epoch 822/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5905. Train Loss: 1.0895, Train Accuracy: 0.3686, Val Loss: 1.0947, Val Accuracy: 0.3289\n", + "===== Epoch 823/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3969, Val Loss: 1.0973, Val Accuracy: 0.3467\n", + "===== Epoch 824/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5905. Train Loss: 1.0871, Train Accuracy: 0.3898, Val Loss: 1.0884, Val Accuracy: 0.3911\n", + "===== Epoch 825/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5905. Train Loss: 1.0857, Train Accuracy: 0.4047, Val Loss: 1.0763, Val Accuracy: 0.3867\n", + "===== Epoch 826/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5905. Train Loss: 1.0923, Train Accuracy: 0.3725, Val Loss: 1.0868, Val Accuracy: 0.3733\n", + "===== Epoch 827/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5905. Train Loss: 1.0842, Train Accuracy: 0.3804, Val Loss: 1.0922, Val Accuracy: 0.3644\n", + "===== Epoch 828/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5905. Train Loss: 1.0851, Train Accuracy: 0.3890, Val Loss: 1.0889, Val Accuracy: 0.3644\n", + "===== Epoch 829/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5905. Train Loss: 1.0840, Train Accuracy: 0.4078, Val Loss: 1.1026, Val Accuracy: 0.3244\n", + "===== Epoch 830/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5905. Train Loss: 1.0845, Train Accuracy: 0.3914, Val Loss: 1.0981, Val Accuracy: 0.3333\n", + "===== Epoch 831/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5935, Train Loss: 1.0825, Train Accuracy: 0.4071, Val Loss: 1.0830, Val Accuracy: 0.3822\n", + "===== Epoch 832/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5935. Train Loss: 1.0891, Train Accuracy: 0.3953, Val Loss: 1.0839, Val Accuracy: 0.3778\n", + "===== Epoch 833/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3929, Val Loss: 1.0923, Val Accuracy: 0.3644\n", + "===== Epoch 834/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3780, Val Loss: 1.0918, Val Accuracy: 0.3644\n", + "===== Epoch 835/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5935. Train Loss: 1.0815, Train Accuracy: 0.4016, Val Loss: 1.0847, Val Accuracy: 0.3956\n", + "===== Epoch 836/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3875, Val Loss: 1.0946, Val Accuracy: 0.3467\n", + "===== Epoch 837/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3882, Val Loss: 1.1079, Val Accuracy: 0.3156\n", + "===== Epoch 838/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5935. Train Loss: 1.0910, Train Accuracy: 0.3663, Val Loss: 1.0967, Val Accuracy: 0.3289\n", + "===== Epoch 839/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5935. Train Loss: 1.0909, Train Accuracy: 0.3773, Val Loss: 1.0885, Val Accuracy: 0.3200\n", + "===== Epoch 840/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5935. Train Loss: 1.0838, Train Accuracy: 0.3765, Val Loss: 1.0953, Val Accuracy: 0.3778\n", + "===== Epoch 841/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5935. Train Loss: 1.0917, Train Accuracy: 0.3616, Val Loss: 1.1019, Val Accuracy: 0.3467\n", + "===== Epoch 842/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5935. Train Loss: 1.0821, Train Accuracy: 0.3890, Val Loss: 1.0971, Val Accuracy: 0.3378\n", + "===== Epoch 843/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.5935. Train Loss: 1.0760, Train Accuracy: 0.4110, Val Loss: 1.0911, Val Accuracy: 0.3467\n", + "===== Epoch 844/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.5935. Train Loss: 1.0880, Train Accuracy: 0.3867, Val Loss: 1.0892, Val Accuracy: 0.3733\n", + "===== Epoch 845/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3804, Val Loss: 1.0885, Val Accuracy: 0.3644\n", + "===== Epoch 846/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.3835, Val Loss: 1.1011, Val Accuracy: 0.3422\n", + "===== Epoch 847/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.5935. Train Loss: 1.0923, Train Accuracy: 0.3749, Val Loss: 1.1012, Val Accuracy: 0.3556\n", + "===== Epoch 848/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3875, Val Loss: 1.0959, Val Accuracy: 0.3511\n", + "===== Epoch 849/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3725, Val Loss: 1.0957, Val Accuracy: 0.3511\n", + "===== Epoch 850/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3890, Val Loss: 1.0941, Val Accuracy: 0.3822\n", + "===== Epoch 851/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3976, Val Loss: 1.0951, Val Accuracy: 0.3867\n", + "===== Epoch 852/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3859, Val Loss: 1.0958, Val Accuracy: 0.3378\n", + "===== Epoch 853/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.5935. Train Loss: 1.0856, Train Accuracy: 0.3906, Val Loss: 1.0947, Val Accuracy: 0.3600\n", + "===== Epoch 854/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.5935. Train Loss: 1.0788, Train Accuracy: 0.4188, Val Loss: 1.0793, Val Accuracy: 0.3733\n", + "===== Epoch 855/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3741, Val Loss: 1.0880, Val Accuracy: 0.3644\n", + "===== Epoch 856/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.5935. Train Loss: 1.0808, Train Accuracy: 0.3945, Val Loss: 1.0918, Val Accuracy: 0.3822\n", + "===== Epoch 857/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.5935. Train Loss: 1.0862, Train Accuracy: 0.3820, Val Loss: 1.0850, Val Accuracy: 0.3867\n", + "===== Epoch 858/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.5935. Train Loss: 1.0845, Train Accuracy: 0.3843, Val Loss: 1.0917, Val Accuracy: 0.3733\n", + "===== Epoch 859/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.3969, Val Loss: 1.0942, Val Accuracy: 0.3556\n", + "===== Epoch 860/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3937, Val Loss: 1.0945, Val Accuracy: 0.3200\n", + "===== Epoch 861/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.5935. Train Loss: 1.0868, Train Accuracy: 0.3765, Val Loss: 1.0918, Val Accuracy: 0.3422\n", + "===== Epoch 862/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3851, Val Loss: 1.0959, Val Accuracy: 0.3511\n", + "===== Epoch 863/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.5935. Train Loss: 1.0885, Train Accuracy: 0.3922, Val Loss: 1.0913, Val Accuracy: 0.3467\n", + "===== Epoch 864/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.5935. Train Loss: 1.0811, Train Accuracy: 0.3929, Val Loss: 1.1109, Val Accuracy: 0.3244\n", + "===== Epoch 865/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.5935. Train Loss: 1.0891, Train Accuracy: 0.3733, Val Loss: 1.1064, Val Accuracy: 0.3467\n", + "===== Epoch 866/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.3992, Val Loss: 1.0914, Val Accuracy: 0.3511\n", + "===== Epoch 867/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.4086, Val Loss: 1.0937, Val Accuracy: 0.3600\n", + "===== Epoch 868/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3796, Val Loss: 1.1140, Val Accuracy: 0.3467\n", + "===== Epoch 869/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.5935. Train Loss: 1.0911, Train Accuracy: 0.3663, Val Loss: 1.0898, Val Accuracy: 0.3644\n", + "===== Epoch 870/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3686, Val Loss: 1.0986, Val Accuracy: 0.3422\n", + "===== Epoch 871/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.5935. Train Loss: 1.0868, Train Accuracy: 0.3890, Val Loss: 1.0882, Val Accuracy: 0.3644\n", + "===== Epoch 872/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.5935. Train Loss: 1.0905, Train Accuracy: 0.3733, Val Loss: 1.1010, Val Accuracy: 0.3600\n", + "===== Epoch 873/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.5935. Train Loss: 1.0851, Train Accuracy: 0.4047, Val Loss: 1.0838, Val Accuracy: 0.4044\n", + "===== Epoch 874/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3851, Val Loss: 1.0981, Val Accuracy: 0.3333\n", + "===== Epoch 875/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.5935. Train Loss: 1.0889, Train Accuracy: 0.3796, Val Loss: 1.1030, Val Accuracy: 0.3244\n", + "===== Epoch 876/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.5935. Train Loss: 1.0875, Train Accuracy: 0.3812, Val Loss: 1.0992, Val Accuracy: 0.3467\n", + "===== Epoch 877/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.5935. Train Loss: 1.0865, Train Accuracy: 0.3890, Val Loss: 1.0942, Val Accuracy: 0.3644\n", + "===== Epoch 878/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.5935. Train Loss: 1.0873, Train Accuracy: 0.3820, Val Loss: 1.1075, Val Accuracy: 0.3244\n", + "===== Epoch 879/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.3953, Val Loss: 1.0870, Val Accuracy: 0.3644\n", + "===== Epoch 880/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3773, Val Loss: 1.0952, Val Accuracy: 0.3556\n", + "===== Epoch 881/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3906, Val Loss: 1.0928, Val Accuracy: 0.3511\n", + "===== Epoch 882/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.5935. Train Loss: 1.0870, Train Accuracy: 0.3882, Val Loss: 1.1073, Val Accuracy: 0.3422\n", + "===== Epoch 883/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.5935. Train Loss: 1.0871, Train Accuracy: 0.4024, Val Loss: 1.1040, Val Accuracy: 0.3244\n", + "===== Epoch 884/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.5935. Train Loss: 1.0834, Train Accuracy: 0.3906, Val Loss: 1.0928, Val Accuracy: 0.3422\n", + "===== Epoch 885/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.5935. Train Loss: 1.0865, Train Accuracy: 0.3898, Val Loss: 1.1019, Val Accuracy: 0.3511\n", + "===== Epoch 886/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.5935. Train Loss: 1.0874, Train Accuracy: 0.3827, Val Loss: 1.0933, Val Accuracy: 0.3867\n", + "===== Epoch 887/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.5935. Train Loss: 1.0921, Train Accuracy: 0.3765, Val Loss: 1.0885, Val Accuracy: 0.3467\n", + "===== Epoch 888/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.5935. Train Loss: 1.0905, Train Accuracy: 0.3773, Val Loss: 1.1028, Val Accuracy: 0.3289\n", + "===== Epoch 889/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3867, Val Loss: 1.0805, Val Accuracy: 0.3778\n", + "===== Epoch 890/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.5935. Train Loss: 1.0914, Train Accuracy: 0.3827, Val Loss: 1.1033, Val Accuracy: 0.3422\n", + "===== Epoch 891/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.5935. Train Loss: 1.0815, Train Accuracy: 0.3969, Val Loss: 1.0885, Val Accuracy: 0.3467\n", + "===== Epoch 892/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.5935. Train Loss: 1.0908, Train Accuracy: 0.3678, Val Loss: 1.1015, Val Accuracy: 0.3422\n", + "===== Epoch 893/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.5935. Train Loss: 1.0940, Train Accuracy: 0.3733, Val Loss: 1.0945, Val Accuracy: 0.3644\n", + "===== Epoch 894/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.5935. Train Loss: 1.0841, Train Accuracy: 0.3969, Val Loss: 1.1029, Val Accuracy: 0.3422\n", + "===== Epoch 895/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.5935. Train Loss: 1.0920, Train Accuracy: 0.3773, Val Loss: 1.1149, Val Accuracy: 0.3200\n", + "===== Epoch 896/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3859, Val Loss: 1.1011, Val Accuracy: 0.3422\n", + "===== Epoch 897/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.5935. Train Loss: 1.0885, Train Accuracy: 0.3749, Val Loss: 1.0956, Val Accuracy: 0.3822\n", + "===== Epoch 898/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.5935. Train Loss: 1.0867, Train Accuracy: 0.3859, Val Loss: 1.0897, Val Accuracy: 0.3822\n", + "===== Epoch 899/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.4102, Val Loss: 1.0900, Val Accuracy: 0.3733\n", + "===== Epoch 900/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.5935. Train Loss: 1.0828, Train Accuracy: 0.3961, Val Loss: 1.0972, Val Accuracy: 0.3556\n", + "===== Epoch 901/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.5935. Train Loss: 1.0861, Train Accuracy: 0.3867, Val Loss: 1.1034, Val Accuracy: 0.3556\n", + "===== Epoch 902/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.5935. Train Loss: 1.0846, Train Accuracy: 0.3820, Val Loss: 1.0901, Val Accuracy: 0.3556\n", + "===== Epoch 903/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.5935. Train Loss: 1.0819, Train Accuracy: 0.4016, Val Loss: 1.1029, Val Accuracy: 0.3422\n", + "===== Epoch 904/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3867, Val Loss: 1.1031, Val Accuracy: 0.3422\n", + "===== Epoch 905/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.5935. Train Loss: 1.0774, Train Accuracy: 0.3969, Val Loss: 1.0821, Val Accuracy: 0.3778\n", + "===== Epoch 906/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.5935. Train Loss: 1.0899, Train Accuracy: 0.3757, Val Loss: 1.1117, Val Accuracy: 0.3422\n", + "===== Epoch 907/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.5935. Train Loss: 1.0894, Train Accuracy: 0.3780, Val Loss: 1.0874, Val Accuracy: 0.3511\n", + "===== Epoch 908/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.5935. Train Loss: 1.0941, Train Accuracy: 0.3718, Val Loss: 1.1043, Val Accuracy: 0.3467\n", + "===== Epoch 909/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.5935. Train Loss: 1.0863, Train Accuracy: 0.3906, Val Loss: 1.1019, Val Accuracy: 0.2978\n", + "===== Epoch 910/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.5935. Train Loss: 1.0805, Train Accuracy: 0.4133, Val Loss: 1.0966, Val Accuracy: 0.3689\n", + "===== Epoch 911/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.4047, Val Loss: 1.0819, Val Accuracy: 0.4000\n", + "===== Epoch 912/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.5935. Train Loss: 1.0792, Train Accuracy: 0.3922, Val Loss: 1.0900, Val Accuracy: 0.3733\n", + "===== Epoch 913/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3718, Val Loss: 1.0850, Val Accuracy: 0.3689\n", + "===== Epoch 914/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.5935. Train Loss: 1.0834, Train Accuracy: 0.3992, Val Loss: 1.0989, Val Accuracy: 0.3733\n", + "===== Epoch 915/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.4016, Val Loss: 1.1213, Val Accuracy: 0.2978\n", + "===== Epoch 916/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.5935. Train Loss: 1.0978, Train Accuracy: 0.3631, Val Loss: 1.0870, Val Accuracy: 0.3644\n", + "===== Epoch 917/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.5935. Train Loss: 1.0847, Train Accuracy: 0.3835, Val Loss: 1.0869, Val Accuracy: 0.4044\n", + "===== Epoch 918/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.5935. Train Loss: 1.0839, Train Accuracy: 0.3788, Val Loss: 1.1024, Val Accuracy: 0.3333\n", + "===== Epoch 919/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.5935. Train Loss: 1.0817, Train Accuracy: 0.4016, Val Loss: 1.0813, Val Accuracy: 0.3778\n", + "===== Epoch 920/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.5935. Train Loss: 1.0790, Train Accuracy: 0.3906, Val Loss: 1.0968, Val Accuracy: 0.3733\n", + "===== Epoch 921/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3835, Val Loss: 1.0894, Val Accuracy: 0.3556\n", + "===== Epoch 922/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.5935. Train Loss: 1.0907, Train Accuracy: 0.3906, Val Loss: 1.0940, Val Accuracy: 0.3867\n", + "===== Epoch 923/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3882, Val Loss: 1.0978, Val Accuracy: 0.3689\n", + "===== Epoch 924/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3945, Val Loss: 1.0891, Val Accuracy: 0.3644\n", + "===== Epoch 925/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.5935. Train Loss: 1.0826, Train Accuracy: 0.4039, Val Loss: 1.0986, Val Accuracy: 0.3600\n", + "===== Epoch 926/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3859, Val Loss: 1.0978, Val Accuracy: 0.3511\n", + "===== Epoch 927/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.5935. Train Loss: 1.0870, Train Accuracy: 0.3851, Val Loss: 1.0780, Val Accuracy: 0.4311\n", + "===== Epoch 928/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.5935. Train Loss: 1.0824, Train Accuracy: 0.3953, Val Loss: 1.1028, Val Accuracy: 0.3378\n", + "===== Epoch 929/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.5935. Train Loss: 1.0884, Train Accuracy: 0.3929, Val Loss: 1.1094, Val Accuracy: 0.3289\n", + "===== Epoch 930/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.5935. Train Loss: 1.0813, Train Accuracy: 0.4000, Val Loss: 1.0976, Val Accuracy: 0.3333\n", + "===== Epoch 931/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.3914, Val Loss: 1.0923, Val Accuracy: 0.3556\n", + "===== Epoch 932/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3835, Val Loss: 1.1043, Val Accuracy: 0.3556\n", + "===== Epoch 933/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.5935. Train Loss: 1.0869, Train Accuracy: 0.3820, Val Loss: 1.0916, Val Accuracy: 0.3333\n", + "===== Epoch 934/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3937, Val Loss: 1.0888, Val Accuracy: 0.3689\n", + "===== Epoch 935/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.5935. Train Loss: 1.0849, Train Accuracy: 0.3851, Val Loss: 1.0987, Val Accuracy: 0.3422\n", + "===== Epoch 936/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.4071, Val Loss: 1.0870, Val Accuracy: 0.3689\n", + "===== Epoch 937/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.5935. Train Loss: 1.0846, Train Accuracy: 0.3796, Val Loss: 1.1006, Val Accuracy: 0.3378\n", + "===== Epoch 938/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3812, Val Loss: 1.0951, Val Accuracy: 0.3289\n", + "===== Epoch 939/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.5935. Train Loss: 1.0818, Train Accuracy: 0.3922, Val Loss: 1.0805, Val Accuracy: 0.3867\n", + "===== Epoch 940/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3867, Val Loss: 1.1038, Val Accuracy: 0.3511\n", + "===== Epoch 941/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.5935. Train Loss: 1.0920, Train Accuracy: 0.3584, Val Loss: 1.0905, Val Accuracy: 0.3467\n", + "===== Epoch 942/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.5935. Train Loss: 1.0775, Train Accuracy: 0.4063, Val Loss: 1.0865, Val Accuracy: 0.3733\n", + "===== Epoch 943/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.5935. Train Loss: 1.0790, Train Accuracy: 0.3992, Val Loss: 1.0946, Val Accuracy: 0.3511\n", + "===== Epoch 944/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.5935. Train Loss: 1.0788, Train Accuracy: 0.4016, Val Loss: 1.0845, Val Accuracy: 0.4044\n", + "===== Epoch 945/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.3875, Val Loss: 1.0860, Val Accuracy: 0.3600\n", + "===== Epoch 946/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.5935. Train Loss: 1.0827, Train Accuracy: 0.3984, Val Loss: 1.0762, Val Accuracy: 0.3822\n", + "===== Epoch 947/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.5935. Train Loss: 1.0812, Train Accuracy: 0.4008, Val Loss: 1.0860, Val Accuracy: 0.3778\n", + "===== Epoch 948/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3984, Val Loss: 1.0986, Val Accuracy: 0.3244\n", + "===== Epoch 949/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.5935. Train Loss: 1.0842, Train Accuracy: 0.3827, Val Loss: 1.0876, Val Accuracy: 0.3822\n", + "===== Epoch 950/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.5935. Train Loss: 1.0886, Train Accuracy: 0.3875, Val Loss: 1.0965, Val Accuracy: 0.3467\n", + "===== Epoch 951/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.4024, Val Loss: 1.0913, Val Accuracy: 0.3689\n", + "===== Epoch 952/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.4016, Val Loss: 1.0965, Val Accuracy: 0.3244\n", + "===== Epoch 953/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.5935. Train Loss: 1.0829, Train Accuracy: 0.3976, Val Loss: 1.0892, Val Accuracy: 0.3822\n", + "===== Epoch 954/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3890, Val Loss: 1.0963, Val Accuracy: 0.3689\n", + "===== Epoch 955/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.5935. Train Loss: 1.0802, Train Accuracy: 0.4110, Val Loss: 1.0942, Val Accuracy: 0.3422\n", + "===== Epoch 956/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3851, Val Loss: 1.0990, Val Accuracy: 0.3289\n", + "===== Epoch 957/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.5935. Train Loss: 1.0855, Train Accuracy: 0.3929, Val Loss: 1.0925, Val Accuracy: 0.3733\n", + "===== Epoch 958/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3875, Val Loss: 1.0968, Val Accuracy: 0.3600\n", + "===== Epoch 959/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.5935. Train Loss: 1.0882, Train Accuracy: 0.3718, Val Loss: 1.0872, Val Accuracy: 0.3467\n", + "===== Epoch 960/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.5935. Train Loss: 1.0845, Train Accuracy: 0.3906, Val Loss: 1.0923, Val Accuracy: 0.3422\n", + "===== Epoch 961/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.5935. Train Loss: 1.0839, Train Accuracy: 0.3945, Val Loss: 1.0978, Val Accuracy: 0.3200\n", + "===== Epoch 962/2000 =====\n", + "No improvement in Val ROC AUC for 131 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3702, Val Loss: 1.0945, Val Accuracy: 0.3600\n", + "===== Epoch 963/2000 =====\n", + "No improvement in Val ROC AUC for 132 epoch(s). Best is 0.5935. Train Loss: 1.0838, Train Accuracy: 0.3749, Val Loss: 1.0862, Val Accuracy: 0.4133\n", + "===== Epoch 964/2000 =====\n", + "No improvement in Val ROC AUC for 133 epoch(s). Best is 0.5935. Train Loss: 1.0785, Train Accuracy: 0.4008, Val Loss: 1.0844, Val Accuracy: 0.3644\n", + "===== Epoch 965/2000 =====\n", + "No improvement in Val ROC AUC for 134 epoch(s). Best is 0.5935. Train Loss: 1.0831, Train Accuracy: 0.3906, Val Loss: 1.1029, Val Accuracy: 0.3600\n", + "===== Epoch 966/2000 =====\n", + "No improvement in Val ROC AUC for 135 epoch(s). Best is 0.5935. Train Loss: 1.0880, Train Accuracy: 0.3937, Val Loss: 1.1018, Val Accuracy: 0.3378\n", + "===== Epoch 967/2000 =====\n", + "No improvement in Val ROC AUC for 136 epoch(s). Best is 0.5935. Train Loss: 1.0803, Train Accuracy: 0.3922, Val Loss: 1.0918, Val Accuracy: 0.3689\n", + "===== Epoch 968/2000 =====\n", + "No improvement in Val ROC AUC for 137 epoch(s). Best is 0.5935. Train Loss: 1.0786, Train Accuracy: 0.4086, Val Loss: 1.0895, Val Accuracy: 0.3822\n", + "===== Epoch 969/2000 =====\n", + "No improvement in Val ROC AUC for 138 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3820, Val Loss: 1.0857, Val Accuracy: 0.3689\n", + "===== Epoch 970/2000 =====\n", + "No improvement in Val ROC AUC for 139 epoch(s). Best is 0.5935. Train Loss: 1.0857, Train Accuracy: 0.4063, Val Loss: 1.0894, Val Accuracy: 0.3556\n", + "===== Epoch 971/2000 =====\n", + "No improvement in Val ROC AUC for 140 epoch(s). Best is 0.5935. Train Loss: 1.0853, Train Accuracy: 0.3827, Val Loss: 1.1080, Val Accuracy: 0.3244\n", + "===== Epoch 972/2000 =====\n", + "No improvement in Val ROC AUC for 141 epoch(s). Best is 0.5935. Train Loss: 1.0782, Train Accuracy: 0.3984, Val Loss: 1.0904, Val Accuracy: 0.3600\n", + "===== Epoch 973/2000 =====\n", + "No improvement in Val ROC AUC for 142 epoch(s). Best is 0.5935. Train Loss: 1.0794, Train Accuracy: 0.4125, Val Loss: 1.1102, Val Accuracy: 0.3289\n", + "===== Epoch 974/2000 =====\n", + "No improvement in Val ROC AUC for 143 epoch(s). Best is 0.5935. Train Loss: 1.0750, Train Accuracy: 0.4024, Val Loss: 1.1121, Val Accuracy: 0.3289\n", + "===== Epoch 975/2000 =====\n", + "No improvement in Val ROC AUC for 144 epoch(s). Best is 0.5935. Train Loss: 1.0850, Train Accuracy: 0.3835, Val Loss: 1.0947, Val Accuracy: 0.3244\n", + "===== Epoch 976/2000 =====\n", + "No improvement in Val ROC AUC for 145 epoch(s). Best is 0.5935. Train Loss: 1.0828, Train Accuracy: 0.3976, Val Loss: 1.0939, Val Accuracy: 0.4000\n", + "===== Epoch 977/2000 =====\n", + "No improvement in Val ROC AUC for 146 epoch(s). Best is 0.5935. Train Loss: 1.0884, Train Accuracy: 0.3875, Val Loss: 1.0923, Val Accuracy: 0.3556\n", + "===== Epoch 978/2000 =====\n", + "No improvement in Val ROC AUC for 147 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3851, Val Loss: 1.1019, Val Accuracy: 0.3422\n", + "===== Epoch 979/2000 =====\n", + "No improvement in Val ROC AUC for 148 epoch(s). Best is 0.5935. Train Loss: 1.0808, Train Accuracy: 0.3976, Val Loss: 1.1004, Val Accuracy: 0.3600\n", + "===== Epoch 980/2000 =====\n", + "No improvement in Val ROC AUC for 149 epoch(s). Best is 0.5935. Train Loss: 1.0866, Train Accuracy: 0.3882, Val Loss: 1.1112, Val Accuracy: 0.3378\n", + "===== Epoch 981/2000 =====\n", + "No improvement in Val ROC AUC for 150 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3984, Val Loss: 1.0882, Val Accuracy: 0.3644\n", + "===== Epoch 982/2000 =====\n", + "No improvement in Val ROC AUC for 151 epoch(s). Best is 0.5935. Train Loss: 1.0837, Train Accuracy: 0.3867, Val Loss: 1.0795, Val Accuracy: 0.3867\n", + "===== Epoch 983/2000 =====\n", + "No improvement in Val ROC AUC for 152 epoch(s). Best is 0.5935. Train Loss: 1.0826, Train Accuracy: 0.3890, Val Loss: 1.0930, Val Accuracy: 0.3467\n", + "===== Epoch 984/2000 =====\n", + "No improvement in Val ROC AUC for 153 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3867, Val Loss: 1.0858, Val Accuracy: 0.3600\n", + "===== Epoch 985/2000 =====\n", + "No improvement in Val ROC AUC for 154 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3914, Val Loss: 1.0908, Val Accuracy: 0.3778\n", + "===== Epoch 986/2000 =====\n", + "No improvement in Val ROC AUC for 155 epoch(s). Best is 0.5935. Train Loss: 1.0860, Train Accuracy: 0.3765, Val Loss: 1.1066, Val Accuracy: 0.3289\n", + "===== Epoch 987/2000 =====\n", + "No improvement in Val ROC AUC for 156 epoch(s). Best is 0.5935. Train Loss: 1.0796, Train Accuracy: 0.4008, Val Loss: 1.0935, Val Accuracy: 0.3911\n", + "===== Epoch 988/2000 =====\n", + "No improvement in Val ROC AUC for 157 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3945, Val Loss: 1.1005, Val Accuracy: 0.3511\n", + "===== Epoch 989/2000 =====\n", + "No improvement in Val ROC AUC for 158 epoch(s). Best is 0.5935. Train Loss: 1.0835, Train Accuracy: 0.3882, Val Loss: 1.1158, Val Accuracy: 0.3333\n", + "===== Epoch 990/2000 =====\n", + "No improvement in Val ROC AUC for 159 epoch(s). Best is 0.5935. Train Loss: 1.0878, Train Accuracy: 0.3843, Val Loss: 1.0759, Val Accuracy: 0.3689\n", + "===== Epoch 991/2000 =====\n", + "No improvement in Val ROC AUC for 160 epoch(s). Best is 0.5935. Train Loss: 1.0893, Train Accuracy: 0.3890, Val Loss: 1.0720, Val Accuracy: 0.4133\n", + "===== Epoch 992/2000 =====\n", + "No improvement in Val ROC AUC for 161 epoch(s). Best is 0.5935. Train Loss: 1.0877, Train Accuracy: 0.3796, Val Loss: 1.1002, Val Accuracy: 0.3244\n", + "===== Epoch 993/2000 =====\n", + "No improvement in Val ROC AUC for 162 epoch(s). Best is 0.5935. Train Loss: 1.0887, Train Accuracy: 0.3773, Val Loss: 1.0881, Val Accuracy: 0.3378\n", + "===== Epoch 994/2000 =====\n", + "No improvement in Val ROC AUC for 163 epoch(s). Best is 0.5935. Train Loss: 1.0763, Train Accuracy: 0.4071, Val Loss: 1.0935, Val Accuracy: 0.3511\n", + "===== Epoch 995/2000 =====\n", + "No improvement in Val ROC AUC for 164 epoch(s). Best is 0.5935. Train Loss: 1.0913, Train Accuracy: 0.3804, Val Loss: 1.0902, Val Accuracy: 0.3422\n", + "===== Epoch 996/2000 =====\n", + "No improvement in Val ROC AUC for 165 epoch(s). Best is 0.5935. Train Loss: 1.0802, Train Accuracy: 0.4031, Val Loss: 1.0864, Val Accuracy: 0.3600\n", + "===== Epoch 997/2000 =====\n", + "No improvement in Val ROC AUC for 166 epoch(s). Best is 0.5935. Train Loss: 1.0844, Train Accuracy: 0.3796, Val Loss: 1.1017, Val Accuracy: 0.3511\n", + "===== Epoch 998/2000 =====\n", + "No improvement in Val ROC AUC for 167 epoch(s). Best is 0.5935. Train Loss: 1.0836, Train Accuracy: 0.3914, Val Loss: 1.1071, Val Accuracy: 0.3644\n", + "===== Epoch 999/2000 =====\n", + "No improvement in Val ROC AUC for 168 epoch(s). Best is 0.5935. Train Loss: 1.0848, Train Accuracy: 0.3812, Val Loss: 1.0974, Val Accuracy: 0.3467\n", + "===== Epoch 1000/2000 =====\n", + "No improvement in Val ROC AUC for 169 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3945, Val Loss: 1.0976, Val Accuracy: 0.3333\n", + "===== Epoch 1001/2000 =====\n", + "No improvement in Val ROC AUC for 170 epoch(s). Best is 0.5935. Train Loss: 1.0859, Train Accuracy: 0.3851, Val Loss: 1.0827, Val Accuracy: 0.4133\n", + "===== Epoch 1002/2000 =====\n", + "No improvement in Val ROC AUC for 171 epoch(s). Best is 0.5935. Train Loss: 1.0809, Train Accuracy: 0.3945, Val Loss: 1.0822, Val Accuracy: 0.3289\n", + "===== Epoch 1003/2000 =====\n", + "No improvement in Val ROC AUC for 172 epoch(s). Best is 0.5935. Train Loss: 1.0866, Train Accuracy: 0.3984, Val Loss: 1.0925, Val Accuracy: 0.3822\n", + "===== Epoch 1004/2000 =====\n", + "No improvement in Val ROC AUC for 173 epoch(s). Best is 0.5935. Train Loss: 1.0799, Train Accuracy: 0.3843, Val Loss: 1.0827, Val Accuracy: 0.3956\n", + "===== Epoch 1005/2000 =====\n", + "No improvement in Val ROC AUC for 174 epoch(s). Best is 0.5935. Train Loss: 1.0906, Train Accuracy: 0.3890, Val Loss: 1.0902, Val Accuracy: 0.3644\n", + "===== Epoch 1006/2000 =====\n", + "No improvement in Val ROC AUC for 175 epoch(s). Best is 0.5935. Train Loss: 1.0899, Train Accuracy: 0.3710, Val Loss: 1.0886, Val Accuracy: 0.3600\n", + "===== Epoch 1007/2000 =====\n", + "No improvement in Val ROC AUC for 176 epoch(s). Best is 0.5935. Train Loss: 1.0764, Train Accuracy: 0.4055, Val Loss: 1.0987, Val Accuracy: 0.3422\n", + "===== Epoch 1008/2000 =====\n", + "No improvement in Val ROC AUC for 177 epoch(s). Best is 0.5935. Train Loss: 1.0719, Train Accuracy: 0.4180, Val Loss: 1.1004, Val Accuracy: 0.3289\n", + "===== Epoch 1009/2000 =====\n", + "No improvement in Val ROC AUC for 178 epoch(s). Best is 0.5935. Train Loss: 1.0872, Train Accuracy: 0.3835, Val Loss: 1.0955, Val Accuracy: 0.3600\n", + "===== Epoch 1010/2000 =====\n", + "No improvement in Val ROC AUC for 179 epoch(s). Best is 0.5935. Train Loss: 1.0759, Train Accuracy: 0.3945, Val Loss: 1.0957, Val Accuracy: 0.3689\n", + "===== Epoch 1011/2000 =====\n", + "No improvement in Val ROC AUC for 180 epoch(s). Best is 0.5935. Train Loss: 1.0754, Train Accuracy: 0.4086, Val Loss: 1.0950, Val Accuracy: 0.3378\n", + "===== Epoch 1012/2000 =====\n", + "No improvement in Val ROC AUC for 181 epoch(s). Best is 0.5935. Train Loss: 1.0841, Train Accuracy: 0.3953, Val Loss: 1.0865, Val Accuracy: 0.3911\n", + "===== Epoch 1013/2000 =====\n", + "No improvement in Val ROC AUC for 182 epoch(s). Best is 0.5935. Train Loss: 1.0843, Train Accuracy: 0.3945, Val Loss: 1.1001, Val Accuracy: 0.3467\n", + "===== Epoch 1014/2000 =====\n", + "No improvement in Val ROC AUC for 183 epoch(s). Best is 0.5935. Train Loss: 1.0878, Train Accuracy: 0.3780, Val Loss: 1.0765, Val Accuracy: 0.4044\n", + "===== Epoch 1015/2000 =====\n", + "No improvement in Val ROC AUC for 184 epoch(s). Best is 0.5935. Train Loss: 1.0833, Train Accuracy: 0.3945, Val Loss: 1.0863, Val Accuracy: 0.3644\n", + "===== Epoch 1016/2000 =====\n", + "No improvement in Val ROC AUC for 185 epoch(s). Best is 0.5935. Train Loss: 1.0814, Train Accuracy: 0.3820, Val Loss: 1.0750, Val Accuracy: 0.3956\n", + "===== Epoch 1017/2000 =====\n", + "No improvement in Val ROC AUC for 186 epoch(s). Best is 0.5935. Train Loss: 1.0854, Train Accuracy: 0.3749, Val Loss: 1.0967, Val Accuracy: 0.3467\n", + "===== Epoch 1018/2000 =====\n", + "No improvement in Val ROC AUC for 187 epoch(s). Best is 0.5935. Train Loss: 1.0824, Train Accuracy: 0.3859, Val Loss: 1.0813, Val Accuracy: 0.3778\n", + "===== Epoch 1019/2000 =====\n", + "No improvement in Val ROC AUC for 188 epoch(s). Best is 0.5935. Train Loss: 1.0840, Train Accuracy: 0.4016, Val Loss: 1.0935, Val Accuracy: 0.3822\n", + "===== Epoch 1020/2000 =====\n", + "No improvement in Val ROC AUC for 189 epoch(s). Best is 0.5935. Train Loss: 1.0851, Train Accuracy: 0.3969, Val Loss: 1.0948, Val Accuracy: 0.3511\n", + "===== Epoch 1021/2000 =====\n", + "New best model saved with Val ROC AUC: 0.5966, Train Loss: 1.0788, Train Accuracy: 0.3984, Val Loss: 1.0733, Val Accuracy: 0.4089\n", + "===== Epoch 1022/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.5966. Train Loss: 1.0778, Train Accuracy: 0.4063, Val Loss: 1.0818, Val Accuracy: 0.3778\n", + "===== Epoch 1023/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.5966. Train Loss: 1.0779, Train Accuracy: 0.3953, Val Loss: 1.0938, Val Accuracy: 0.3556\n", + "===== Epoch 1024/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.5966. Train Loss: 1.0884, Train Accuracy: 0.3678, Val Loss: 1.0874, Val Accuracy: 0.3556\n", + "===== Epoch 1025/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.5966. Train Loss: 1.0781, Train Accuracy: 0.3976, Val Loss: 1.0954, Val Accuracy: 0.3733\n", + "===== Epoch 1026/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.5966. Train Loss: 1.0794, Train Accuracy: 0.4039, Val Loss: 1.0883, Val Accuracy: 0.3689\n", + "===== Epoch 1027/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.5966. Train Loss: 1.0785, Train Accuracy: 0.4016, Val Loss: 1.0805, Val Accuracy: 0.3511\n", + "===== Epoch 1028/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.5966. Train Loss: 1.0752, Train Accuracy: 0.4125, Val Loss: 1.1025, Val Accuracy: 0.3333\n", + "===== Epoch 1029/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.5966. Train Loss: 1.0752, Train Accuracy: 0.4039, Val Loss: 1.0929, Val Accuracy: 0.3778\n", + "===== Epoch 1030/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.5966. Train Loss: 1.0756, Train Accuracy: 0.4071, Val Loss: 1.0807, Val Accuracy: 0.3911\n", + "===== Epoch 1031/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.5966. Train Loss: 1.0807, Train Accuracy: 0.3937, Val Loss: 1.0954, Val Accuracy: 0.3511\n", + "===== Epoch 1032/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.5966. Train Loss: 1.0775, Train Accuracy: 0.4180, Val Loss: 1.0795, Val Accuracy: 0.3911\n", + "===== Epoch 1033/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6021, Train Loss: 1.0804, Train Accuracy: 0.4024, Val Loss: 1.0655, Val Accuracy: 0.4356\n", + "===== Epoch 1034/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6035, Train Loss: 1.0756, Train Accuracy: 0.4008, Val Loss: 1.0804, Val Accuracy: 0.3822\n", + "===== Epoch 1035/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6035. Train Loss: 1.0833, Train Accuracy: 0.3875, Val Loss: 1.0901, Val Accuracy: 0.3644\n", + "===== Epoch 1036/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6035. Train Loss: 1.0822, Train Accuracy: 0.3890, Val Loss: 1.0817, Val Accuracy: 0.4000\n", + "===== Epoch 1037/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6035. Train Loss: 1.0719, Train Accuracy: 0.4125, Val Loss: 1.0886, Val Accuracy: 0.3733\n", + "===== Epoch 1038/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6035. Train Loss: 1.0845, Train Accuracy: 0.3890, Val Loss: 1.1043, Val Accuracy: 0.3511\n", + "===== Epoch 1039/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6035. Train Loss: 1.0835, Train Accuracy: 0.3835, Val Loss: 1.0917, Val Accuracy: 0.3644\n", + "===== Epoch 1040/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6035. Train Loss: 1.0781, Train Accuracy: 0.3976, Val Loss: 1.0993, Val Accuracy: 0.3511\n", + "===== Epoch 1041/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6035. Train Loss: 1.0779, Train Accuracy: 0.3961, Val Loss: 1.0897, Val Accuracy: 0.3511\n", + "===== Epoch 1042/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6035. Train Loss: 1.0764, Train Accuracy: 0.3961, Val Loss: 1.0885, Val Accuracy: 0.3911\n", + "===== Epoch 1043/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6035. Train Loss: 1.0733, Train Accuracy: 0.4031, Val Loss: 1.0762, Val Accuracy: 0.3822\n", + "===== Epoch 1044/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6035. Train Loss: 1.0764, Train Accuracy: 0.4078, Val Loss: 1.1043, Val Accuracy: 0.3600\n", + "===== Epoch 1045/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6035. Train Loss: 1.0791, Train Accuracy: 0.3875, Val Loss: 1.0847, Val Accuracy: 0.3689\n", + "===== Epoch 1046/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6035. Train Loss: 1.0763, Train Accuracy: 0.4196, Val Loss: 1.1063, Val Accuracy: 0.3289\n", + "===== Epoch 1047/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6035. Train Loss: 1.0754, Train Accuracy: 0.4102, Val Loss: 1.0850, Val Accuracy: 0.3867\n", + "===== Epoch 1048/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6035. Train Loss: 1.0803, Train Accuracy: 0.3898, Val Loss: 1.1078, Val Accuracy: 0.3156\n", + "===== Epoch 1049/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6035. Train Loss: 1.0731, Train Accuracy: 0.4086, Val Loss: 1.0838, Val Accuracy: 0.3644\n", + "===== Epoch 1050/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6035. Train Loss: 1.0723, Train Accuracy: 0.4102, Val Loss: 1.0938, Val Accuracy: 0.3644\n", + "===== Epoch 1051/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6035. Train Loss: 1.0747, Train Accuracy: 0.3937, Val Loss: 1.0881, Val Accuracy: 0.3733\n", + "===== Epoch 1052/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6035. Train Loss: 1.0815, Train Accuracy: 0.3898, Val Loss: 1.0939, Val Accuracy: 0.3600\n", + "===== Epoch 1053/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6035. Train Loss: 1.0758, Train Accuracy: 0.4133, Val Loss: 1.0873, Val Accuracy: 0.3956\n", + "===== Epoch 1054/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6035. Train Loss: 1.0816, Train Accuracy: 0.3843, Val Loss: 1.0859, Val Accuracy: 0.3689\n", + "===== Epoch 1055/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6035. Train Loss: 1.0749, Train Accuracy: 0.3929, Val Loss: 1.0844, Val Accuracy: 0.3867\n", + "===== Epoch 1056/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6035. Train Loss: 1.0847, Train Accuracy: 0.4063, Val Loss: 1.1015, Val Accuracy: 0.3467\n", + "===== Epoch 1057/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6035. Train Loss: 1.0816, Train Accuracy: 0.3992, Val Loss: 1.0894, Val Accuracy: 0.3422\n", + "===== Epoch 1058/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6035. Train Loss: 1.0770, Train Accuracy: 0.4000, Val Loss: 1.0884, Val Accuracy: 0.3644\n", + "===== Epoch 1059/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6035. Train Loss: 1.0856, Train Accuracy: 0.3851, Val Loss: 1.0787, Val Accuracy: 0.4444\n", + "===== Epoch 1060/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6035. Train Loss: 1.0709, Train Accuracy: 0.4071, Val Loss: 1.1026, Val Accuracy: 0.3333\n", + "===== Epoch 1061/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6035. Train Loss: 1.0704, Train Accuracy: 0.4063, Val Loss: 1.0945, Val Accuracy: 0.3511\n", + "===== Epoch 1062/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6035. Train Loss: 1.0831, Train Accuracy: 0.3953, Val Loss: 1.0812, Val Accuracy: 0.3911\n", + "===== Epoch 1063/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6035. Train Loss: 1.0735, Train Accuracy: 0.4000, Val Loss: 1.0718, Val Accuracy: 0.4000\n", + "===== Epoch 1064/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6035. Train Loss: 1.0770, Train Accuracy: 0.3969, Val Loss: 1.0889, Val Accuracy: 0.3467\n", + "===== Epoch 1065/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6035. Train Loss: 1.0794, Train Accuracy: 0.4039, Val Loss: 1.0803, Val Accuracy: 0.3778\n", + "===== Epoch 1066/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6035. Train Loss: 1.0797, Train Accuracy: 0.3992, Val Loss: 1.0815, Val Accuracy: 0.3511\n", + "===== Epoch 1067/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6035. Train Loss: 1.0849, Train Accuracy: 0.3906, Val Loss: 1.0610, Val Accuracy: 0.4178\n", + "===== Epoch 1068/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6035. Train Loss: 1.0773, Train Accuracy: 0.4173, Val Loss: 1.0887, Val Accuracy: 0.3644\n", + "===== Epoch 1069/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6035. Train Loss: 1.0847, Train Accuracy: 0.3898, Val Loss: 1.0863, Val Accuracy: 0.3689\n", + "===== Epoch 1070/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6035. Train Loss: 1.0815, Train Accuracy: 0.3953, Val Loss: 1.0940, Val Accuracy: 0.3600\n", + "===== Epoch 1071/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6035. Train Loss: 1.0768, Train Accuracy: 0.3992, Val Loss: 1.0778, Val Accuracy: 0.4133\n", + "===== Epoch 1072/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6035. Train Loss: 1.0858, Train Accuracy: 0.3945, Val Loss: 1.0927, Val Accuracy: 0.3600\n", + "===== Epoch 1073/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6035. Train Loss: 1.0782, Train Accuracy: 0.3898, Val Loss: 1.0958, Val Accuracy: 0.3467\n", + "===== Epoch 1074/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6035. Train Loss: 1.0760, Train Accuracy: 0.4024, Val Loss: 1.0684, Val Accuracy: 0.4178\n", + "===== Epoch 1075/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6035. Train Loss: 1.0765, Train Accuracy: 0.4055, Val Loss: 1.1068, Val Accuracy: 0.3244\n", + "===== Epoch 1076/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6035. Train Loss: 1.0744, Train Accuracy: 0.3945, Val Loss: 1.0905, Val Accuracy: 0.3644\n", + "===== Epoch 1077/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6035. Train Loss: 1.0782, Train Accuracy: 0.4094, Val Loss: 1.0762, Val Accuracy: 0.4000\n", + "===== Epoch 1078/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6035. Train Loss: 1.0773, Train Accuracy: 0.4078, Val Loss: 1.0858, Val Accuracy: 0.3556\n", + "===== Epoch 1079/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6035. Train Loss: 1.0811, Train Accuracy: 0.4024, Val Loss: 1.0770, Val Accuracy: 0.3511\n", + "===== Epoch 1080/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6035. Train Loss: 1.0805, Train Accuracy: 0.3945, Val Loss: 1.0826, Val Accuracy: 0.4000\n", + "===== Epoch 1081/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6035. Train Loss: 1.0830, Train Accuracy: 0.3961, Val Loss: 1.0947, Val Accuracy: 0.3511\n", + "===== Epoch 1082/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6035. Train Loss: 1.0851, Train Accuracy: 0.3859, Val Loss: 1.0866, Val Accuracy: 0.3556\n", + "===== Epoch 1083/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6035. Train Loss: 1.0795, Train Accuracy: 0.3788, Val Loss: 1.0796, Val Accuracy: 0.3822\n", + "===== Epoch 1084/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6071, Train Loss: 1.0805, Train Accuracy: 0.4039, Val Loss: 1.0716, Val Accuracy: 0.4222\n", + "===== Epoch 1085/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6071. Train Loss: 1.0827, Train Accuracy: 0.4000, Val Loss: 1.0803, Val Accuracy: 0.3778\n", + "===== Epoch 1086/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6071. Train Loss: 1.0867, Train Accuracy: 0.3718, Val Loss: 1.1041, Val Accuracy: 0.3244\n", + "===== Epoch 1087/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6071. Train Loss: 1.0770, Train Accuracy: 0.4071, Val Loss: 1.0837, Val Accuracy: 0.3733\n", + "===== Epoch 1088/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6071. Train Loss: 1.0743, Train Accuracy: 0.4188, Val Loss: 1.1020, Val Accuracy: 0.3600\n", + "===== Epoch 1089/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6071. Train Loss: 1.0876, Train Accuracy: 0.3686, Val Loss: 1.0848, Val Accuracy: 0.4000\n", + "===== Epoch 1090/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6071. Train Loss: 1.0762, Train Accuracy: 0.4110, Val Loss: 1.0661, Val Accuracy: 0.3956\n", + "===== Epoch 1091/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6174, Train Loss: 1.0819, Train Accuracy: 0.3937, Val Loss: 1.0816, Val Accuracy: 0.4044\n", + "===== Epoch 1092/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6174. Train Loss: 1.0780, Train Accuracy: 0.3890, Val Loss: 1.0912, Val Accuracy: 0.3467\n", + "===== Epoch 1093/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6174. Train Loss: 1.0776, Train Accuracy: 0.4016, Val Loss: 1.1045, Val Accuracy: 0.3422\n", + "===== Epoch 1094/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6174. Train Loss: 1.0787, Train Accuracy: 0.4000, Val Loss: 1.0726, Val Accuracy: 0.4178\n", + "===== Epoch 1095/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6174. Train Loss: 1.0799, Train Accuracy: 0.4078, Val Loss: 1.1013, Val Accuracy: 0.3244\n", + "===== Epoch 1096/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6174. Train Loss: 1.0777, Train Accuracy: 0.4008, Val Loss: 1.0876, Val Accuracy: 0.3778\n", + "===== Epoch 1097/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4141, Val Loss: 1.0875, Val Accuracy: 0.4000\n", + "===== Epoch 1098/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6174. Train Loss: 1.0792, Train Accuracy: 0.3937, Val Loss: 1.0923, Val Accuracy: 0.3644\n", + "===== Epoch 1099/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6174. Train Loss: 1.0647, Train Accuracy: 0.4204, Val Loss: 1.0655, Val Accuracy: 0.4222\n", + "===== Epoch 1100/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6174. Train Loss: 1.0832, Train Accuracy: 0.4008, Val Loss: 1.0790, Val Accuracy: 0.4000\n", + "===== Epoch 1101/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6174. Train Loss: 1.0842, Train Accuracy: 0.3929, Val Loss: 1.0878, Val Accuracy: 0.3644\n", + "===== Epoch 1102/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6174. Train Loss: 1.0759, Train Accuracy: 0.3976, Val Loss: 1.0850, Val Accuracy: 0.3600\n", + "===== Epoch 1103/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6174. Train Loss: 1.0815, Train Accuracy: 0.4055, Val Loss: 1.0933, Val Accuracy: 0.3689\n", + "===== Epoch 1104/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6174. Train Loss: 1.0762, Train Accuracy: 0.4016, Val Loss: 1.0631, Val Accuracy: 0.4222\n", + "===== Epoch 1105/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6174. Train Loss: 1.0775, Train Accuracy: 0.4000, Val Loss: 1.0897, Val Accuracy: 0.3956\n", + "===== Epoch 1106/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.4063, Val Loss: 1.0975, Val Accuracy: 0.3333\n", + "===== Epoch 1107/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6174. Train Loss: 1.0703, Train Accuracy: 0.4157, Val Loss: 1.0932, Val Accuracy: 0.3467\n", + "===== Epoch 1108/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.4149, Val Loss: 1.0803, Val Accuracy: 0.4044\n", + "===== Epoch 1109/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6174. Train Loss: 1.0786, Train Accuracy: 0.4078, Val Loss: 1.0849, Val Accuracy: 0.3822\n", + "===== Epoch 1110/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6174. Train Loss: 1.0688, Train Accuracy: 0.4345, Val Loss: 1.0870, Val Accuracy: 0.3911\n", + "===== Epoch 1111/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6174. Train Loss: 1.0718, Train Accuracy: 0.3992, Val Loss: 1.0736, Val Accuracy: 0.3644\n", + "===== Epoch 1112/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6174. Train Loss: 1.0771, Train Accuracy: 0.4078, Val Loss: 1.0702, Val Accuracy: 0.4044\n", + "===== Epoch 1113/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6174. Train Loss: 1.0772, Train Accuracy: 0.4078, Val Loss: 1.0912, Val Accuracy: 0.3644\n", + "===== Epoch 1114/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6174. Train Loss: 1.0772, Train Accuracy: 0.3796, Val Loss: 1.0800, Val Accuracy: 0.4044\n", + "===== Epoch 1115/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6174. Train Loss: 1.0779, Train Accuracy: 0.4102, Val Loss: 1.0891, Val Accuracy: 0.3378\n", + "===== Epoch 1116/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6174. Train Loss: 1.0749, Train Accuracy: 0.3969, Val Loss: 1.0801, Val Accuracy: 0.4044\n", + "===== Epoch 1117/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6174. Train Loss: 1.0777, Train Accuracy: 0.4102, Val Loss: 1.0773, Val Accuracy: 0.3867\n", + "===== Epoch 1118/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6174. Train Loss: 1.0751, Train Accuracy: 0.4000, Val Loss: 1.0809, Val Accuracy: 0.3911\n", + "===== Epoch 1119/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6174. Train Loss: 1.0702, Train Accuracy: 0.4133, Val Loss: 1.0933, Val Accuracy: 0.3778\n", + "===== Epoch 1120/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6174. Train Loss: 1.0841, Train Accuracy: 0.3953, Val Loss: 1.0921, Val Accuracy: 0.3556\n", + "===== Epoch 1121/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6174. Train Loss: 1.0750, Train Accuracy: 0.4008, Val Loss: 1.0661, Val Accuracy: 0.4044\n", + "===== Epoch 1122/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6174. Train Loss: 1.0727, Train Accuracy: 0.4047, Val Loss: 1.0651, Val Accuracy: 0.3911\n", + "===== Epoch 1123/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.6174. Train Loss: 1.0727, Train Accuracy: 0.3961, Val Loss: 1.0832, Val Accuracy: 0.3422\n", + "===== Epoch 1124/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.6174. Train Loss: 1.0737, Train Accuracy: 0.4039, Val Loss: 1.0787, Val Accuracy: 0.3689\n", + "===== Epoch 1125/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.6174. Train Loss: 1.0816, Train Accuracy: 0.3859, Val Loss: 1.0898, Val Accuracy: 0.3822\n", + "===== Epoch 1126/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.6174. Train Loss: 1.0655, Train Accuracy: 0.4212, Val Loss: 1.0533, Val Accuracy: 0.3956\n", + "===== Epoch 1127/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.6174. Train Loss: 1.0657, Train Accuracy: 0.4267, Val Loss: 1.0732, Val Accuracy: 0.4267\n", + "===== Epoch 1128/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.6174. Train Loss: 1.0720, Train Accuracy: 0.4086, Val Loss: 1.0653, Val Accuracy: 0.4178\n", + "===== Epoch 1129/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.6174. Train Loss: 1.0655, Train Accuracy: 0.4251, Val Loss: 1.0929, Val Accuracy: 0.3467\n", + "===== Epoch 1130/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.6174. Train Loss: 1.0677, Train Accuracy: 0.4165, Val Loss: 1.0849, Val Accuracy: 0.3378\n", + "===== Epoch 1131/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.6174. Train Loss: 1.0734, Train Accuracy: 0.4000, Val Loss: 1.0613, Val Accuracy: 0.4044\n", + "===== Epoch 1132/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.6174. Train Loss: 1.0695, Train Accuracy: 0.4008, Val Loss: 1.0869, Val Accuracy: 0.3600\n", + "===== Epoch 1133/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.6174. Train Loss: 1.0671, Train Accuracy: 0.4235, Val Loss: 1.0806, Val Accuracy: 0.4356\n", + "===== Epoch 1134/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.6174. Train Loss: 1.0720, Train Accuracy: 0.3929, Val Loss: 1.0856, Val Accuracy: 0.3778\n", + "===== Epoch 1135/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.6174. Train Loss: 1.0670, Train Accuracy: 0.4157, Val Loss: 1.0706, Val Accuracy: 0.3956\n", + "===== Epoch 1136/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.6174. Train Loss: 1.0702, Train Accuracy: 0.4196, Val Loss: 1.0961, Val Accuracy: 0.3156\n", + "===== Epoch 1137/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.6174. Train Loss: 1.0652, Train Accuracy: 0.4094, Val Loss: 1.0716, Val Accuracy: 0.4133\n", + "===== Epoch 1138/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.6174. Train Loss: 1.0679, Train Accuracy: 0.4267, Val Loss: 1.0718, Val Accuracy: 0.3822\n", + "===== Epoch 1139/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.6174. Train Loss: 1.0711, Train Accuracy: 0.4031, Val Loss: 1.0839, Val Accuracy: 0.3956\n", + "===== Epoch 1140/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.6174. Train Loss: 1.0758, Train Accuracy: 0.3992, Val Loss: 1.0638, Val Accuracy: 0.4178\n", + "===== Epoch 1141/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.6174. Train Loss: 1.0693, Train Accuracy: 0.4094, Val Loss: 1.0749, Val Accuracy: 0.3867\n", + "===== Epoch 1142/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.6174. Train Loss: 1.0758, Train Accuracy: 0.3976, Val Loss: 1.0816, Val Accuracy: 0.3867\n", + "===== Epoch 1143/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4204, Val Loss: 1.0794, Val Accuracy: 0.3689\n", + "===== Epoch 1144/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.6174. Train Loss: 1.0633, Train Accuracy: 0.4384, Val Loss: 1.0656, Val Accuracy: 0.4089\n", + "===== Epoch 1145/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.6174. Train Loss: 1.0735, Train Accuracy: 0.3984, Val Loss: 1.0787, Val Accuracy: 0.3822\n", + "===== Epoch 1146/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.6174. Train Loss: 1.0691, Train Accuracy: 0.4110, Val Loss: 1.0653, Val Accuracy: 0.4044\n", + "===== Epoch 1147/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.6174. Train Loss: 1.0678, Train Accuracy: 0.4196, Val Loss: 1.0764, Val Accuracy: 0.4044\n", + "===== Epoch 1148/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.6174. Train Loss: 1.0713, Train Accuracy: 0.3992, Val Loss: 1.0987, Val Accuracy: 0.3733\n", + "===== Epoch 1149/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.6174. Train Loss: 1.0760, Train Accuracy: 0.3953, Val Loss: 1.0923, Val Accuracy: 0.3911\n", + "===== Epoch 1150/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.6174. Train Loss: 1.0661, Train Accuracy: 0.4008, Val Loss: 1.0730, Val Accuracy: 0.4000\n", + "===== Epoch 1151/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.6174. Train Loss: 1.0733, Train Accuracy: 0.4102, Val Loss: 1.0767, Val Accuracy: 0.3822\n", + "===== Epoch 1152/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.6174. Train Loss: 1.0757, Train Accuracy: 0.3898, Val Loss: 1.0579, Val Accuracy: 0.4000\n", + "===== Epoch 1153/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.6174. Train Loss: 1.0724, Train Accuracy: 0.4110, Val Loss: 1.0858, Val Accuracy: 0.3778\n", + "===== Epoch 1154/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.6174. Train Loss: 1.0736, Train Accuracy: 0.4078, Val Loss: 1.0819, Val Accuracy: 0.3867\n", + "===== Epoch 1155/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.6174. Train Loss: 1.0684, Train Accuracy: 0.4031, Val Loss: 1.0921, Val Accuracy: 0.3600\n", + "===== Epoch 1156/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4063, Val Loss: 1.0861, Val Accuracy: 0.3911\n", + "===== Epoch 1157/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4110, Val Loss: 1.0825, Val Accuracy: 0.3778\n", + "===== Epoch 1158/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.6174. Train Loss: 1.0574, Train Accuracy: 0.4329, Val Loss: 1.0758, Val Accuracy: 0.3511\n", + "===== Epoch 1159/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.6174. Train Loss: 1.0641, Train Accuracy: 0.4227, Val Loss: 1.0655, Val Accuracy: 0.4178\n", + "===== Epoch 1160/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.6174. Train Loss: 1.0780, Train Accuracy: 0.4071, Val Loss: 1.0599, Val Accuracy: 0.4044\n", + "===== Epoch 1161/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.6174. Train Loss: 1.0767, Train Accuracy: 0.3945, Val Loss: 1.0969, Val Accuracy: 0.3556\n", + "===== Epoch 1162/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4133, Val Loss: 1.0697, Val Accuracy: 0.3600\n", + "===== Epoch 1163/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.6174. Train Loss: 1.0715, Train Accuracy: 0.4016, Val Loss: 1.0934, Val Accuracy: 0.3733\n", + "===== Epoch 1164/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.6174. Train Loss: 1.0681, Train Accuracy: 0.4102, Val Loss: 1.0784, Val Accuracy: 0.3822\n", + "===== Epoch 1165/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.6174. Train Loss: 1.0749, Train Accuracy: 0.3929, Val Loss: 1.0814, Val Accuracy: 0.3333\n", + "===== Epoch 1166/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.6174. Train Loss: 1.0634, Train Accuracy: 0.4337, Val Loss: 1.0820, Val Accuracy: 0.3733\n", + "===== Epoch 1167/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.6174. Train Loss: 1.0684, Train Accuracy: 0.4220, Val Loss: 1.0862, Val Accuracy: 0.3733\n", + "===== Epoch 1168/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.6174. Train Loss: 1.0678, Train Accuracy: 0.4110, Val Loss: 1.0974, Val Accuracy: 0.3422\n", + "===== Epoch 1169/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.6174. Train Loss: 1.0700, Train Accuracy: 0.4071, Val Loss: 1.0812, Val Accuracy: 0.3733\n", + "===== Epoch 1170/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.6174. Train Loss: 1.0679, Train Accuracy: 0.4071, Val Loss: 1.1011, Val Accuracy: 0.3467\n", + "===== Epoch 1171/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.6174. Train Loss: 1.0667, Train Accuracy: 0.4141, Val Loss: 1.0860, Val Accuracy: 0.3956\n", + "===== Epoch 1172/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.6174. Train Loss: 1.0723, Train Accuracy: 0.3937, Val Loss: 1.0757, Val Accuracy: 0.3911\n", + "===== Epoch 1173/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.6174. Train Loss: 1.0729, Train Accuracy: 0.4094, Val Loss: 1.0816, Val Accuracy: 0.3600\n", + "===== Epoch 1174/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.6174. Train Loss: 1.0648, Train Accuracy: 0.4180, Val Loss: 1.0946, Val Accuracy: 0.3822\n", + "===== Epoch 1175/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.6174. Train Loss: 1.0714, Train Accuracy: 0.4047, Val Loss: 1.1070, Val Accuracy: 0.3644\n", + "===== Epoch 1176/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.6174. Train Loss: 1.0656, Train Accuracy: 0.4204, Val Loss: 1.1045, Val Accuracy: 0.3467\n", + "===== Epoch 1177/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.6174. Train Loss: 1.0742, Train Accuracy: 0.3961, Val Loss: 1.0841, Val Accuracy: 0.3422\n", + "===== Epoch 1178/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.6174. Train Loss: 1.0654, Train Accuracy: 0.4102, Val Loss: 1.0843, Val Accuracy: 0.3867\n", + "===== Epoch 1179/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4016, Val Loss: 1.0697, Val Accuracy: 0.4000\n", + "===== Epoch 1180/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.6174. Train Loss: 1.0603, Train Accuracy: 0.4188, Val Loss: 1.0910, Val Accuracy: 0.3556\n", + "===== Epoch 1181/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.6174. Train Loss: 1.0747, Train Accuracy: 0.3969, Val Loss: 1.0912, Val Accuracy: 0.3867\n", + "===== Epoch 1182/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.6174. Train Loss: 1.0776, Train Accuracy: 0.3906, Val Loss: 1.0669, Val Accuracy: 0.4178\n", + "===== Epoch 1183/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.6174. Train Loss: 1.0844, Train Accuracy: 0.3765, Val Loss: 1.0752, Val Accuracy: 0.3689\n", + "===== Epoch 1184/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.6174. Train Loss: 1.0698, Train Accuracy: 0.4063, Val Loss: 1.0700, Val Accuracy: 0.3822\n", + "===== Epoch 1185/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.6174. Train Loss: 1.0694, Train Accuracy: 0.4306, Val Loss: 1.0710, Val Accuracy: 0.3911\n", + "===== Epoch 1186/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.6174. Train Loss: 1.0630, Train Accuracy: 0.4094, Val Loss: 1.1082, Val Accuracy: 0.3467\n", + "===== Epoch 1187/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.6174. Train Loss: 1.0839, Train Accuracy: 0.3867, Val Loss: 1.0842, Val Accuracy: 0.3822\n", + "===== Epoch 1188/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.6174. Train Loss: 1.0670, Train Accuracy: 0.4173, Val Loss: 1.0756, Val Accuracy: 0.3778\n", + "===== Epoch 1189/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.6174. Train Loss: 1.0695, Train Accuracy: 0.4227, Val Loss: 1.0862, Val Accuracy: 0.3689\n", + "===== Epoch 1190/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.6174. Train Loss: 1.0597, Train Accuracy: 0.4314, Val Loss: 1.0588, Val Accuracy: 0.4311\n", + "===== Epoch 1191/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.6174. Train Loss: 1.0728, Train Accuracy: 0.4118, Val Loss: 1.0942, Val Accuracy: 0.3511\n", + "===== Epoch 1192/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.6174. Train Loss: 1.0801, Train Accuracy: 0.4039, Val Loss: 1.0763, Val Accuracy: 0.3511\n", + "===== Epoch 1193/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.6174. Train Loss: 1.0667, Train Accuracy: 0.3804, Val Loss: 1.0769, Val Accuracy: 0.3867\n", + "===== Epoch 1194/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.6174. Train Loss: 1.0707, Train Accuracy: 0.4259, Val Loss: 1.0842, Val Accuracy: 0.3600\n", + "===== Epoch 1195/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.6174. Train Loss: 1.0759, Train Accuracy: 0.4078, Val Loss: 1.1045, Val Accuracy: 0.3600\n", + "===== Epoch 1196/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.6174. Train Loss: 1.0630, Train Accuracy: 0.4243, Val Loss: 1.0682, Val Accuracy: 0.3511\n", + "===== Epoch 1197/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.6174. Train Loss: 1.0635, Train Accuracy: 0.4071, Val Loss: 1.0976, Val Accuracy: 0.3733\n", + "===== Epoch 1198/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.6174. Train Loss: 1.0681, Train Accuracy: 0.4063, Val Loss: 1.0628, Val Accuracy: 0.3867\n", + "===== Epoch 1199/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.6174. Train Loss: 1.0658, Train Accuracy: 0.4251, Val Loss: 1.0934, Val Accuracy: 0.3956\n", + "===== Epoch 1200/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.6174. Train Loss: 1.0768, Train Accuracy: 0.3945, Val Loss: 1.0619, Val Accuracy: 0.3778\n", + "===== Epoch 1201/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.6174. Train Loss: 1.0746, Train Accuracy: 0.4016, Val Loss: 1.0772, Val Accuracy: 0.3733\n", + "===== Epoch 1202/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.6174. Train Loss: 1.0675, Train Accuracy: 0.4329, Val Loss: 1.0696, Val Accuracy: 0.3911\n", + "===== Epoch 1203/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.6174. Train Loss: 1.0737, Train Accuracy: 0.4047, Val Loss: 1.0564, Val Accuracy: 0.4267\n", + "===== Epoch 1204/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.6174. Train Loss: 1.0662, Train Accuracy: 0.4063, Val Loss: 1.0761, Val Accuracy: 0.3644\n", + "===== Epoch 1205/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.6174. Train Loss: 1.0685, Train Accuracy: 0.4102, Val Loss: 1.0598, Val Accuracy: 0.3644\n", + "===== Epoch 1206/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.6174. Train Loss: 1.0609, Train Accuracy: 0.4110, Val Loss: 1.0757, Val Accuracy: 0.3822\n", + "===== Epoch 1207/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.6174. Train Loss: 1.0626, Train Accuracy: 0.4149, Val Loss: 1.0950, Val Accuracy: 0.3600\n", + "===== Epoch 1208/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.6174. Train Loss: 1.0642, Train Accuracy: 0.4063, Val Loss: 1.0755, Val Accuracy: 0.3822\n", + "===== Epoch 1209/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.6174. Train Loss: 1.0625, Train Accuracy: 0.4227, Val Loss: 1.0673, Val Accuracy: 0.4044\n", + "===== Epoch 1210/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.6174. Train Loss: 1.0692, Train Accuracy: 0.3875, Val Loss: 1.0640, Val Accuracy: 0.4044\n", + "===== Epoch 1211/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.6174. Train Loss: 1.0671, Train Accuracy: 0.4094, Val Loss: 1.0574, Val Accuracy: 0.4222\n", + "===== Epoch 1212/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.6174. Train Loss: 1.0709, Train Accuracy: 0.4063, Val Loss: 1.0652, Val Accuracy: 0.3956\n", + "===== Epoch 1213/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.6174. Train Loss: 1.0755, Train Accuracy: 0.3922, Val Loss: 1.0602, Val Accuracy: 0.4444\n", + "===== Epoch 1214/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.6174. Train Loss: 1.0663, Train Accuracy: 0.4212, Val Loss: 1.0706, Val Accuracy: 0.3689\n", + "===== Epoch 1215/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.6174. Train Loss: 1.0591, Train Accuracy: 0.4133, Val Loss: 1.1195, Val Accuracy: 0.3378\n", + "===== Epoch 1216/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.6174. Train Loss: 1.0712, Train Accuracy: 0.4047, Val Loss: 1.0605, Val Accuracy: 0.3867\n", + "===== Epoch 1217/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.6174. Train Loss: 1.0696, Train Accuracy: 0.4055, Val Loss: 1.0623, Val Accuracy: 0.4089\n", + "===== Epoch 1218/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.6174. Train Loss: 1.0598, Train Accuracy: 0.4282, Val Loss: 1.0772, Val Accuracy: 0.4000\n", + "===== Epoch 1219/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.6174. Train Loss: 1.0668, Train Accuracy: 0.4275, Val Loss: 1.0730, Val Accuracy: 0.3911\n", + "===== Epoch 1220/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6267, Train Loss: 1.0569, Train Accuracy: 0.4431, Val Loss: 1.0457, Val Accuracy: 0.4311\n", + "===== Epoch 1221/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6267. Train Loss: 1.0629, Train Accuracy: 0.4235, Val Loss: 1.0713, Val Accuracy: 0.4044\n", + "===== Epoch 1222/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6267. Train Loss: 1.0485, Train Accuracy: 0.4400, Val Loss: 1.0444, Val Accuracy: 0.4178\n", + "===== Epoch 1223/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6267. Train Loss: 1.0517, Train Accuracy: 0.4439, Val Loss: 1.0611, Val Accuracy: 0.4000\n", + "===== Epoch 1224/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6267. Train Loss: 1.0551, Train Accuracy: 0.4353, Val Loss: 1.0692, Val Accuracy: 0.3644\n", + "===== Epoch 1225/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6267. Train Loss: 1.0576, Train Accuracy: 0.4165, Val Loss: 1.0814, Val Accuracy: 0.3600\n", + "===== Epoch 1226/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6267. Train Loss: 1.0513, Train Accuracy: 0.4337, Val Loss: 1.0849, Val Accuracy: 0.3422\n", + "===== Epoch 1227/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6267. Train Loss: 1.0589, Train Accuracy: 0.4290, Val Loss: 1.0535, Val Accuracy: 0.4133\n", + "===== Epoch 1228/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6267. Train Loss: 1.0582, Train Accuracy: 0.4275, Val Loss: 1.0681, Val Accuracy: 0.4133\n", + "===== Epoch 1229/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6267. Train Loss: 1.0574, Train Accuracy: 0.4290, Val Loss: 1.0690, Val Accuracy: 0.4133\n", + "===== Epoch 1230/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6267. Train Loss: 1.0541, Train Accuracy: 0.4298, Val Loss: 1.1027, Val Accuracy: 0.3778\n", + "===== Epoch 1231/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6267. Train Loss: 1.0564, Train Accuracy: 0.4298, Val Loss: 1.0696, Val Accuracy: 0.3778\n", + "===== Epoch 1232/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6267. Train Loss: 1.0494, Train Accuracy: 0.4400, Val Loss: 1.0392, Val Accuracy: 0.4400\n", + "===== Epoch 1233/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6267. Train Loss: 1.0583, Train Accuracy: 0.4196, Val Loss: 1.0596, Val Accuracy: 0.3911\n", + "===== Epoch 1234/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6267. Train Loss: 1.0622, Train Accuracy: 0.4031, Val Loss: 1.0675, Val Accuracy: 0.4000\n", + "===== Epoch 1235/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6267. Train Loss: 1.0599, Train Accuracy: 0.4078, Val Loss: 1.0627, Val Accuracy: 0.4089\n", + "===== Epoch 1236/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6267. Train Loss: 1.0547, Train Accuracy: 0.4392, Val Loss: 1.0704, Val Accuracy: 0.3867\n", + "===== Epoch 1237/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6267. Train Loss: 1.0552, Train Accuracy: 0.4235, Val Loss: 1.0758, Val Accuracy: 0.4133\n", + "===== Epoch 1238/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6283, Train Loss: 1.0600, Train Accuracy: 0.4125, Val Loss: 1.0499, Val Accuracy: 0.4311\n", + "===== Epoch 1239/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6283. Train Loss: 1.0587, Train Accuracy: 0.4282, Val Loss: 1.0666, Val Accuracy: 0.4178\n", + "===== Epoch 1240/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6283. Train Loss: 1.0550, Train Accuracy: 0.4282, Val Loss: 1.0470, Val Accuracy: 0.4356\n", + "===== Epoch 1241/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6283. Train Loss: 1.0643, Train Accuracy: 0.4173, Val Loss: 1.0572, Val Accuracy: 0.4178\n", + "===== Epoch 1242/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6283. Train Loss: 1.0612, Train Accuracy: 0.4220, Val Loss: 1.0641, Val Accuracy: 0.4178\n", + "===== Epoch 1243/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6283. Train Loss: 1.0583, Train Accuracy: 0.4306, Val Loss: 1.0666, Val Accuracy: 0.4089\n", + "===== Epoch 1244/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6283. Train Loss: 1.0479, Train Accuracy: 0.4533, Val Loss: 1.0832, Val Accuracy: 0.4044\n", + "===== Epoch 1245/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6283. Train Loss: 1.0542, Train Accuracy: 0.4353, Val Loss: 1.0835, Val Accuracy: 0.3911\n", + "===== Epoch 1246/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6283. Train Loss: 1.0605, Train Accuracy: 0.4157, Val Loss: 1.0840, Val Accuracy: 0.4089\n", + "===== Epoch 1247/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6283. Train Loss: 1.0564, Train Accuracy: 0.4204, Val Loss: 1.0704, Val Accuracy: 0.4133\n", + "===== Epoch 1248/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6283. Train Loss: 1.0534, Train Accuracy: 0.4212, Val Loss: 1.0529, Val Accuracy: 0.4222\n", + "===== Epoch 1249/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6283. Train Loss: 1.0518, Train Accuracy: 0.4337, Val Loss: 1.0617, Val Accuracy: 0.3956\n", + "===== Epoch 1250/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6283. Train Loss: 1.0557, Train Accuracy: 0.4290, Val Loss: 1.0783, Val Accuracy: 0.3822\n", + "===== Epoch 1251/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6283. Train Loss: 1.0607, Train Accuracy: 0.4173, Val Loss: 1.0607, Val Accuracy: 0.4133\n", + "===== Epoch 1252/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6283. Train Loss: 1.0494, Train Accuracy: 0.4463, Val Loss: 1.0672, Val Accuracy: 0.4356\n", + "===== Epoch 1253/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6283. Train Loss: 1.0622, Train Accuracy: 0.4071, Val Loss: 1.0551, Val Accuracy: 0.4044\n", + "===== Epoch 1254/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6283. Train Loss: 1.0612, Train Accuracy: 0.4329, Val Loss: 1.0747, Val Accuracy: 0.3600\n", + "===== Epoch 1255/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6283. Train Loss: 1.0557, Train Accuracy: 0.4243, Val Loss: 1.0659, Val Accuracy: 0.3822\n", + "===== Epoch 1256/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6283. Train Loss: 1.0514, Train Accuracy: 0.4408, Val Loss: 1.0674, Val Accuracy: 0.4089\n", + "===== Epoch 1257/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6283. Train Loss: 1.0499, Train Accuracy: 0.4259, Val Loss: 1.0636, Val Accuracy: 0.4578\n", + "===== Epoch 1258/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6283. Train Loss: 1.0559, Train Accuracy: 0.4345, Val Loss: 1.0575, Val Accuracy: 0.4222\n", + "===== Epoch 1259/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6283. Train Loss: 1.0584, Train Accuracy: 0.4125, Val Loss: 1.0615, Val Accuracy: 0.3911\n", + "===== Epoch 1260/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6283. Train Loss: 1.0595, Train Accuracy: 0.4290, Val Loss: 1.0526, Val Accuracy: 0.4267\n", + "===== Epoch 1261/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6283. Train Loss: 1.0574, Train Accuracy: 0.4353, Val Loss: 1.0574, Val Accuracy: 0.3733\n", + "===== Epoch 1262/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6283. Train Loss: 1.0594, Train Accuracy: 0.4322, Val Loss: 1.0598, Val Accuracy: 0.4044\n", + "===== Epoch 1263/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6283. Train Loss: 1.0524, Train Accuracy: 0.4369, Val Loss: 1.0695, Val Accuracy: 0.3911\n", + "===== Epoch 1264/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6283. Train Loss: 1.0538, Train Accuracy: 0.4259, Val Loss: 1.0544, Val Accuracy: 0.3956\n", + "===== Epoch 1265/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6283. Train Loss: 1.0649, Train Accuracy: 0.4141, Val Loss: 1.0470, Val Accuracy: 0.4089\n", + "===== Epoch 1266/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6283. Train Loss: 1.0516, Train Accuracy: 0.4290, Val Loss: 1.0615, Val Accuracy: 0.4089\n", + "===== Epoch 1267/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6283. Train Loss: 1.0574, Train Accuracy: 0.4227, Val Loss: 1.0624, Val Accuracy: 0.3822\n", + "===== Epoch 1268/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6283. Train Loss: 1.0604, Train Accuracy: 0.4086, Val Loss: 1.0690, Val Accuracy: 0.3822\n", + "===== Epoch 1269/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.6283. Train Loss: 1.0558, Train Accuracy: 0.4259, Val Loss: 1.0596, Val Accuracy: 0.3956\n", + "===== Epoch 1270/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6361, Train Loss: 1.0486, Train Accuracy: 0.4298, Val Loss: 1.0385, Val Accuracy: 0.4089\n", + "===== Epoch 1271/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6361. Train Loss: 1.0553, Train Accuracy: 0.4220, Val Loss: 1.0665, Val Accuracy: 0.4178\n", + "===== Epoch 1272/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6361. Train Loss: 1.0523, Train Accuracy: 0.4290, Val Loss: 1.0854, Val Accuracy: 0.3733\n", + "===== Epoch 1273/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6361. Train Loss: 1.0664, Train Accuracy: 0.4180, Val Loss: 1.0699, Val Accuracy: 0.3778\n", + "===== Epoch 1274/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6361. Train Loss: 1.0606, Train Accuracy: 0.4282, Val Loss: 1.0961, Val Accuracy: 0.3733\n", + "===== Epoch 1275/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6361. Train Loss: 1.0610, Train Accuracy: 0.4157, Val Loss: 1.0667, Val Accuracy: 0.4044\n", + "===== Epoch 1276/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6361. Train Loss: 1.0530, Train Accuracy: 0.4353, Val Loss: 1.0648, Val Accuracy: 0.4000\n", + "===== Epoch 1277/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6361. Train Loss: 1.0530, Train Accuracy: 0.4329, Val Loss: 1.0651, Val Accuracy: 0.3911\n", + "===== Epoch 1278/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6361. Train Loss: 1.0602, Train Accuracy: 0.4369, Val Loss: 1.0679, Val Accuracy: 0.4000\n", + "===== Epoch 1279/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6361. Train Loss: 1.0648, Train Accuracy: 0.4157, Val Loss: 1.0384, Val Accuracy: 0.4133\n", + "===== Epoch 1280/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6361. Train Loss: 1.0498, Train Accuracy: 0.4290, Val Loss: 1.0454, Val Accuracy: 0.4267\n", + "===== Epoch 1281/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6361. Train Loss: 1.0660, Train Accuracy: 0.4173, Val Loss: 1.0506, Val Accuracy: 0.4533\n", + "===== Epoch 1282/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6361. Train Loss: 1.0539, Train Accuracy: 0.4306, Val Loss: 1.0822, Val Accuracy: 0.3600\n", + "===== Epoch 1283/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6361. Train Loss: 1.0536, Train Accuracy: 0.4290, Val Loss: 1.0668, Val Accuracy: 0.4089\n", + "===== Epoch 1284/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6425, Train Loss: 1.0676, Train Accuracy: 0.3976, Val Loss: 1.0440, Val Accuracy: 0.4756\n", + "===== Epoch 1285/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6425. Train Loss: 1.0518, Train Accuracy: 0.4369, Val Loss: 1.0736, Val Accuracy: 0.4044\n", + "===== Epoch 1286/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6425. Train Loss: 1.0552, Train Accuracy: 0.4259, Val Loss: 1.0400, Val Accuracy: 0.4711\n", + "===== Epoch 1287/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6425. Train Loss: 1.0565, Train Accuracy: 0.4353, Val Loss: 1.0694, Val Accuracy: 0.4044\n", + "===== Epoch 1288/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6425. Train Loss: 1.0488, Train Accuracy: 0.4282, Val Loss: 1.0309, Val Accuracy: 0.4533\n", + "===== Epoch 1289/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6425. Train Loss: 1.0545, Train Accuracy: 0.4235, Val Loss: 1.1067, Val Accuracy: 0.3378\n", + "===== Epoch 1290/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6425. Train Loss: 1.0674, Train Accuracy: 0.4024, Val Loss: 1.0224, Val Accuracy: 0.4044\n", + "===== Epoch 1291/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6425. Train Loss: 1.0458, Train Accuracy: 0.4424, Val Loss: 1.0955, Val Accuracy: 0.3600\n", + "===== Epoch 1292/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6506, Train Loss: 1.0631, Train Accuracy: 0.4376, Val Loss: 1.0326, Val Accuracy: 0.4578\n", + "===== Epoch 1293/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6506. Train Loss: 1.0600, Train Accuracy: 0.4188, Val Loss: 1.0722, Val Accuracy: 0.3822\n", + "===== Epoch 1294/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6506. Train Loss: 1.0567, Train Accuracy: 0.4431, Val Loss: 1.0532, Val Accuracy: 0.4133\n", + "===== Epoch 1295/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6506. Train Loss: 1.0761, Train Accuracy: 0.3820, Val Loss: 1.0647, Val Accuracy: 0.4089\n", + "===== Epoch 1296/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6506. Train Loss: 1.0597, Train Accuracy: 0.4204, Val Loss: 1.0411, Val Accuracy: 0.4533\n", + "===== Epoch 1297/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6506. Train Loss: 1.0590, Train Accuracy: 0.4196, Val Loss: 1.0536, Val Accuracy: 0.4000\n", + "===== Epoch 1298/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6506. Train Loss: 1.0497, Train Accuracy: 0.4400, Val Loss: 1.0776, Val Accuracy: 0.4000\n", + "===== Epoch 1299/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6506. Train Loss: 1.0523, Train Accuracy: 0.4400, Val Loss: 1.0458, Val Accuracy: 0.4178\n", + "===== Epoch 1300/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6506. Train Loss: 1.0631, Train Accuracy: 0.4133, Val Loss: 1.0609, Val Accuracy: 0.4267\n", + "===== Epoch 1301/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6506. Train Loss: 1.0485, Train Accuracy: 0.4369, Val Loss: 1.0903, Val Accuracy: 0.3689\n", + "===== Epoch 1302/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6506. Train Loss: 1.0501, Train Accuracy: 0.4267, Val Loss: 1.0713, Val Accuracy: 0.4000\n", + "===== Epoch 1303/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6506. Train Loss: 1.0631, Train Accuracy: 0.4243, Val Loss: 1.0525, Val Accuracy: 0.4178\n", + "===== Epoch 1304/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6553, Train Loss: 1.0399, Train Accuracy: 0.4549, Val Loss: 1.0385, Val Accuracy: 0.4400\n", + "===== Epoch 1305/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6553. Train Loss: 1.0387, Train Accuracy: 0.4478, Val Loss: 1.0349, Val Accuracy: 0.4356\n", + "===== Epoch 1306/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6553. Train Loss: 1.0233, Train Accuracy: 0.4698, Val Loss: 1.0448, Val Accuracy: 0.4400\n", + "===== Epoch 1307/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6553. Train Loss: 1.0606, Train Accuracy: 0.4369, Val Loss: 1.0317, Val Accuracy: 0.4444\n", + "===== Epoch 1308/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6553. Train Loss: 1.0449, Train Accuracy: 0.4251, Val Loss: 1.0338, Val Accuracy: 0.4533\n", + "===== Epoch 1309/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6553. Train Loss: 1.0538, Train Accuracy: 0.4314, Val Loss: 1.0628, Val Accuracy: 0.4089\n", + "===== Epoch 1310/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6553. Train Loss: 1.0578, Train Accuracy: 0.4133, Val Loss: 1.0577, Val Accuracy: 0.4089\n", + "===== Epoch 1311/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6553. Train Loss: 1.0432, Train Accuracy: 0.4471, Val Loss: 1.0554, Val Accuracy: 0.4133\n", + "===== Epoch 1312/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6553. Train Loss: 1.0470, Train Accuracy: 0.4549, Val Loss: 1.0418, Val Accuracy: 0.4578\n", + "===== Epoch 1313/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6553. Train Loss: 1.0440, Train Accuracy: 0.4588, Val Loss: 1.0289, Val Accuracy: 0.4444\n", + "===== Epoch 1314/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6553. Train Loss: 1.0352, Train Accuracy: 0.4478, Val Loss: 1.0618, Val Accuracy: 0.3911\n", + "===== Epoch 1315/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6553. Train Loss: 1.0542, Train Accuracy: 0.4188, Val Loss: 1.0600, Val Accuracy: 0.3956\n", + "===== Epoch 1316/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6553. Train Loss: 1.0427, Train Accuracy: 0.4314, Val Loss: 1.0661, Val Accuracy: 0.3911\n", + "===== Epoch 1317/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6553. Train Loss: 1.0367, Train Accuracy: 0.4392, Val Loss: 1.0607, Val Accuracy: 0.4178\n", + "===== Epoch 1318/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6553. Train Loss: 1.0391, Train Accuracy: 0.4275, Val Loss: 1.0648, Val Accuracy: 0.3911\n", + "===== Epoch 1319/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6553. Train Loss: 1.0443, Train Accuracy: 0.4376, Val Loss: 1.0888, Val Accuracy: 0.3556\n", + "===== Epoch 1320/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6553. Train Loss: 1.0415, Train Accuracy: 0.4400, Val Loss: 1.0571, Val Accuracy: 0.4089\n", + "===== Epoch 1321/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6553. Train Loss: 1.0327, Train Accuracy: 0.4478, Val Loss: 1.0296, Val Accuracy: 0.4044\n", + "===== Epoch 1322/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6661, Train Loss: 1.0493, Train Accuracy: 0.4353, Val Loss: 1.0125, Val Accuracy: 0.4933\n", + "===== Epoch 1323/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6661. Train Loss: 1.0396, Train Accuracy: 0.4408, Val Loss: 1.0437, Val Accuracy: 0.4533\n", + "===== Epoch 1324/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6661. Train Loss: 1.0235, Train Accuracy: 0.4455, Val Loss: 1.0331, Val Accuracy: 0.4222\n", + "===== Epoch 1325/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6661. Train Loss: 1.0282, Train Accuracy: 0.4596, Val Loss: 1.0390, Val Accuracy: 0.3911\n", + "===== Epoch 1326/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6772, Train Loss: 1.0274, Train Accuracy: 0.4533, Val Loss: 1.0302, Val Accuracy: 0.4267\n", + "===== Epoch 1327/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6772. Train Loss: 1.0412, Train Accuracy: 0.4463, Val Loss: 1.0425, Val Accuracy: 0.4133\n", + "===== Epoch 1328/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6772. Train Loss: 1.0354, Train Accuracy: 0.4471, Val Loss: 1.0391, Val Accuracy: 0.4800\n", + "===== Epoch 1329/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6772. Train Loss: 1.0311, Train Accuracy: 0.4643, Val Loss: 1.0061, Val Accuracy: 0.4622\n", + "===== Epoch 1330/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6772. Train Loss: 1.0282, Train Accuracy: 0.4525, Val Loss: 1.0423, Val Accuracy: 0.4000\n", + "===== Epoch 1331/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6772. Train Loss: 1.0377, Train Accuracy: 0.4408, Val Loss: 1.0261, Val Accuracy: 0.4089\n", + "===== Epoch 1332/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6772. Train Loss: 1.0164, Train Accuracy: 0.4769, Val Loss: 1.0384, Val Accuracy: 0.4578\n", + "===== Epoch 1333/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6772. Train Loss: 1.0278, Train Accuracy: 0.4408, Val Loss: 1.0100, Val Accuracy: 0.4622\n", + "===== Epoch 1334/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6772. Train Loss: 1.0415, Train Accuracy: 0.4494, Val Loss: 1.0166, Val Accuracy: 0.4667\n", + "===== Epoch 1335/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6772. Train Loss: 1.0231, Train Accuracy: 0.4612, Val Loss: 1.0193, Val Accuracy: 0.4444\n", + "===== Epoch 1336/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6772. Train Loss: 1.0363, Train Accuracy: 0.4478, Val Loss: 1.0066, Val Accuracy: 0.4578\n", + "===== Epoch 1337/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6772. Train Loss: 1.0244, Train Accuracy: 0.4525, Val Loss: 1.0415, Val Accuracy: 0.4356\n", + "===== Epoch 1338/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6772. Train Loss: 1.0331, Train Accuracy: 0.4400, Val Loss: 1.0514, Val Accuracy: 0.4044\n", + "===== Epoch 1339/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6772. Train Loss: 1.0387, Train Accuracy: 0.4439, Val Loss: 1.0490, Val Accuracy: 0.3911\n", + "===== Epoch 1340/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6772. Train Loss: 1.0411, Train Accuracy: 0.4510, Val Loss: 1.0543, Val Accuracy: 0.4222\n", + "===== Epoch 1341/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6772. Train Loss: 1.0318, Train Accuracy: 0.4682, Val Loss: 1.0462, Val Accuracy: 0.4311\n", + "===== Epoch 1342/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6772. Train Loss: 1.0327, Train Accuracy: 0.4447, Val Loss: 1.0310, Val Accuracy: 0.4667\n", + "===== Epoch 1343/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6772. Train Loss: 1.0214, Train Accuracy: 0.4698, Val Loss: 1.0126, Val Accuracy: 0.4756\n", + "===== Epoch 1344/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6772. Train Loss: 1.0418, Train Accuracy: 0.4416, Val Loss: 1.0316, Val Accuracy: 0.4044\n", + "===== Epoch 1345/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6772. Train Loss: 1.0219, Train Accuracy: 0.4659, Val Loss: 1.0483, Val Accuracy: 0.4311\n", + "===== Epoch 1346/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6772. Train Loss: 1.0381, Train Accuracy: 0.4455, Val Loss: 1.0358, Val Accuracy: 0.4311\n", + "===== Epoch 1347/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6772. Train Loss: 1.0360, Train Accuracy: 0.4471, Val Loss: 1.0286, Val Accuracy: 0.4578\n", + "===== Epoch 1348/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6795, Train Loss: 1.0288, Train Accuracy: 0.4533, Val Loss: 1.0155, Val Accuracy: 0.4711\n", + "===== Epoch 1349/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6795. Train Loss: 1.0332, Train Accuracy: 0.4596, Val Loss: 1.0409, Val Accuracy: 0.4222\n", + "===== Epoch 1350/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6795. Train Loss: 1.0281, Train Accuracy: 0.4549, Val Loss: 1.0080, Val Accuracy: 0.4578\n", + "===== Epoch 1351/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6795. Train Loss: 1.0272, Train Accuracy: 0.4533, Val Loss: 1.0373, Val Accuracy: 0.4311\n", + "===== Epoch 1352/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6795. Train Loss: 1.0224, Train Accuracy: 0.4525, Val Loss: 1.0225, Val Accuracy: 0.4711\n", + "===== Epoch 1353/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6795. Train Loss: 1.0206, Train Accuracy: 0.4463, Val Loss: 1.0280, Val Accuracy: 0.4533\n", + "===== Epoch 1354/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6795. Train Loss: 1.0257, Train Accuracy: 0.4667, Val Loss: 0.9936, Val Accuracy: 0.4844\n", + "===== Epoch 1355/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6795. Train Loss: 1.0252, Train Accuracy: 0.4627, Val Loss: 1.0329, Val Accuracy: 0.4444\n", + "===== Epoch 1356/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6795. Train Loss: 1.0259, Train Accuracy: 0.4643, Val Loss: 1.0123, Val Accuracy: 0.4622\n", + "===== Epoch 1357/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6795. Train Loss: 1.0305, Train Accuracy: 0.4659, Val Loss: 1.0257, Val Accuracy: 0.4400\n", + "===== Epoch 1358/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6795. Train Loss: 1.0245, Train Accuracy: 0.4580, Val Loss: 1.0286, Val Accuracy: 0.4356\n", + "===== Epoch 1359/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6795. Train Loss: 1.0303, Train Accuracy: 0.4596, Val Loss: 1.0162, Val Accuracy: 0.4711\n", + "===== Epoch 1360/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6795. Train Loss: 1.0320, Train Accuracy: 0.4541, Val Loss: 1.0343, Val Accuracy: 0.4889\n", + "===== Epoch 1361/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6795. Train Loss: 1.0333, Train Accuracy: 0.4533, Val Loss: 1.0134, Val Accuracy: 0.4889\n", + "===== Epoch 1362/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6795. Train Loss: 1.0284, Train Accuracy: 0.4604, Val Loss: 1.0430, Val Accuracy: 0.4311\n", + "===== Epoch 1363/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6795. Train Loss: 1.0289, Train Accuracy: 0.4651, Val Loss: 1.0245, Val Accuracy: 0.4889\n", + "===== Epoch 1364/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6795. Train Loss: 1.0276, Train Accuracy: 0.4627, Val Loss: 1.0423, Val Accuracy: 0.4622\n", + "===== Epoch 1365/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6795. Train Loss: 1.0297, Train Accuracy: 0.4518, Val Loss: 1.0756, Val Accuracy: 0.4222\n", + "===== Epoch 1366/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6795. Train Loss: 1.0379, Train Accuracy: 0.4478, Val Loss: 1.0792, Val Accuracy: 0.4000\n", + "===== Epoch 1367/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6795. Train Loss: 1.0276, Train Accuracy: 0.4565, Val Loss: 1.0480, Val Accuracy: 0.4089\n", + "===== Epoch 1368/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6795. Train Loss: 1.0244, Train Accuracy: 0.4659, Val Loss: 1.0066, Val Accuracy: 0.4533\n", + "===== Epoch 1369/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6795. Train Loss: 1.0156, Train Accuracy: 0.4714, Val Loss: 1.0382, Val Accuracy: 0.4400\n", + "===== Epoch 1370/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6795. Train Loss: 1.0303, Train Accuracy: 0.4769, Val Loss: 1.0234, Val Accuracy: 0.4311\n", + "===== Epoch 1371/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6795. Train Loss: 1.0284, Train Accuracy: 0.4494, Val Loss: 1.0064, Val Accuracy: 0.4578\n", + "===== Epoch 1372/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6795. Train Loss: 1.0225, Train Accuracy: 0.4549, Val Loss: 1.0246, Val Accuracy: 0.4489\n", + "===== Epoch 1373/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6885, Train Loss: 1.0330, Train Accuracy: 0.4557, Val Loss: 0.9986, Val Accuracy: 0.4800\n", + "===== Epoch 1374/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.6885. Train Loss: 1.0281, Train Accuracy: 0.4486, Val Loss: 1.0424, Val Accuracy: 0.4711\n", + "===== Epoch 1375/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.6885. Train Loss: 1.0319, Train Accuracy: 0.4345, Val Loss: 1.0178, Val Accuracy: 0.4978\n", + "===== Epoch 1376/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.6885. Train Loss: 1.0334, Train Accuracy: 0.4424, Val Loss: 1.0450, Val Accuracy: 0.4400\n", + "===== Epoch 1377/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.6885. Train Loss: 1.0231, Train Accuracy: 0.4635, Val Loss: 1.0256, Val Accuracy: 0.4222\n", + "===== Epoch 1378/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.6885. Train Loss: 1.0209, Train Accuracy: 0.4627, Val Loss: 1.0335, Val Accuracy: 0.4667\n", + "===== Epoch 1379/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.6885. Train Loss: 1.0365, Train Accuracy: 0.4439, Val Loss: 1.0350, Val Accuracy: 0.4356\n", + "===== Epoch 1380/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.6885. Train Loss: 1.0147, Train Accuracy: 0.4651, Val Loss: 1.0337, Val Accuracy: 0.4667\n", + "===== Epoch 1381/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.6885. Train Loss: 1.0333, Train Accuracy: 0.4525, Val Loss: 1.0365, Val Accuracy: 0.4356\n", + "===== Epoch 1382/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.6885. Train Loss: 1.0123, Train Accuracy: 0.4698, Val Loss: 1.0121, Val Accuracy: 0.4667\n", + "===== Epoch 1383/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.6885. Train Loss: 1.0183, Train Accuracy: 0.4745, Val Loss: 1.0209, Val Accuracy: 0.4667\n", + "===== Epoch 1384/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.6885. Train Loss: 1.0152, Train Accuracy: 0.4690, Val Loss: 1.0144, Val Accuracy: 0.4622\n", + "===== Epoch 1385/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.6885. Train Loss: 1.0293, Train Accuracy: 0.4518, Val Loss: 0.9871, Val Accuracy: 0.4667\n", + "===== Epoch 1386/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.6885. Train Loss: 1.0259, Train Accuracy: 0.4667, Val Loss: 0.9969, Val Accuracy: 0.4889\n", + "===== Epoch 1387/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.6885. Train Loss: 1.0050, Train Accuracy: 0.4745, Val Loss: 1.0194, Val Accuracy: 0.4533\n", + "===== Epoch 1388/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.6885. Train Loss: 1.0322, Train Accuracy: 0.4604, Val Loss: 0.9831, Val Accuracy: 0.4800\n", + "===== Epoch 1389/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.6885. Train Loss: 1.0222, Train Accuracy: 0.4557, Val Loss: 1.0933, Val Accuracy: 0.4222\n", + "===== Epoch 1390/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.6885. Train Loss: 1.0048, Train Accuracy: 0.4753, Val Loss: 0.9828, Val Accuracy: 0.5067\n", + "===== Epoch 1391/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.6885. Train Loss: 1.0333, Train Accuracy: 0.4329, Val Loss: 1.0061, Val Accuracy: 0.4533\n", + "===== Epoch 1392/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.6885. Train Loss: 1.0034, Train Accuracy: 0.4698, Val Loss: 1.0344, Val Accuracy: 0.4133\n", + "===== Epoch 1393/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.6885. Train Loss: 1.0139, Train Accuracy: 0.4761, Val Loss: 0.9971, Val Accuracy: 0.4933\n", + "===== Epoch 1394/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.6885. Train Loss: 0.9991, Train Accuracy: 0.4769, Val Loss: 1.0483, Val Accuracy: 0.4444\n", + "===== Epoch 1395/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.6885. Train Loss: 0.9991, Train Accuracy: 0.4918, Val Loss: 1.0160, Val Accuracy: 0.4533\n", + "===== Epoch 1396/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.6885. Train Loss: 1.0236, Train Accuracy: 0.4494, Val Loss: 0.9772, Val Accuracy: 0.4533\n", + "===== Epoch 1397/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.6885. Train Loss: 1.0128, Train Accuracy: 0.4729, Val Loss: 1.0254, Val Accuracy: 0.4356\n", + "===== Epoch 1398/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.6885. Train Loss: 1.0059, Train Accuracy: 0.4761, Val Loss: 0.9892, Val Accuracy: 0.5200\n", + "===== Epoch 1399/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.6885. Train Loss: 1.0260, Train Accuracy: 0.4675, Val Loss: 1.0048, Val Accuracy: 0.4533\n", + "===== Epoch 1400/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.6885. Train Loss: 1.0233, Train Accuracy: 0.4596, Val Loss: 0.9734, Val Accuracy: 0.4800\n", + "===== Epoch 1401/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.6885. Train Loss: 1.0040, Train Accuracy: 0.4776, Val Loss: 1.0126, Val Accuracy: 0.4711\n", + "===== Epoch 1402/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.6885. Train Loss: 0.9989, Train Accuracy: 0.4800, Val Loss: 0.9682, Val Accuracy: 0.5022\n", + "===== Epoch 1403/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.6885. Train Loss: 1.0034, Train Accuracy: 0.4722, Val Loss: 0.9897, Val Accuracy: 0.4889\n", + "===== Epoch 1404/2000 =====\n", + "New best model saved with Val ROC AUC: 0.6975, Train Loss: 1.0061, Train Accuracy: 0.4839, Val Loss: 0.9936, Val Accuracy: 0.4622\n", + "===== Epoch 1405/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7034, Train Loss: 0.9889, Train Accuracy: 0.4980, Val Loss: 0.9906, Val Accuracy: 0.4800\n", + "===== Epoch 1406/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7061, Train Loss: 0.9892, Train Accuracy: 0.4918, Val Loss: 0.9393, Val Accuracy: 0.5111\n", + "===== Epoch 1407/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7061. Train Loss: 1.0068, Train Accuracy: 0.4769, Val Loss: 0.9859, Val Accuracy: 0.4800\n", + "===== Epoch 1408/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7061. Train Loss: 0.9933, Train Accuracy: 0.4792, Val Loss: 0.9946, Val Accuracy: 0.4667\n", + "===== Epoch 1409/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7269, Train Loss: 0.9980, Train Accuracy: 0.4776, Val Loss: 0.9446, Val Accuracy: 0.5333\n", + "===== Epoch 1410/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7269. Train Loss: 0.9819, Train Accuracy: 0.4902, Val Loss: 0.9741, Val Accuracy: 0.4844\n", + "===== Epoch 1411/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7269. Train Loss: 0.9964, Train Accuracy: 0.4855, Val Loss: 0.9710, Val Accuracy: 0.4711\n", + "===== Epoch 1412/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7269. Train Loss: 0.9971, Train Accuracy: 0.4737, Val Loss: 0.9712, Val Accuracy: 0.4711\n", + "===== Epoch 1413/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7269. Train Loss: 0.9820, Train Accuracy: 0.5027, Val Loss: 0.9944, Val Accuracy: 0.5022\n", + "===== Epoch 1414/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7269. Train Loss: 0.9776, Train Accuracy: 0.4918, Val Loss: 0.9409, Val Accuracy: 0.5156\n", + "===== Epoch 1415/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7269. Train Loss: 0.9655, Train Accuracy: 0.5145, Val Loss: 0.9765, Val Accuracy: 0.4711\n", + "===== Epoch 1416/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7269. Train Loss: 0.9754, Train Accuracy: 0.4996, Val Loss: 0.9319, Val Accuracy: 0.5333\n", + "===== Epoch 1417/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7429, Train Loss: 0.9703, Train Accuracy: 0.5067, Val Loss: 0.9401, Val Accuracy: 0.5644\n", + "===== Epoch 1418/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7429. Train Loss: 0.9919, Train Accuracy: 0.4871, Val Loss: 0.9519, Val Accuracy: 0.5156\n", + "===== Epoch 1419/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7429. Train Loss: 0.9721, Train Accuracy: 0.5012, Val Loss: 0.9402, Val Accuracy: 0.5244\n", + "===== Epoch 1420/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7429. Train Loss: 0.9931, Train Accuracy: 0.4957, Val Loss: 0.9495, Val Accuracy: 0.4889\n", + "===== Epoch 1421/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7429. Train Loss: 0.9771, Train Accuracy: 0.4973, Val Loss: 0.9144, Val Accuracy: 0.5333\n", + "===== Epoch 1422/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7429. Train Loss: 0.9678, Train Accuracy: 0.4941, Val Loss: 0.9269, Val Accuracy: 0.5289\n", + "===== Epoch 1423/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7429. Train Loss: 0.9651, Train Accuracy: 0.5051, Val Loss: 0.9225, Val Accuracy: 0.5067\n", + "===== Epoch 1424/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7429. Train Loss: 0.9540, Train Accuracy: 0.5098, Val Loss: 0.9074, Val Accuracy: 0.5378\n", + "===== Epoch 1425/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7429. Train Loss: 0.9748, Train Accuracy: 0.5145, Val Loss: 0.9536, Val Accuracy: 0.4933\n", + "===== Epoch 1426/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7429. Train Loss: 0.9503, Train Accuracy: 0.5216, Val Loss: 0.9282, Val Accuracy: 0.5111\n", + "===== Epoch 1427/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7429. Train Loss: 0.9679, Train Accuracy: 0.5043, Val Loss: 0.9545, Val Accuracy: 0.5022\n", + "===== Epoch 1428/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7429. Train Loss: 0.9591, Train Accuracy: 0.5169, Val Loss: 0.9446, Val Accuracy: 0.5422\n", + "===== Epoch 1429/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7429. Train Loss: 0.9456, Train Accuracy: 0.5192, Val Loss: 0.9476, Val Accuracy: 0.5244\n", + "===== Epoch 1430/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7429. Train Loss: 0.9612, Train Accuracy: 0.5075, Val Loss: 0.9522, Val Accuracy: 0.5333\n", + "===== Epoch 1431/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7429. Train Loss: 0.9620, Train Accuracy: 0.5059, Val Loss: 0.9638, Val Accuracy: 0.4844\n", + "===== Epoch 1432/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7429. Train Loss: 0.9441, Train Accuracy: 0.5129, Val Loss: 0.9702, Val Accuracy: 0.4578\n", + "===== Epoch 1433/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7429. Train Loss: 0.9623, Train Accuracy: 0.5067, Val Loss: 1.0109, Val Accuracy: 0.4400\n", + "===== Epoch 1434/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7429. Train Loss: 0.9523, Train Accuracy: 0.5082, Val Loss: 0.9493, Val Accuracy: 0.4978\n", + "===== Epoch 1435/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7429. Train Loss: 0.9571, Train Accuracy: 0.5067, Val Loss: 0.9102, Val Accuracy: 0.5511\n", + "===== Epoch 1436/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7429. Train Loss: 0.9329, Train Accuracy: 0.5122, Val Loss: 0.9181, Val Accuracy: 0.5111\n", + "===== Epoch 1437/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7429. Train Loss: 0.9584, Train Accuracy: 0.5161, Val Loss: 0.9207, Val Accuracy: 0.5289\n", + "===== Epoch 1438/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7429. Train Loss: 0.9442, Train Accuracy: 0.5153, Val Loss: 0.9369, Val Accuracy: 0.5333\n", + "===== Epoch 1439/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7429. Train Loss: 0.9646, Train Accuracy: 0.5004, Val Loss: 0.9072, Val Accuracy: 0.5378\n", + "===== Epoch 1440/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7429. Train Loss: 0.9425, Train Accuracy: 0.5271, Val Loss: 0.9242, Val Accuracy: 0.5156\n", + "===== Epoch 1441/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7429. Train Loss: 0.9448, Train Accuracy: 0.5075, Val Loss: 0.9632, Val Accuracy: 0.4933\n", + "===== Epoch 1442/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7429. Train Loss: 0.9561, Train Accuracy: 0.4957, Val Loss: 0.8995, Val Accuracy: 0.5067\n", + "===== Epoch 1443/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7429. Train Loss: 0.9324, Train Accuracy: 0.5349, Val Loss: 0.9491, Val Accuracy: 0.4622\n", + "===== Epoch 1444/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7429. Train Loss: 0.9482, Train Accuracy: 0.5216, Val Loss: 0.9529, Val Accuracy: 0.5156\n", + "===== Epoch 1445/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7429. Train Loss: 0.9477, Train Accuracy: 0.5169, Val Loss: 0.9413, Val Accuracy: 0.4667\n", + "===== Epoch 1446/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7429. Train Loss: 0.9568, Train Accuracy: 0.5090, Val Loss: 0.9580, Val Accuracy: 0.5156\n", + "===== Epoch 1447/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7429. Train Loss: 0.9458, Train Accuracy: 0.5239, Val Loss: 0.9441, Val Accuracy: 0.5644\n", + "===== Epoch 1448/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7429. Train Loss: 0.9467, Train Accuracy: 0.5263, Val Loss: 0.9049, Val Accuracy: 0.5422\n", + "===== Epoch 1449/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7429. Train Loss: 0.9408, Train Accuracy: 0.5145, Val Loss: 0.9428, Val Accuracy: 0.4889\n", + "===== Epoch 1450/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7429. Train Loss: 0.9346, Train Accuracy: 0.5388, Val Loss: 0.9185, Val Accuracy: 0.5644\n", + "===== Epoch 1451/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7429. Train Loss: 0.9405, Train Accuracy: 0.5153, Val Loss: 0.8932, Val Accuracy: 0.5244\n", + "===== Epoch 1452/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7429. Train Loss: 0.9680, Train Accuracy: 0.4973, Val Loss: 0.9131, Val Accuracy: 0.5644\n", + "===== Epoch 1453/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7429. Train Loss: 0.9503, Train Accuracy: 0.5263, Val Loss: 0.9336, Val Accuracy: 0.4756\n", + "===== Epoch 1454/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7429. Train Loss: 0.9576, Train Accuracy: 0.5067, Val Loss: 0.8966, Val Accuracy: 0.5644\n", + "===== Epoch 1455/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7429. Train Loss: 0.9368, Train Accuracy: 0.5255, Val Loss: 0.8940, Val Accuracy: 0.5378\n", + "===== Epoch 1456/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7429. Train Loss: 0.9461, Train Accuracy: 0.5271, Val Loss: 0.9397, Val Accuracy: 0.4800\n", + "===== Epoch 1457/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7429. Train Loss: 0.9518, Train Accuracy: 0.5145, Val Loss: 0.9577, Val Accuracy: 0.4889\n", + "===== Epoch 1458/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7429. Train Loss: 0.9656, Train Accuracy: 0.5137, Val Loss: 1.0154, Val Accuracy: 0.4800\n", + "===== Epoch 1459/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7681, Train Loss: 0.9291, Train Accuracy: 0.5231, Val Loss: 0.8546, Val Accuracy: 0.5956\n", + "===== Epoch 1460/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7681. Train Loss: 0.9557, Train Accuracy: 0.5106, Val Loss: 0.9812, Val Accuracy: 0.4622\n", + "===== Epoch 1461/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7681. Train Loss: 0.9268, Train Accuracy: 0.5169, Val Loss: 0.9367, Val Accuracy: 0.5200\n", + "===== Epoch 1462/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7681. Train Loss: 0.9557, Train Accuracy: 0.5004, Val Loss: 0.9442, Val Accuracy: 0.4756\n", + "===== Epoch 1463/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7681. Train Loss: 0.9564, Train Accuracy: 0.5129, Val Loss: 0.9304, Val Accuracy: 0.5156\n", + "===== Epoch 1464/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7681. Train Loss: 0.9438, Train Accuracy: 0.5420, Val Loss: 0.9003, Val Accuracy: 0.5200\n", + "===== Epoch 1465/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7681. Train Loss: 0.9536, Train Accuracy: 0.5192, Val Loss: 0.9595, Val Accuracy: 0.5111\n", + "===== Epoch 1466/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7681. Train Loss: 0.9399, Train Accuracy: 0.5333, Val Loss: 0.9853, Val Accuracy: 0.4400\n", + "===== Epoch 1467/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.7681. Train Loss: 0.9510, Train Accuracy: 0.4933, Val Loss: 0.9506, Val Accuracy: 0.5200\n", + "===== Epoch 1468/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.7681. Train Loss: 0.9567, Train Accuracy: 0.5184, Val Loss: 0.9310, Val Accuracy: 0.5333\n", + "===== Epoch 1469/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.7681. Train Loss: 0.9547, Train Accuracy: 0.5020, Val Loss: 0.9523, Val Accuracy: 0.4667\n", + "===== Epoch 1470/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.7681. Train Loss: 0.9225, Train Accuracy: 0.5302, Val Loss: 0.8997, Val Accuracy: 0.5333\n", + "===== Epoch 1471/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.7681. Train Loss: 0.9334, Train Accuracy: 0.5302, Val Loss: 0.8861, Val Accuracy: 0.5244\n", + "===== Epoch 1472/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.7681. Train Loss: 0.9393, Train Accuracy: 0.5224, Val Loss: 0.9283, Val Accuracy: 0.5200\n", + "===== Epoch 1473/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.7681. Train Loss: 0.9652, Train Accuracy: 0.4918, Val Loss: 0.9093, Val Accuracy: 0.5022\n", + "===== Epoch 1474/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.7681. Train Loss: 0.9478, Train Accuracy: 0.5098, Val Loss: 0.9208, Val Accuracy: 0.4978\n", + "===== Epoch 1475/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.7681. Train Loss: 0.9451, Train Accuracy: 0.5145, Val Loss: 0.9458, Val Accuracy: 0.5333\n", + "===== Epoch 1476/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.7681. Train Loss: 0.9597, Train Accuracy: 0.5067, Val Loss: 0.9958, Val Accuracy: 0.4622\n", + "===== Epoch 1477/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.7681. Train Loss: 0.9495, Train Accuracy: 0.5208, Val Loss: 0.9682, Val Accuracy: 0.5022\n", + "===== Epoch 1478/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.7681. Train Loss: 0.9365, Train Accuracy: 0.5325, Val Loss: 0.9251, Val Accuracy: 0.5067\n", + "===== Epoch 1479/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.7681. Train Loss: 0.9417, Train Accuracy: 0.5255, Val Loss: 0.9105, Val Accuracy: 0.5422\n", + "===== Epoch 1480/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.7681. Train Loss: 0.9409, Train Accuracy: 0.5169, Val Loss: 0.9482, Val Accuracy: 0.5200\n", + "===== Epoch 1481/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.7681. Train Loss: 0.9280, Train Accuracy: 0.5412, Val Loss: 0.8687, Val Accuracy: 0.6000\n", + "===== Epoch 1482/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.7681. Train Loss: 0.9170, Train Accuracy: 0.5255, Val Loss: 0.9184, Val Accuracy: 0.5467\n", + "===== Epoch 1483/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.7681. Train Loss: 0.9462, Train Accuracy: 0.5098, Val Loss: 1.0000, Val Accuracy: 0.4844\n", + "===== Epoch 1484/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.7681. Train Loss: 0.9350, Train Accuracy: 0.5224, Val Loss: 1.0203, Val Accuracy: 0.5022\n", + "===== Epoch 1485/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.7681. Train Loss: 0.9480, Train Accuracy: 0.5208, Val Loss: 0.9776, Val Accuracy: 0.4489\n", + "===== Epoch 1486/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.7681. Train Loss: 0.9845, Train Accuracy: 0.5051, Val Loss: 0.9379, Val Accuracy: 0.5022\n", + "===== Epoch 1487/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.7681. Train Loss: 0.9397, Train Accuracy: 0.5098, Val Loss: 0.9010, Val Accuracy: 0.5556\n", + "===== Epoch 1488/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.7681. Train Loss: 0.9297, Train Accuracy: 0.5169, Val Loss: 0.8816, Val Accuracy: 0.5644\n", + "===== Epoch 1489/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.7681. Train Loss: 0.9449, Train Accuracy: 0.5169, Val Loss: 0.8680, Val Accuracy: 0.6044\n", + "===== Epoch 1490/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.7681. Train Loss: 0.9333, Train Accuracy: 0.5231, Val Loss: 0.9151, Val Accuracy: 0.5422\n", + "===== Epoch 1491/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.7681. Train Loss: 0.9055, Train Accuracy: 0.5482, Val Loss: 0.8795, Val Accuracy: 0.5511\n", + "===== Epoch 1492/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.7681. Train Loss: 0.9011, Train Accuracy: 0.5498, Val Loss: 0.9566, Val Accuracy: 0.4800\n", + "===== Epoch 1493/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.7681. Train Loss: 0.9237, Train Accuracy: 0.5302, Val Loss: 0.8951, Val Accuracy: 0.5422\n", + "===== Epoch 1494/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.7681. Train Loss: 0.9177, Train Accuracy: 0.5271, Val Loss: 0.9162, Val Accuracy: 0.5556\n", + "===== Epoch 1495/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.7681. Train Loss: 0.9184, Train Accuracy: 0.5365, Val Loss: 0.8671, Val Accuracy: 0.5511\n", + "===== Epoch 1496/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.7681. Train Loss: 0.9095, Train Accuracy: 0.5278, Val Loss: 0.9111, Val Accuracy: 0.5022\n", + "===== Epoch 1497/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.7681. Train Loss: 0.9363, Train Accuracy: 0.5075, Val Loss: 0.9671, Val Accuracy: 0.4800\n", + "===== Epoch 1498/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.7681. Train Loss: 0.9296, Train Accuracy: 0.5278, Val Loss: 0.8637, Val Accuracy: 0.5689\n", + "===== Epoch 1499/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.7681. Train Loss: 0.9212, Train Accuracy: 0.5349, Val Loss: 0.9192, Val Accuracy: 0.5511\n", + "===== Epoch 1500/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.7681. Train Loss: 0.9175, Train Accuracy: 0.5412, Val Loss: 0.8907, Val Accuracy: 0.5378\n", + "===== Epoch 1501/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.7681. Train Loss: 0.9221, Train Accuracy: 0.5443, Val Loss: 0.9336, Val Accuracy: 0.5111\n", + "===== Epoch 1502/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.7681. Train Loss: 0.8858, Train Accuracy: 0.5482, Val Loss: 0.8679, Val Accuracy: 0.5600\n", + "===== Epoch 1503/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.7681. Train Loss: 0.9154, Train Accuracy: 0.5341, Val Loss: 0.8668, Val Accuracy: 0.5689\n", + "===== Epoch 1504/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.7681. Train Loss: 0.9060, Train Accuracy: 0.5286, Val Loss: 0.8806, Val Accuracy: 0.5422\n", + "===== Epoch 1505/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.7681. Train Loss: 0.9050, Train Accuracy: 0.5325, Val Loss: 0.8967, Val Accuracy: 0.5422\n", + "===== Epoch 1506/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.7681. Train Loss: 0.8831, Train Accuracy: 0.5553, Val Loss: 0.8663, Val Accuracy: 0.5333\n", + "===== Epoch 1507/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.7681. Train Loss: 0.8881, Train Accuracy: 0.5482, Val Loss: 0.8596, Val Accuracy: 0.5867\n", + "===== Epoch 1508/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.7681. Train Loss: 0.9211, Train Accuracy: 0.5255, Val Loss: 0.8404, Val Accuracy: 0.5778\n", + "===== Epoch 1509/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.7681. Train Loss: 0.9029, Train Accuracy: 0.5278, Val Loss: 0.8543, Val Accuracy: 0.5867\n", + "===== Epoch 1510/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.7681. Train Loss: 0.9009, Train Accuracy: 0.5427, Val Loss: 0.9009, Val Accuracy: 0.5556\n", + "===== Epoch 1511/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.7681. Train Loss: 0.9133, Train Accuracy: 0.5294, Val Loss: 0.8776, Val Accuracy: 0.5867\n", + "===== Epoch 1512/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.7681. Train Loss: 0.9138, Train Accuracy: 0.5380, Val Loss: 0.9167, Val Accuracy: 0.5600\n", + "===== Epoch 1513/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.7681. Train Loss: 0.9159, Train Accuracy: 0.5396, Val Loss: 0.8352, Val Accuracy: 0.5956\n", + "===== Epoch 1514/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.7681. Train Loss: 0.9128, Train Accuracy: 0.5294, Val Loss: 0.8436, Val Accuracy: 0.5644\n", + "===== Epoch 1515/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.7681. Train Loss: 0.8800, Train Accuracy: 0.5671, Val Loss: 0.8452, Val Accuracy: 0.5778\n", + "===== Epoch 1516/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7696, Train Loss: 0.8916, Train Accuracy: 0.5600, Val Loss: 0.8383, Val Accuracy: 0.5467\n", + "===== Epoch 1517/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7696. Train Loss: 0.8795, Train Accuracy: 0.5443, Val Loss: 0.9393, Val Accuracy: 0.5156\n", + "===== Epoch 1518/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7696. Train Loss: 0.8663, Train Accuracy: 0.5655, Val Loss: 0.8454, Val Accuracy: 0.5556\n", + "===== Epoch 1519/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7696. Train Loss: 0.9005, Train Accuracy: 0.5584, Val Loss: 0.9150, Val Accuracy: 0.5200\n", + "===== Epoch 1520/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7696. Train Loss: 0.8890, Train Accuracy: 0.5686, Val Loss: 0.8547, Val Accuracy: 0.5511\n", + "===== Epoch 1521/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7696. Train Loss: 0.8760, Train Accuracy: 0.5545, Val Loss: 0.8590, Val Accuracy: 0.5644\n", + "===== Epoch 1522/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.7696. Train Loss: 0.8696, Train Accuracy: 0.5655, Val Loss: 0.8854, Val Accuracy: 0.5378\n", + "===== Epoch 1523/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.7696. Train Loss: 0.8581, Train Accuracy: 0.5812, Val Loss: 0.8642, Val Accuracy: 0.5733\n", + "===== Epoch 1524/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7726, Train Loss: 0.8829, Train Accuracy: 0.5420, Val Loss: 0.8520, Val Accuracy: 0.5778\n", + "===== Epoch 1525/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7726. Train Loss: 0.8765, Train Accuracy: 0.5608, Val Loss: 0.8339, Val Accuracy: 0.5867\n", + "===== Epoch 1526/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7726. Train Loss: 0.8653, Train Accuracy: 0.5631, Val Loss: 0.8684, Val Accuracy: 0.5067\n", + "===== Epoch 1527/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7726. Train Loss: 0.8560, Train Accuracy: 0.5741, Val Loss: 0.8326, Val Accuracy: 0.6222\n", + "===== Epoch 1528/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7733, Train Loss: 0.8472, Train Accuracy: 0.5882, Val Loss: 0.8108, Val Accuracy: 0.5911\n", + "===== Epoch 1529/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7733. Train Loss: 0.8773, Train Accuracy: 0.5506, Val Loss: 0.8525, Val Accuracy: 0.5511\n", + "===== Epoch 1530/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7733. Train Loss: 0.8427, Train Accuracy: 0.5718, Val Loss: 0.8529, Val Accuracy: 0.5333\n", + "===== Epoch 1531/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7733. Train Loss: 0.8729, Train Accuracy: 0.5631, Val Loss: 0.8629, Val Accuracy: 0.5244\n", + "===== Epoch 1532/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7733. Train Loss: 0.8750, Train Accuracy: 0.5608, Val Loss: 0.8025, Val Accuracy: 0.6000\n", + "===== Epoch 1533/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7849, Train Loss: 0.8529, Train Accuracy: 0.5875, Val Loss: 0.8013, Val Accuracy: 0.5911\n", + "===== Epoch 1534/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7849. Train Loss: 0.8858, Train Accuracy: 0.5616, Val Loss: 0.8114, Val Accuracy: 0.5911\n", + "===== Epoch 1535/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7849. Train Loss: 0.8594, Train Accuracy: 0.5804, Val Loss: 0.8532, Val Accuracy: 0.5733\n", + "===== Epoch 1536/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7849. Train Loss: 0.8602, Train Accuracy: 0.5639, Val Loss: 0.8957, Val Accuracy: 0.5511\n", + "===== Epoch 1537/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7849. Train Loss: 0.8407, Train Accuracy: 0.5663, Val Loss: 0.8128, Val Accuracy: 0.6044\n", + "===== Epoch 1538/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7850, Train Loss: 0.8670, Train Accuracy: 0.5545, Val Loss: 0.7946, Val Accuracy: 0.6089\n", + "===== Epoch 1539/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7850. Train Loss: 0.8583, Train Accuracy: 0.5600, Val Loss: 0.8190, Val Accuracy: 0.6356\n", + "===== Epoch 1540/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7850. Train Loss: 0.8565, Train Accuracy: 0.5773, Val Loss: 0.8314, Val Accuracy: 0.5733\n", + "===== Epoch 1541/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7853, Train Loss: 0.8721, Train Accuracy: 0.5663, Val Loss: 0.8302, Val Accuracy: 0.6089\n", + "===== Epoch 1542/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7853. Train Loss: 0.8757, Train Accuracy: 0.5584, Val Loss: 0.8158, Val Accuracy: 0.5822\n", + "===== Epoch 1543/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7853. Train Loss: 0.8584, Train Accuracy: 0.5820, Val Loss: 0.8591, Val Accuracy: 0.5200\n", + "===== Epoch 1544/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7853. Train Loss: 0.8535, Train Accuracy: 0.5671, Val Loss: 0.7885, Val Accuracy: 0.6000\n", + "===== Epoch 1545/2000 =====\n", + "New best model saved with Val ROC AUC: 0.7914, Train Loss: 0.8468, Train Accuracy: 0.5710, Val Loss: 0.7999, Val Accuracy: 0.5956\n", + "===== Epoch 1546/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.7914. Train Loss: 0.8439, Train Accuracy: 0.5749, Val Loss: 0.7940, Val Accuracy: 0.5956\n", + "===== Epoch 1547/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.7914. Train Loss: 0.8499, Train Accuracy: 0.5898, Val Loss: 0.7991, Val Accuracy: 0.6178\n", + "===== Epoch 1548/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.7914. Train Loss: 0.8748, Train Accuracy: 0.5796, Val Loss: 0.8249, Val Accuracy: 0.6044\n", + "===== Epoch 1549/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.7914. Train Loss: 0.8636, Train Accuracy: 0.5631, Val Loss: 0.8237, Val Accuracy: 0.5822\n", + "===== Epoch 1550/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.7914. Train Loss: 0.8501, Train Accuracy: 0.5757, Val Loss: 0.8284, Val Accuracy: 0.5733\n", + "===== Epoch 1551/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8013, Train Loss: 0.8604, Train Accuracy: 0.5584, Val Loss: 0.8176, Val Accuracy: 0.6667\n", + "===== Epoch 1552/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8013. Train Loss: 0.8571, Train Accuracy: 0.5694, Val Loss: 0.8161, Val Accuracy: 0.6178\n", + "===== Epoch 1553/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8013. Train Loss: 0.8608, Train Accuracy: 0.5584, Val Loss: 0.8643, Val Accuracy: 0.5911\n", + "===== Epoch 1554/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8013. Train Loss: 0.8613, Train Accuracy: 0.5733, Val Loss: 0.8268, Val Accuracy: 0.6267\n", + "===== Epoch 1555/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8013. Train Loss: 0.8731, Train Accuracy: 0.5624, Val Loss: 0.8702, Val Accuracy: 0.5244\n", + "===== Epoch 1556/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8013. Train Loss: 0.8617, Train Accuracy: 0.5663, Val Loss: 0.8305, Val Accuracy: 0.5778\n", + "===== Epoch 1557/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8013. Train Loss: 0.8769, Train Accuracy: 0.5600, Val Loss: 0.8563, Val Accuracy: 0.5644\n", + "===== Epoch 1558/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8013. Train Loss: 0.8733, Train Accuracy: 0.5459, Val Loss: 0.8549, Val Accuracy: 0.5733\n", + "===== Epoch 1559/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8013. Train Loss: 0.8766, Train Accuracy: 0.5459, Val Loss: 0.7910, Val Accuracy: 0.6089\n", + "===== Epoch 1560/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8013. Train Loss: 0.8571, Train Accuracy: 0.5600, Val Loss: 0.8790, Val Accuracy: 0.5289\n", + "===== Epoch 1561/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8013. Train Loss: 0.8533, Train Accuracy: 0.5694, Val Loss: 0.8383, Val Accuracy: 0.5733\n", + "===== Epoch 1562/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8013. Train Loss: 0.8471, Train Accuracy: 0.5725, Val Loss: 0.8490, Val Accuracy: 0.5689\n", + "===== Epoch 1563/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8013. Train Loss: 0.8641, Train Accuracy: 0.5616, Val Loss: 0.8580, Val Accuracy: 0.5778\n", + "===== Epoch 1564/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8013. Train Loss: 0.8716, Train Accuracy: 0.5561, Val Loss: 0.8268, Val Accuracy: 0.6222\n", + "===== Epoch 1565/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8013. Train Loss: 0.8388, Train Accuracy: 0.5773, Val Loss: 0.9098, Val Accuracy: 0.5689\n", + "===== Epoch 1566/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8013. Train Loss: 0.8644, Train Accuracy: 0.5537, Val Loss: 0.8308, Val Accuracy: 0.5556\n", + "===== Epoch 1567/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8013. Train Loss: 0.8862, Train Accuracy: 0.5482, Val Loss: 0.8220, Val Accuracy: 0.5778\n", + "===== Epoch 1568/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8013. Train Loss: 0.8744, Train Accuracy: 0.5757, Val Loss: 0.8478, Val Accuracy: 0.5244\n", + "===== Epoch 1569/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8013. Train Loss: 0.8809, Train Accuracy: 0.5341, Val Loss: 0.8676, Val Accuracy: 0.5556\n", + "===== Epoch 1570/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8013. Train Loss: 0.8608, Train Accuracy: 0.5741, Val Loss: 0.8204, Val Accuracy: 0.5644\n", + "===== Epoch 1571/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8013. Train Loss: 0.8472, Train Accuracy: 0.5796, Val Loss: 0.8591, Val Accuracy: 0.5733\n", + "===== Epoch 1572/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8013. Train Loss: 0.8498, Train Accuracy: 0.5741, Val Loss: 0.8109, Val Accuracy: 0.5600\n", + "===== Epoch 1573/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8013. Train Loss: 0.8658, Train Accuracy: 0.5631, Val Loss: 0.8313, Val Accuracy: 0.5778\n", + "===== Epoch 1574/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8013. Train Loss: 0.8658, Train Accuracy: 0.5694, Val Loss: 0.8447, Val Accuracy: 0.5600\n", + "===== Epoch 1575/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8013. Train Loss: 0.8463, Train Accuracy: 0.5427, Val Loss: 0.7924, Val Accuracy: 0.5644\n", + "===== Epoch 1576/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8013. Train Loss: 0.8613, Train Accuracy: 0.5624, Val Loss: 0.8645, Val Accuracy: 0.5778\n", + "===== Epoch 1577/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8013. Train Loss: 0.8666, Train Accuracy: 0.5576, Val Loss: 0.8275, Val Accuracy: 0.5689\n", + "===== Epoch 1578/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8013. Train Loss: 0.8657, Train Accuracy: 0.5733, Val Loss: 0.8362, Val Accuracy: 0.5600\n", + "===== Epoch 1579/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8013. Train Loss: 0.8665, Train Accuracy: 0.5616, Val Loss: 0.8123, Val Accuracy: 0.6000\n", + "===== Epoch 1580/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8013. Train Loss: 0.8428, Train Accuracy: 0.5718, Val Loss: 0.8308, Val Accuracy: 0.5644\n", + "===== Epoch 1581/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8013. Train Loss: 0.8669, Train Accuracy: 0.5647, Val Loss: 0.7970, Val Accuracy: 0.6089\n", + "===== Epoch 1582/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8013. Train Loss: 0.8508, Train Accuracy: 0.5702, Val Loss: 0.8206, Val Accuracy: 0.5911\n", + "===== Epoch 1583/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8013. Train Loss: 0.8870, Train Accuracy: 0.5592, Val Loss: 0.8318, Val Accuracy: 0.5956\n", + "===== Epoch 1584/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8013. Train Loss: 0.8467, Train Accuracy: 0.5694, Val Loss: 0.8232, Val Accuracy: 0.5956\n", + "===== Epoch 1585/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8129, Train Loss: 0.8774, Train Accuracy: 0.5812, Val Loss: 0.7965, Val Accuracy: 0.5911\n", + "===== Epoch 1586/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8129. Train Loss: 0.8922, Train Accuracy: 0.5561, Val Loss: 0.8267, Val Accuracy: 0.5822\n", + "===== Epoch 1587/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8129. Train Loss: 0.8599, Train Accuracy: 0.5553, Val Loss: 0.8471, Val Accuracy: 0.5733\n", + "===== Epoch 1588/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8129. Train Loss: 0.8630, Train Accuracy: 0.5576, Val Loss: 0.8222, Val Accuracy: 0.5867\n", + "===== Epoch 1589/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8129. Train Loss: 0.8381, Train Accuracy: 0.5757, Val Loss: 0.8412, Val Accuracy: 0.5733\n", + "===== Epoch 1590/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8129. Train Loss: 0.8557, Train Accuracy: 0.5584, Val Loss: 0.8327, Val Accuracy: 0.6000\n", + "===== Epoch 1591/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8129. Train Loss: 0.8485, Train Accuracy: 0.5647, Val Loss: 0.7963, Val Accuracy: 0.5867\n", + "===== Epoch 1592/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8129. Train Loss: 0.8499, Train Accuracy: 0.5875, Val Loss: 0.8727, Val Accuracy: 0.5689\n", + "===== Epoch 1593/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8129. Train Loss: 0.8638, Train Accuracy: 0.5702, Val Loss: 0.9714, Val Accuracy: 0.5200\n", + "===== Epoch 1594/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8129. Train Loss: 0.8430, Train Accuracy: 0.5780, Val Loss: 0.7557, Val Accuracy: 0.6622\n", + "===== Epoch 1595/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8129. Train Loss: 0.8662, Train Accuracy: 0.5663, Val Loss: 0.7822, Val Accuracy: 0.6400\n", + "===== Epoch 1596/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8129. Train Loss: 0.8442, Train Accuracy: 0.5843, Val Loss: 0.8162, Val Accuracy: 0.6089\n", + "===== Epoch 1597/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8129. Train Loss: 0.8443, Train Accuracy: 0.5757, Val Loss: 0.7934, Val Accuracy: 0.5867\n", + "===== Epoch 1598/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8129. Train Loss: 0.8512, Train Accuracy: 0.5686, Val Loss: 0.8564, Val Accuracy: 0.5333\n", + "===== Epoch 1599/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8129. Train Loss: 0.8148, Train Accuracy: 0.6031, Val Loss: 0.8554, Val Accuracy: 0.5600\n", + "===== Epoch 1600/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8129. Train Loss: 0.8409, Train Accuracy: 0.5992, Val Loss: 0.8355, Val Accuracy: 0.5778\n", + "===== Epoch 1601/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8129. Train Loss: 0.8637, Train Accuracy: 0.5639, Val Loss: 0.8093, Val Accuracy: 0.5822\n", + "===== Epoch 1602/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8129. Train Loss: 0.8476, Train Accuracy: 0.5765, Val Loss: 0.7837, Val Accuracy: 0.6133\n", + "===== Epoch 1603/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8129. Train Loss: 0.8397, Train Accuracy: 0.5851, Val Loss: 0.7705, Val Accuracy: 0.6089\n", + "===== Epoch 1604/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8129. Train Loss: 0.8246, Train Accuracy: 0.6008, Val Loss: 0.8079, Val Accuracy: 0.5867\n", + "===== Epoch 1605/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8129. Train Loss: 0.8546, Train Accuracy: 0.5639, Val Loss: 0.8473, Val Accuracy: 0.5511\n", + "===== Epoch 1606/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8129. Train Loss: 0.8389, Train Accuracy: 0.5749, Val Loss: 0.8075, Val Accuracy: 0.6044\n", + "===== Epoch 1607/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8129. Train Loss: 0.8390, Train Accuracy: 0.5694, Val Loss: 0.7566, Val Accuracy: 0.6178\n", + "===== Epoch 1608/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8129. Train Loss: 0.8224, Train Accuracy: 0.5945, Val Loss: 0.8464, Val Accuracy: 0.5867\n", + "===== Epoch 1609/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8129. Train Loss: 0.8427, Train Accuracy: 0.5725, Val Loss: 0.8571, Val Accuracy: 0.5422\n", + "===== Epoch 1610/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8129. Train Loss: 0.8273, Train Accuracy: 0.6078, Val Loss: 0.8112, Val Accuracy: 0.6044\n", + "===== Epoch 1611/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8129. Train Loss: 0.8388, Train Accuracy: 0.5851, Val Loss: 0.7909, Val Accuracy: 0.6222\n", + "===== Epoch 1612/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8129. Train Loss: 0.8147, Train Accuracy: 0.6016, Val Loss: 0.8389, Val Accuracy: 0.5911\n", + "===== Epoch 1613/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8129. Train Loss: 0.8119, Train Accuracy: 0.5788, Val Loss: 0.7868, Val Accuracy: 0.5911\n", + "===== Epoch 1614/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8129. Train Loss: 0.8152, Train Accuracy: 0.5992, Val Loss: 0.7662, Val Accuracy: 0.6044\n", + "===== Epoch 1615/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8129. Train Loss: 0.8100, Train Accuracy: 0.5882, Val Loss: 0.8214, Val Accuracy: 0.6000\n", + "===== Epoch 1616/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8129. Train Loss: 0.8252, Train Accuracy: 0.5796, Val Loss: 0.7308, Val Accuracy: 0.6622\n", + "===== Epoch 1617/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8129. Train Loss: 0.8129, Train Accuracy: 0.6039, Val Loss: 0.7861, Val Accuracy: 0.5956\n", + "===== Epoch 1618/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8129. Train Loss: 0.8185, Train Accuracy: 0.5757, Val Loss: 0.7708, Val Accuracy: 0.6267\n", + "===== Epoch 1619/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8129. Train Loss: 0.8428, Train Accuracy: 0.5827, Val Loss: 0.7954, Val Accuracy: 0.5733\n", + "===== Epoch 1620/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8129. Train Loss: 0.8192, Train Accuracy: 0.6110, Val Loss: 0.7969, Val Accuracy: 0.5511\n", + "===== Epoch 1621/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8129. Train Loss: 0.8013, Train Accuracy: 0.6000, Val Loss: 0.8523, Val Accuracy: 0.5867\n", + "===== Epoch 1622/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8129. Train Loss: 0.7963, Train Accuracy: 0.5992, Val Loss: 0.8344, Val Accuracy: 0.5911\n", + "===== Epoch 1623/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8129. Train Loss: 0.7963, Train Accuracy: 0.6031, Val Loss: 0.8007, Val Accuracy: 0.6089\n", + "===== Epoch 1624/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8129. Train Loss: 0.8034, Train Accuracy: 0.6008, Val Loss: 0.8138, Val Accuracy: 0.5956\n", + "===== Epoch 1625/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8129. Train Loss: 0.8355, Train Accuracy: 0.5827, Val Loss: 0.8033, Val Accuracy: 0.6044\n", + "===== Epoch 1626/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8129. Train Loss: 0.8057, Train Accuracy: 0.5945, Val Loss: 0.7307, Val Accuracy: 0.6444\n", + "===== Epoch 1627/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8129. Train Loss: 0.8037, Train Accuracy: 0.5976, Val Loss: 0.7683, Val Accuracy: 0.6000\n", + "===== Epoch 1628/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8129. Train Loss: 0.8115, Train Accuracy: 0.6039, Val Loss: 0.7362, Val Accuracy: 0.6178\n", + "===== Epoch 1629/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8129. Train Loss: 0.8211, Train Accuracy: 0.5937, Val Loss: 0.7880, Val Accuracy: 0.5467\n", + "===== Epoch 1630/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8129. Train Loss: 0.8181, Train Accuracy: 0.5875, Val Loss: 0.7580, Val Accuracy: 0.6044\n", + "===== Epoch 1631/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8129. Train Loss: 0.7837, Train Accuracy: 0.6086, Val Loss: 0.7420, Val Accuracy: 0.5956\n", + "===== Epoch 1632/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8129. Train Loss: 0.7887, Train Accuracy: 0.6243, Val Loss: 0.7848, Val Accuracy: 0.6044\n", + "===== Epoch 1633/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8129. Train Loss: 0.8043, Train Accuracy: 0.5953, Val Loss: 0.7544, Val Accuracy: 0.6267\n", + "===== Epoch 1634/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8129. Train Loss: 0.7877, Train Accuracy: 0.6188, Val Loss: 0.7599, Val Accuracy: 0.6267\n", + "===== Epoch 1635/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8129. Train Loss: 0.7969, Train Accuracy: 0.6125, Val Loss: 0.7905, Val Accuracy: 0.5911\n", + "===== Epoch 1636/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8143, Train Loss: 0.7915, Train Accuracy: 0.6180, Val Loss: 0.7489, Val Accuracy: 0.6711\n", + "===== Epoch 1637/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8143. Train Loss: 0.7847, Train Accuracy: 0.6220, Val Loss: 0.7428, Val Accuracy: 0.6178\n", + "===== Epoch 1638/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8143. Train Loss: 0.7989, Train Accuracy: 0.6008, Val Loss: 0.7843, Val Accuracy: 0.6044\n", + "===== Epoch 1639/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8143. Train Loss: 0.7940, Train Accuracy: 0.6016, Val Loss: 0.7379, Val Accuracy: 0.6222\n", + "===== Epoch 1640/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8143. Train Loss: 0.7928, Train Accuracy: 0.6102, Val Loss: 0.7980, Val Accuracy: 0.6000\n", + "===== Epoch 1641/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8143. Train Loss: 0.7906, Train Accuracy: 0.6031, Val Loss: 0.7717, Val Accuracy: 0.6444\n", + "===== Epoch 1642/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8143. Train Loss: 0.7885, Train Accuracy: 0.6243, Val Loss: 0.7846, Val Accuracy: 0.6044\n", + "===== Epoch 1643/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8169, Train Loss: 0.7857, Train Accuracy: 0.6329, Val Loss: 0.7641, Val Accuracy: 0.6489\n", + "===== Epoch 1644/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8169. Train Loss: 0.8140, Train Accuracy: 0.6031, Val Loss: 0.7652, Val Accuracy: 0.6089\n", + "===== Epoch 1645/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8169. Train Loss: 0.7853, Train Accuracy: 0.6039, Val Loss: 0.7761, Val Accuracy: 0.6400\n", + "===== Epoch 1646/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8169. Train Loss: 0.7985, Train Accuracy: 0.6039, Val Loss: 0.7767, Val Accuracy: 0.6400\n", + "===== Epoch 1647/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8169. Train Loss: 0.8074, Train Accuracy: 0.5984, Val Loss: 0.7743, Val Accuracy: 0.6178\n", + "===== Epoch 1648/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8169. Train Loss: 0.7892, Train Accuracy: 0.6063, Val Loss: 0.7405, Val Accuracy: 0.6800\n", + "===== Epoch 1649/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8169. Train Loss: 0.8063, Train Accuracy: 0.5961, Val Loss: 0.7363, Val Accuracy: 0.6133\n", + "===== Epoch 1650/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8169. Train Loss: 0.8101, Train Accuracy: 0.5890, Val Loss: 0.8039, Val Accuracy: 0.5689\n", + "===== Epoch 1651/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8169. Train Loss: 0.8014, Train Accuracy: 0.6008, Val Loss: 0.7507, Val Accuracy: 0.6222\n", + "===== Epoch 1652/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8169. Train Loss: 0.7935, Train Accuracy: 0.6071, Val Loss: 0.7433, Val Accuracy: 0.6178\n", + "===== Epoch 1653/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8169. Train Loss: 0.8011, Train Accuracy: 0.5890, Val Loss: 0.7462, Val Accuracy: 0.6622\n", + "===== Epoch 1654/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8169. Train Loss: 0.8006, Train Accuracy: 0.5929, Val Loss: 0.8099, Val Accuracy: 0.5822\n", + "===== Epoch 1655/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8169. Train Loss: 0.7941, Train Accuracy: 0.6133, Val Loss: 0.7872, Val Accuracy: 0.5733\n", + "===== Epoch 1656/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8169. Train Loss: 0.7847, Train Accuracy: 0.6306, Val Loss: 0.7934, Val Accuracy: 0.6267\n", + "===== Epoch 1657/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8169. Train Loss: 0.7919, Train Accuracy: 0.6094, Val Loss: 0.7341, Val Accuracy: 0.6311\n", + "===== Epoch 1658/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8169. Train Loss: 0.7854, Train Accuracy: 0.6133, Val Loss: 0.7759, Val Accuracy: 0.5733\n", + "===== Epoch 1659/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8169. Train Loss: 0.7972, Train Accuracy: 0.6031, Val Loss: 0.7344, Val Accuracy: 0.6089\n", + "===== Epoch 1660/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8169. Train Loss: 0.8299, Train Accuracy: 0.5953, Val Loss: 0.7467, Val Accuracy: 0.6222\n", + "===== Epoch 1661/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8169. Train Loss: 0.7785, Train Accuracy: 0.6204, Val Loss: 0.7612, Val Accuracy: 0.6222\n", + "===== Epoch 1662/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8169. Train Loss: 0.8170, Train Accuracy: 0.5843, Val Loss: 0.7919, Val Accuracy: 0.5778\n", + "===== Epoch 1663/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8169. Train Loss: 0.8091, Train Accuracy: 0.6110, Val Loss: 0.7895, Val Accuracy: 0.5733\n", + "===== Epoch 1664/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8198, Train Loss: 0.7949, Train Accuracy: 0.6118, Val Loss: 0.7625, Val Accuracy: 0.6400\n", + "===== Epoch 1665/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8198. Train Loss: 0.7962, Train Accuracy: 0.5867, Val Loss: 0.7550, Val Accuracy: 0.6178\n", + "===== Epoch 1666/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8198. Train Loss: 0.7940, Train Accuracy: 0.5937, Val Loss: 0.7715, Val Accuracy: 0.6178\n", + "===== Epoch 1667/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8198. Train Loss: 0.8125, Train Accuracy: 0.6102, Val Loss: 0.7935, Val Accuracy: 0.5778\n", + "===== Epoch 1668/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8198. Train Loss: 0.8185, Train Accuracy: 0.5867, Val Loss: 0.7797, Val Accuracy: 0.6622\n", + "===== Epoch 1669/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8198. Train Loss: 0.7983, Train Accuracy: 0.5969, Val Loss: 0.8243, Val Accuracy: 0.5733\n", + "===== Epoch 1670/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8198. Train Loss: 0.8217, Train Accuracy: 0.5812, Val Loss: 0.7411, Val Accuracy: 0.6222\n", + "===== Epoch 1671/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8198. Train Loss: 0.7917, Train Accuracy: 0.6188, Val Loss: 0.7461, Val Accuracy: 0.6000\n", + "===== Epoch 1672/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8198. Train Loss: 0.7875, Train Accuracy: 0.5945, Val Loss: 0.7222, Val Accuracy: 0.6400\n", + "===== Epoch 1673/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8198. Train Loss: 0.8238, Train Accuracy: 0.5922, Val Loss: 0.8302, Val Accuracy: 0.5689\n", + "===== Epoch 1674/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8198. Train Loss: 0.7878, Train Accuracy: 0.6071, Val Loss: 0.7735, Val Accuracy: 0.6044\n", + "===== Epoch 1675/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8198. Train Loss: 0.8479, Train Accuracy: 0.5804, Val Loss: 0.7477, Val Accuracy: 0.6267\n", + "===== Epoch 1676/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8198. Train Loss: 0.8034, Train Accuracy: 0.6086, Val Loss: 0.7507, Val Accuracy: 0.6000\n", + "===== Epoch 1677/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8198. Train Loss: 0.8089, Train Accuracy: 0.5859, Val Loss: 0.7506, Val Accuracy: 0.6444\n", + "===== Epoch 1678/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8198. Train Loss: 0.8234, Train Accuracy: 0.5961, Val Loss: 0.7809, Val Accuracy: 0.6400\n", + "===== Epoch 1679/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8198. Train Loss: 0.7747, Train Accuracy: 0.6071, Val Loss: 0.7649, Val Accuracy: 0.5956\n", + "===== Epoch 1680/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8198. Train Loss: 0.7998, Train Accuracy: 0.6039, Val Loss: 0.7527, Val Accuracy: 0.6178\n", + "===== Epoch 1681/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8198. Train Loss: 0.7903, Train Accuracy: 0.6071, Val Loss: 0.7414, Val Accuracy: 0.6178\n", + "===== Epoch 1682/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8198. Train Loss: 0.8164, Train Accuracy: 0.6000, Val Loss: 0.8109, Val Accuracy: 0.6222\n", + "===== Epoch 1683/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8198. Train Loss: 0.8074, Train Accuracy: 0.5922, Val Loss: 0.7240, Val Accuracy: 0.6178\n", + "===== Epoch 1684/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8198. Train Loss: 0.7901, Train Accuracy: 0.6173, Val Loss: 0.7056, Val Accuracy: 0.6667\n", + "===== Epoch 1685/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8198. Train Loss: 0.7840, Train Accuracy: 0.6094, Val Loss: 0.7286, Val Accuracy: 0.6178\n", + "===== Epoch 1686/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8198. Train Loss: 0.7847, Train Accuracy: 0.5969, Val Loss: 0.7538, Val Accuracy: 0.6089\n", + "===== Epoch 1687/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8198. Train Loss: 0.7948, Train Accuracy: 0.6031, Val Loss: 0.7377, Val Accuracy: 0.6489\n", + "===== Epoch 1688/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8198. Train Loss: 0.8165, Train Accuracy: 0.5796, Val Loss: 0.7996, Val Accuracy: 0.6089\n", + "===== Epoch 1689/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8198. Train Loss: 0.8090, Train Accuracy: 0.5898, Val Loss: 0.7575, Val Accuracy: 0.6533\n", + "===== Epoch 1690/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8288, Train Loss: 0.7976, Train Accuracy: 0.6133, Val Loss: 0.7480, Val Accuracy: 0.6800\n", + "===== Epoch 1691/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8288. Train Loss: 0.7939, Train Accuracy: 0.6157, Val Loss: 0.7497, Val Accuracy: 0.6044\n", + "===== Epoch 1692/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8288. Train Loss: 0.8356, Train Accuracy: 0.5976, Val Loss: 0.7382, Val Accuracy: 0.5956\n", + "===== Epoch 1693/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8288. Train Loss: 0.8026, Train Accuracy: 0.6039, Val Loss: 0.7934, Val Accuracy: 0.5822\n", + "===== Epoch 1694/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8288. Train Loss: 0.8157, Train Accuracy: 0.5945, Val Loss: 0.7552, Val Accuracy: 0.6267\n", + "===== Epoch 1695/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8288. Train Loss: 0.7907, Train Accuracy: 0.6063, Val Loss: 0.7834, Val Accuracy: 0.6000\n", + "===== Epoch 1696/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8288. Train Loss: 0.8033, Train Accuracy: 0.6016, Val Loss: 0.7825, Val Accuracy: 0.6133\n", + "===== Epoch 1697/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8288. Train Loss: 0.8069, Train Accuracy: 0.6071, Val Loss: 0.7663, Val Accuracy: 0.5867\n", + "===== Epoch 1698/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8288. Train Loss: 0.8133, Train Accuracy: 0.5984, Val Loss: 0.7384, Val Accuracy: 0.6311\n", + "===== Epoch 1699/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8288. Train Loss: 0.7812, Train Accuracy: 0.6235, Val Loss: 0.7365, Val Accuracy: 0.6133\n", + "===== Epoch 1700/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8288. Train Loss: 0.7721, Train Accuracy: 0.6196, Val Loss: 0.7492, Val Accuracy: 0.6622\n", + "===== Epoch 1701/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8288. Train Loss: 0.7949, Train Accuracy: 0.5882, Val Loss: 0.7507, Val Accuracy: 0.6133\n", + "===== Epoch 1702/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8288. Train Loss: 0.8216, Train Accuracy: 0.5969, Val Loss: 0.6939, Val Accuracy: 0.6578\n", + "===== Epoch 1703/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8288. Train Loss: 0.7845, Train Accuracy: 0.6086, Val Loss: 0.7140, Val Accuracy: 0.6267\n", + "===== Epoch 1704/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8288. Train Loss: 0.7760, Train Accuracy: 0.6212, Val Loss: 0.7132, Val Accuracy: 0.6089\n", + "===== Epoch 1705/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8288. Train Loss: 0.7955, Train Accuracy: 0.6157, Val Loss: 0.7122, Val Accuracy: 0.6444\n", + "===== Epoch 1706/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8288. Train Loss: 0.7721, Train Accuracy: 0.6157, Val Loss: 0.7415, Val Accuracy: 0.6089\n", + "===== Epoch 1707/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8288. Train Loss: 0.8004, Train Accuracy: 0.6063, Val Loss: 0.7959, Val Accuracy: 0.6089\n", + "===== Epoch 1708/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8288. Train Loss: 0.7754, Train Accuracy: 0.6282, Val Loss: 0.7686, Val Accuracy: 0.5867\n", + "===== Epoch 1709/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8288. Train Loss: 0.7829, Train Accuracy: 0.6165, Val Loss: 0.7172, Val Accuracy: 0.6311\n", + "===== Epoch 1710/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8354, Train Loss: 0.7713, Train Accuracy: 0.6416, Val Loss: 0.6830, Val Accuracy: 0.7067\n", + "===== Epoch 1711/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8354. Train Loss: 0.7821, Train Accuracy: 0.6157, Val Loss: 0.7623, Val Accuracy: 0.6356\n", + "===== Epoch 1712/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8354. Train Loss: 0.7838, Train Accuracy: 0.6149, Val Loss: 0.7549, Val Accuracy: 0.6267\n", + "===== Epoch 1713/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8354. Train Loss: 0.7662, Train Accuracy: 0.6267, Val Loss: 0.7081, Val Accuracy: 0.6444\n", + "===== Epoch 1714/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8354. Train Loss: 0.7723, Train Accuracy: 0.6212, Val Loss: 0.7006, Val Accuracy: 0.6533\n", + "===== Epoch 1715/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8354. Train Loss: 0.7792, Train Accuracy: 0.6227, Val Loss: 0.7781, Val Accuracy: 0.6178\n", + "===== Epoch 1716/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8354. Train Loss: 0.7466, Train Accuracy: 0.6267, Val Loss: 0.7526, Val Accuracy: 0.6444\n", + "===== Epoch 1717/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8354. Train Loss: 0.7651, Train Accuracy: 0.6259, Val Loss: 0.7145, Val Accuracy: 0.6267\n", + "===== Epoch 1718/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8354. Train Loss: 0.7595, Train Accuracy: 0.6039, Val Loss: 0.7405, Val Accuracy: 0.6489\n", + "===== Epoch 1719/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8354. Train Loss: 0.7726, Train Accuracy: 0.6157, Val Loss: 0.6967, Val Accuracy: 0.6622\n", + "===== Epoch 1720/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8354. Train Loss: 0.7649, Train Accuracy: 0.6243, Val Loss: 0.7300, Val Accuracy: 0.6711\n", + "===== Epoch 1721/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8354. Train Loss: 0.7458, Train Accuracy: 0.6290, Val Loss: 0.6848, Val Accuracy: 0.6844\n", + "===== Epoch 1722/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8354. Train Loss: 0.7591, Train Accuracy: 0.6110, Val Loss: 0.7037, Val Accuracy: 0.6489\n", + "===== Epoch 1723/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8354. Train Loss: 0.7705, Train Accuracy: 0.6204, Val Loss: 0.7459, Val Accuracy: 0.6222\n", + "===== Epoch 1724/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8354. Train Loss: 0.7620, Train Accuracy: 0.6039, Val Loss: 0.6768, Val Accuracy: 0.6711\n", + "===== Epoch 1725/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8354. Train Loss: 0.7708, Train Accuracy: 0.6251, Val Loss: 0.7298, Val Accuracy: 0.6178\n", + "===== Epoch 1726/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8354. Train Loss: 0.7640, Train Accuracy: 0.6227, Val Loss: 0.7363, Val Accuracy: 0.6622\n", + "===== Epoch 1727/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8354. Train Loss: 0.7423, Train Accuracy: 0.6243, Val Loss: 0.7241, Val Accuracy: 0.6444\n", + "===== Epoch 1728/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8511, Train Loss: 0.7670, Train Accuracy: 0.6275, Val Loss: 0.6570, Val Accuracy: 0.6889\n", + "===== Epoch 1729/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8511. Train Loss: 0.7587, Train Accuracy: 0.6322, Val Loss: 0.6876, Val Accuracy: 0.6578\n", + "===== Epoch 1730/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8511. Train Loss: 0.7624, Train Accuracy: 0.6235, Val Loss: 0.7242, Val Accuracy: 0.6533\n", + "===== Epoch 1731/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8511. Train Loss: 0.7585, Train Accuracy: 0.6345, Val Loss: 0.7182, Val Accuracy: 0.6400\n", + "===== Epoch 1732/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8511. Train Loss: 0.7547, Train Accuracy: 0.6361, Val Loss: 0.6962, Val Accuracy: 0.6889\n", + "===== Epoch 1733/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8511. Train Loss: 0.7537, Train Accuracy: 0.6329, Val Loss: 0.7218, Val Accuracy: 0.6489\n", + "===== Epoch 1734/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8511. Train Loss: 0.7488, Train Accuracy: 0.6282, Val Loss: 0.6817, Val Accuracy: 0.6800\n", + "===== Epoch 1735/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8511. Train Loss: 0.7457, Train Accuracy: 0.6235, Val Loss: 0.7337, Val Accuracy: 0.6133\n", + "===== Epoch 1736/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8511. Train Loss: 0.7529, Train Accuracy: 0.6580, Val Loss: 0.7334, Val Accuracy: 0.6044\n", + "===== Epoch 1737/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8511. Train Loss: 0.7515, Train Accuracy: 0.6212, Val Loss: 0.7106, Val Accuracy: 0.6533\n", + "===== Epoch 1738/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8511. Train Loss: 0.7568, Train Accuracy: 0.6180, Val Loss: 0.7059, Val Accuracy: 0.6356\n", + "===== Epoch 1739/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8511. Train Loss: 0.7515, Train Accuracy: 0.6322, Val Loss: 0.7551, Val Accuracy: 0.6089\n", + "===== Epoch 1740/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8511. Train Loss: 0.7411, Train Accuracy: 0.6400, Val Loss: 0.7220, Val Accuracy: 0.6311\n", + "===== Epoch 1741/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8511. Train Loss: 0.7387, Train Accuracy: 0.6408, Val Loss: 0.7072, Val Accuracy: 0.6444\n", + "===== Epoch 1742/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8511. Train Loss: 0.7532, Train Accuracy: 0.6235, Val Loss: 0.7103, Val Accuracy: 0.6400\n", + "===== Epoch 1743/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8511. Train Loss: 0.7326, Train Accuracy: 0.6533, Val Loss: 0.7301, Val Accuracy: 0.6000\n", + "===== Epoch 1744/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8511. Train Loss: 0.7448, Train Accuracy: 0.6408, Val Loss: 0.7211, Val Accuracy: 0.6444\n", + "===== Epoch 1745/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8511. Train Loss: 0.7420, Train Accuracy: 0.6369, Val Loss: 0.7193, Val Accuracy: 0.6178\n", + "===== Epoch 1746/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8511. Train Loss: 0.7352, Train Accuracy: 0.6463, Val Loss: 0.6943, Val Accuracy: 0.6400\n", + "===== Epoch 1747/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8511. Train Loss: 0.7319, Train Accuracy: 0.6353, Val Loss: 0.7146, Val Accuracy: 0.6667\n", + "===== Epoch 1748/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8511. Train Loss: 0.7652, Train Accuracy: 0.6212, Val Loss: 0.7390, Val Accuracy: 0.6400\n", + "===== Epoch 1749/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8511. Train Loss: 0.7424, Train Accuracy: 0.6463, Val Loss: 0.7200, Val Accuracy: 0.6178\n", + "===== Epoch 1750/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8511. Train Loss: 0.7343, Train Accuracy: 0.6455, Val Loss: 0.7303, Val Accuracy: 0.6356\n", + "===== Epoch 1751/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8511. Train Loss: 0.7464, Train Accuracy: 0.6565, Val Loss: 0.7179, Val Accuracy: 0.6578\n", + "===== Epoch 1752/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8511. Train Loss: 0.7685, Train Accuracy: 0.6188, Val Loss: 0.7071, Val Accuracy: 0.6711\n", + "===== Epoch 1753/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8511. Train Loss: 0.7749, Train Accuracy: 0.6063, Val Loss: 0.7023, Val Accuracy: 0.6578\n", + "===== Epoch 1754/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8511. Train Loss: 0.7287, Train Accuracy: 0.6314, Val Loss: 0.6779, Val Accuracy: 0.6889\n", + "===== Epoch 1755/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8528, Train Loss: 0.7473, Train Accuracy: 0.6439, Val Loss: 0.6806, Val Accuracy: 0.6933\n", + "===== Epoch 1756/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8528. Train Loss: 0.7479, Train Accuracy: 0.6337, Val Loss: 0.7071, Val Accuracy: 0.6533\n", + "===== Epoch 1757/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8528. Train Loss: 0.7526, Train Accuracy: 0.6447, Val Loss: 0.6756, Val Accuracy: 0.6844\n", + "===== Epoch 1758/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8528. Train Loss: 0.7300, Train Accuracy: 0.6510, Val Loss: 0.6993, Val Accuracy: 0.6578\n", + "===== Epoch 1759/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8528. Train Loss: 0.7558, Train Accuracy: 0.6329, Val Loss: 0.7351, Val Accuracy: 0.6089\n", + "===== Epoch 1760/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8528. Train Loss: 0.7736, Train Accuracy: 0.6259, Val Loss: 0.7475, Val Accuracy: 0.6400\n", + "===== Epoch 1761/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8528. Train Loss: 0.7582, Train Accuracy: 0.6290, Val Loss: 0.7393, Val Accuracy: 0.6400\n", + "===== Epoch 1762/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8528. Train Loss: 0.7440, Train Accuracy: 0.6322, Val Loss: 0.6809, Val Accuracy: 0.6711\n", + "===== Epoch 1763/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8528. Train Loss: 0.7594, Train Accuracy: 0.6408, Val Loss: 0.7603, Val Accuracy: 0.6267\n", + "===== Epoch 1764/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8528. Train Loss: 0.7740, Train Accuracy: 0.6180, Val Loss: 0.6931, Val Accuracy: 0.6667\n", + "===== Epoch 1765/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8528. Train Loss: 0.7324, Train Accuracy: 0.6573, Val Loss: 0.7329, Val Accuracy: 0.5956\n", + "===== Epoch 1766/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8528. Train Loss: 0.7474, Train Accuracy: 0.6416, Val Loss: 0.6706, Val Accuracy: 0.6711\n", + "===== Epoch 1767/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8528. Train Loss: 0.7646, Train Accuracy: 0.6314, Val Loss: 0.6976, Val Accuracy: 0.6578\n", + "===== Epoch 1768/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8528. Train Loss: 0.7681, Train Accuracy: 0.6180, Val Loss: 0.7089, Val Accuracy: 0.6489\n", + "===== Epoch 1769/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8528. Train Loss: 0.7865, Train Accuracy: 0.6141, Val Loss: 0.7480, Val Accuracy: 0.6000\n", + "===== Epoch 1770/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8528. Train Loss: 0.7800, Train Accuracy: 0.6157, Val Loss: 0.7316, Val Accuracy: 0.6044\n", + "===== Epoch 1771/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8528. Train Loss: 0.7596, Train Accuracy: 0.6322, Val Loss: 0.6859, Val Accuracy: 0.6667\n", + "===== Epoch 1772/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8528. Train Loss: 0.7681, Train Accuracy: 0.6102, Val Loss: 0.7084, Val Accuracy: 0.6400\n", + "===== Epoch 1773/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8528. Train Loss: 0.7777, Train Accuracy: 0.6243, Val Loss: 0.7018, Val Accuracy: 0.6756\n", + "===== Epoch 1774/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8528. Train Loss: 0.7798, Train Accuracy: 0.6157, Val Loss: 0.7441, Val Accuracy: 0.6578\n", + "===== Epoch 1775/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8528. Train Loss: 0.7714, Train Accuracy: 0.6204, Val Loss: 0.7530, Val Accuracy: 0.6400\n", + "===== Epoch 1776/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8528. Train Loss: 0.7488, Train Accuracy: 0.6384, Val Loss: 0.7590, Val Accuracy: 0.6222\n", + "===== Epoch 1777/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8528. Train Loss: 0.7630, Train Accuracy: 0.5976, Val Loss: 0.7306, Val Accuracy: 0.6044\n", + "===== Epoch 1778/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8528. Train Loss: 0.7842, Train Accuracy: 0.5976, Val Loss: 0.7806, Val Accuracy: 0.5822\n", + "===== Epoch 1779/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8528. Train Loss: 0.7525, Train Accuracy: 0.6471, Val Loss: 0.7613, Val Accuracy: 0.6089\n", + "===== Epoch 1780/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8528. Train Loss: 0.7631, Train Accuracy: 0.6024, Val Loss: 0.7532, Val Accuracy: 0.6356\n", + "===== Epoch 1781/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8528. Train Loss: 0.7866, Train Accuracy: 0.6086, Val Loss: 0.7232, Val Accuracy: 0.6044\n", + "===== Epoch 1782/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8528. Train Loss: 0.7841, Train Accuracy: 0.6039, Val Loss: 0.7809, Val Accuracy: 0.6267\n", + "===== Epoch 1783/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8528. Train Loss: 0.7720, Train Accuracy: 0.6078, Val Loss: 0.8030, Val Accuracy: 0.5333\n", + "===== Epoch 1784/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8528. Train Loss: 0.7610, Train Accuracy: 0.5984, Val Loss: 0.7020, Val Accuracy: 0.6533\n", + "===== Epoch 1785/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8528. Train Loss: 0.7536, Train Accuracy: 0.6314, Val Loss: 0.7603, Val Accuracy: 0.6444\n", + "===== Epoch 1786/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8528. Train Loss: 0.7644, Train Accuracy: 0.6235, Val Loss: 0.7284, Val Accuracy: 0.6356\n", + "===== Epoch 1787/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8528. Train Loss: 0.7534, Train Accuracy: 0.6282, Val Loss: 0.7454, Val Accuracy: 0.6400\n", + "===== Epoch 1788/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8528. Train Loss: 0.7670, Train Accuracy: 0.6165, Val Loss: 0.7451, Val Accuracy: 0.6356\n", + "===== Epoch 1789/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8528. Train Loss: 0.7590, Train Accuracy: 0.6204, Val Loss: 0.7653, Val Accuracy: 0.6044\n", + "===== Epoch 1790/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8528. Train Loss: 0.7592, Train Accuracy: 0.6275, Val Loss: 0.6745, Val Accuracy: 0.6356\n", + "===== Epoch 1791/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8528. Train Loss: 0.8055, Train Accuracy: 0.6024, Val Loss: 0.6963, Val Accuracy: 0.7022\n", + "===== Epoch 1792/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8528. Train Loss: 0.7521, Train Accuracy: 0.6345, Val Loss: 0.7808, Val Accuracy: 0.5778\n", + "===== Epoch 1793/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8528. Train Loss: 0.7635, Train Accuracy: 0.6235, Val Loss: 0.7112, Val Accuracy: 0.6489\n", + "===== Epoch 1794/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8528. Train Loss: 0.7493, Train Accuracy: 0.6345, Val Loss: 0.7505, Val Accuracy: 0.6356\n", + "===== Epoch 1795/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8528. Train Loss: 0.7777, Train Accuracy: 0.5969, Val Loss: 0.6946, Val Accuracy: 0.6444\n", + "===== Epoch 1796/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8528. Train Loss: 0.7415, Train Accuracy: 0.6361, Val Loss: 0.7581, Val Accuracy: 0.5778\n", + "===== Epoch 1797/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8528. Train Loss: 0.7581, Train Accuracy: 0.6227, Val Loss: 0.7478, Val Accuracy: 0.6533\n", + "===== Epoch 1798/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8528. Train Loss: 0.7632, Train Accuracy: 0.6141, Val Loss: 0.8229, Val Accuracy: 0.5644\n", + "===== Epoch 1799/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8528. Train Loss: 0.7516, Train Accuracy: 0.6392, Val Loss: 0.7302, Val Accuracy: 0.6844\n", + "===== Epoch 1800/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8528. Train Loss: 0.7561, Train Accuracy: 0.6196, Val Loss: 0.7105, Val Accuracy: 0.6578\n", + "===== Epoch 1801/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8528. Train Loss: 0.7471, Train Accuracy: 0.6510, Val Loss: 0.7243, Val Accuracy: 0.6356\n", + "===== Epoch 1802/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8528. Train Loss: 0.7467, Train Accuracy: 0.6329, Val Loss: 0.7463, Val Accuracy: 0.5911\n", + "===== Epoch 1803/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8528. Train Loss: 0.7781, Train Accuracy: 0.6118, Val Loss: 0.7741, Val Accuracy: 0.6089\n", + "===== Epoch 1804/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8528. Train Loss: 0.7513, Train Accuracy: 0.6447, Val Loss: 0.7344, Val Accuracy: 0.6444\n", + "===== Epoch 1805/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8528. Train Loss: 0.7380, Train Accuracy: 0.6275, Val Loss: 0.7201, Val Accuracy: 0.6667\n", + "===== Epoch 1806/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8562, Train Loss: 0.7615, Train Accuracy: 0.6494, Val Loss: 0.6657, Val Accuracy: 0.7067\n", + "===== Epoch 1807/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8562. Train Loss: 0.7271, Train Accuracy: 0.6353, Val Loss: 0.6741, Val Accuracy: 0.6933\n", + "===== Epoch 1808/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8562. Train Loss: 0.7413, Train Accuracy: 0.6329, Val Loss: 0.7276, Val Accuracy: 0.6400\n", + "===== Epoch 1809/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8562. Train Loss: 0.7563, Train Accuracy: 0.6196, Val Loss: 0.6719, Val Accuracy: 0.7067\n", + "===== Epoch 1810/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8562. Train Loss: 0.7141, Train Accuracy: 0.6557, Val Loss: 0.7427, Val Accuracy: 0.6311\n", + "===== Epoch 1811/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8562. Train Loss: 0.7349, Train Accuracy: 0.6439, Val Loss: 0.6864, Val Accuracy: 0.6711\n", + "===== Epoch 1812/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8562. Train Loss: 0.7241, Train Accuracy: 0.6439, Val Loss: 0.7177, Val Accuracy: 0.6267\n", + "===== Epoch 1813/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8562. Train Loss: 0.7317, Train Accuracy: 0.6400, Val Loss: 0.6765, Val Accuracy: 0.6667\n", + "===== Epoch 1814/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8562. Train Loss: 0.7317, Train Accuracy: 0.6431, Val Loss: 0.6844, Val Accuracy: 0.6578\n", + "===== Epoch 1815/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8562. Train Loss: 0.7376, Train Accuracy: 0.6502, Val Loss: 0.7526, Val Accuracy: 0.6311\n", + "===== Epoch 1816/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8562. Train Loss: 0.7235, Train Accuracy: 0.6384, Val Loss: 0.6877, Val Accuracy: 0.6800\n", + "===== Epoch 1817/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8562. Train Loss: 0.7471, Train Accuracy: 0.6424, Val Loss: 0.6713, Val Accuracy: 0.6444\n", + "===== Epoch 1818/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8562. Train Loss: 0.7227, Train Accuracy: 0.6361, Val Loss: 0.6519, Val Accuracy: 0.6578\n", + "===== Epoch 1819/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8562. Train Loss: 0.7120, Train Accuracy: 0.6447, Val Loss: 0.6758, Val Accuracy: 0.6444\n", + "===== Epoch 1820/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8562. Train Loss: 0.7249, Train Accuracy: 0.6392, Val Loss: 0.6973, Val Accuracy: 0.6000\n", + "===== Epoch 1821/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8562. Train Loss: 0.7451, Train Accuracy: 0.6251, Val Loss: 0.6452, Val Accuracy: 0.7067\n", + "===== Epoch 1822/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8562. Train Loss: 0.7182, Train Accuracy: 0.6533, Val Loss: 0.7323, Val Accuracy: 0.6489\n", + "===== Epoch 1823/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8562. Train Loss: 0.7171, Train Accuracy: 0.6596, Val Loss: 0.6939, Val Accuracy: 0.6533\n", + "===== Epoch 1824/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8562. Train Loss: 0.7445, Train Accuracy: 0.6314, Val Loss: 0.6807, Val Accuracy: 0.6444\n", + "===== Epoch 1825/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8562. Train Loss: 0.7067, Train Accuracy: 0.6455, Val Loss: 0.6972, Val Accuracy: 0.6578\n", + "===== Epoch 1826/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8562. Train Loss: 0.7258, Train Accuracy: 0.6518, Val Loss: 0.7008, Val Accuracy: 0.6889\n", + "===== Epoch 1827/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8562. Train Loss: 0.7331, Train Accuracy: 0.6478, Val Loss: 0.6843, Val Accuracy: 0.6978\n", + "===== Epoch 1828/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8562. Train Loss: 0.7100, Train Accuracy: 0.6667, Val Loss: 0.6576, Val Accuracy: 0.6667\n", + "===== Epoch 1829/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8562. Train Loss: 0.7122, Train Accuracy: 0.6667, Val Loss: 0.6451, Val Accuracy: 0.7067\n", + "===== Epoch 1830/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8562. Train Loss: 0.7392, Train Accuracy: 0.6400, Val Loss: 0.7131, Val Accuracy: 0.6711\n", + "===== Epoch 1831/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8562. Train Loss: 0.7304, Train Accuracy: 0.6455, Val Loss: 0.6822, Val Accuracy: 0.6756\n", + "===== Epoch 1832/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8562. Train Loss: 0.6968, Train Accuracy: 0.6627, Val Loss: 0.6744, Val Accuracy: 0.6667\n", + "===== Epoch 1833/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8562. Train Loss: 0.7044, Train Accuracy: 0.6486, Val Loss: 0.6889, Val Accuracy: 0.6667\n", + "===== Epoch 1834/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6627, Val Loss: 0.6638, Val Accuracy: 0.6756\n", + "===== Epoch 1835/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8562. Train Loss: 0.7092, Train Accuracy: 0.6635, Val Loss: 0.6502, Val Accuracy: 0.6978\n", + "===== Epoch 1836/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8562. Train Loss: 0.7148, Train Accuracy: 0.6416, Val Loss: 0.6783, Val Accuracy: 0.6400\n", + "===== Epoch 1837/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8562. Train Loss: 0.7142, Train Accuracy: 0.6620, Val Loss: 0.7257, Val Accuracy: 0.6133\n", + "===== Epoch 1838/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8562. Train Loss: 0.7161, Train Accuracy: 0.6510, Val Loss: 0.6485, Val Accuracy: 0.6667\n", + "===== Epoch 1839/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8562. Train Loss: 0.7045, Train Accuracy: 0.6682, Val Loss: 0.6902, Val Accuracy: 0.6533\n", + "===== Epoch 1840/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8562. Train Loss: 0.7186, Train Accuracy: 0.6455, Val Loss: 0.6641, Val Accuracy: 0.6489\n", + "===== Epoch 1841/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8562. Train Loss: 0.7090, Train Accuracy: 0.6573, Val Loss: 0.7173, Val Accuracy: 0.6533\n", + "===== Epoch 1842/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6604, Val Loss: 0.6590, Val Accuracy: 0.6489\n", + "===== Epoch 1843/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8562. Train Loss: 0.7256, Train Accuracy: 0.6502, Val Loss: 0.6588, Val Accuracy: 0.6933\n", + "===== Epoch 1844/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8562. Train Loss: 0.7203, Train Accuracy: 0.6620, Val Loss: 0.6515, Val Accuracy: 0.7022\n", + "===== Epoch 1845/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8562. Train Loss: 0.7123, Train Accuracy: 0.6557, Val Loss: 0.6642, Val Accuracy: 0.6978\n", + "===== Epoch 1846/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8562. Train Loss: 0.7133, Train Accuracy: 0.6549, Val Loss: 0.6915, Val Accuracy: 0.6933\n", + "===== Epoch 1847/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8562. Train Loss: 0.7050, Train Accuracy: 0.6447, Val Loss: 0.6803, Val Accuracy: 0.6489\n", + "===== Epoch 1848/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8562. Train Loss: 0.7052, Train Accuracy: 0.6698, Val Loss: 0.7007, Val Accuracy: 0.6933\n", + "===== Epoch 1849/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8562. Train Loss: 0.7058, Train Accuracy: 0.6525, Val Loss: 0.7177, Val Accuracy: 0.6356\n", + "===== Epoch 1850/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8562. Train Loss: 0.7267, Train Accuracy: 0.6510, Val Loss: 0.6937, Val Accuracy: 0.6578\n", + "===== Epoch 1851/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8562. Train Loss: 0.7156, Train Accuracy: 0.6471, Val Loss: 0.6812, Val Accuracy: 0.6756\n", + "===== Epoch 1852/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8562. Train Loss: 0.7061, Train Accuracy: 0.6651, Val Loss: 0.6367, Val Accuracy: 0.6756\n", + "===== Epoch 1853/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8562. Train Loss: 0.7213, Train Accuracy: 0.6400, Val Loss: 0.6976, Val Accuracy: 0.6222\n", + "===== Epoch 1854/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8562. Train Loss: 0.7231, Train Accuracy: 0.6667, Val Loss: 0.6946, Val Accuracy: 0.6444\n", + "===== Epoch 1855/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8562. Train Loss: 0.7111, Train Accuracy: 0.6565, Val Loss: 0.6435, Val Accuracy: 0.6978\n", + "===== Epoch 1856/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8562. Train Loss: 0.7120, Train Accuracy: 0.6471, Val Loss: 0.6504, Val Accuracy: 0.7156\n", + "===== Epoch 1857/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8562. Train Loss: 0.7180, Train Accuracy: 0.6518, Val Loss: 0.6897, Val Accuracy: 0.6622\n", + "===== Epoch 1858/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8562. Train Loss: 0.6997, Train Accuracy: 0.6682, Val Loss: 0.6769, Val Accuracy: 0.6711\n", + "===== Epoch 1859/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8562. Train Loss: 0.7040, Train Accuracy: 0.6502, Val Loss: 0.7018, Val Accuracy: 0.6400\n", + "===== Epoch 1860/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8562. Train Loss: 0.7087, Train Accuracy: 0.6549, Val Loss: 0.6633, Val Accuracy: 0.6533\n", + "===== Epoch 1861/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8562. Train Loss: 0.7433, Train Accuracy: 0.6447, Val Loss: 0.6370, Val Accuracy: 0.7111\n", + "===== Epoch 1862/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8562. Train Loss: 0.7108, Train Accuracy: 0.6329, Val Loss: 0.7566, Val Accuracy: 0.5956\n", + "===== Epoch 1863/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8562. Train Loss: 0.7155, Train Accuracy: 0.6573, Val Loss: 0.6547, Val Accuracy: 0.6622\n", + "===== Epoch 1864/2000 =====\n", + "New best model saved with Val ROC AUC: 0.8661, Train Loss: 0.7220, Train Accuracy: 0.6392, Val Loss: 0.6386, Val Accuracy: 0.7244\n", + "===== Epoch 1865/2000 =====\n", + "No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8661. Train Loss: 0.7395, Train Accuracy: 0.6392, Val Loss: 0.6613, Val Accuracy: 0.6444\n", + "===== Epoch 1866/2000 =====\n", + "No improvement in Val ROC AUC for 2 epoch(s). Best is 0.8661. Train Loss: 0.7513, Train Accuracy: 0.6235, Val Loss: 0.6307, Val Accuracy: 0.7067\n", + "===== Epoch 1867/2000 =====\n", + "No improvement in Val ROC AUC for 3 epoch(s). Best is 0.8661. Train Loss: 0.7105, Train Accuracy: 0.6424, Val Loss: 0.6486, Val Accuracy: 0.6756\n", + "===== Epoch 1868/2000 =====\n", + "No improvement in Val ROC AUC for 4 epoch(s). Best is 0.8661. Train Loss: 0.7534, Train Accuracy: 0.6306, Val Loss: 0.6964, Val Accuracy: 0.6356\n", + "===== Epoch 1869/2000 =====\n", + "No improvement in Val ROC AUC for 5 epoch(s). Best is 0.8661. Train Loss: 0.7142, Train Accuracy: 0.6494, Val Loss: 0.6729, Val Accuracy: 0.6800\n", + "===== Epoch 1870/2000 =====\n", + "No improvement in Val ROC AUC for 6 epoch(s). Best is 0.8661. Train Loss: 0.7265, Train Accuracy: 0.6400, Val Loss: 0.7831, Val Accuracy: 0.6089\n", + "===== Epoch 1871/2000 =====\n", + "No improvement in Val ROC AUC for 7 epoch(s). Best is 0.8661. Train Loss: 0.7440, Train Accuracy: 0.6322, Val Loss: 0.6536, Val Accuracy: 0.6711\n", + "===== Epoch 1872/2000 =====\n", + "No improvement in Val ROC AUC for 8 epoch(s). Best is 0.8661. Train Loss: 0.7277, Train Accuracy: 0.6431, Val Loss: 0.7337, Val Accuracy: 0.6222\n", + "===== Epoch 1873/2000 =====\n", + "No improvement in Val ROC AUC for 9 epoch(s). Best is 0.8661. Train Loss: 0.7552, Train Accuracy: 0.6267, Val Loss: 0.7159, Val Accuracy: 0.6444\n", + "===== Epoch 1874/2000 =====\n", + "No improvement in Val ROC AUC for 10 epoch(s). Best is 0.8661. Train Loss: 0.7570, Train Accuracy: 0.6196, Val Loss: 0.6953, Val Accuracy: 0.6533\n", + "===== Epoch 1875/2000 =====\n", + "No improvement in Val ROC AUC for 11 epoch(s). Best is 0.8661. Train Loss: 0.7382, Train Accuracy: 0.6424, Val Loss: 0.6589, Val Accuracy: 0.7067\n", + "===== Epoch 1876/2000 =====\n", + "No improvement in Val ROC AUC for 12 epoch(s). Best is 0.8661. Train Loss: 0.7281, Train Accuracy: 0.6565, Val Loss: 0.7162, Val Accuracy: 0.6356\n", + "===== Epoch 1877/2000 =====\n", + "No improvement in Val ROC AUC for 13 epoch(s). Best is 0.8661. Train Loss: 0.7457, Train Accuracy: 0.6180, Val Loss: 0.6805, Val Accuracy: 0.6800\n", + "===== Epoch 1878/2000 =====\n", + "No improvement in Val ROC AUC for 14 epoch(s). Best is 0.8661. Train Loss: 0.7429, Train Accuracy: 0.6376, Val Loss: 0.7338, Val Accuracy: 0.6489\n", + "===== Epoch 1879/2000 =====\n", + "No improvement in Val ROC AUC for 15 epoch(s). Best is 0.8661. Train Loss: 0.7261, Train Accuracy: 0.6259, Val Loss: 0.7310, Val Accuracy: 0.6222\n", + "===== Epoch 1880/2000 =====\n", + "No improvement in Val ROC AUC for 16 epoch(s). Best is 0.8661. Train Loss: 0.7733, Train Accuracy: 0.6118, Val Loss: 0.8081, Val Accuracy: 0.6178\n", + "===== Epoch 1881/2000 =====\n", + "No improvement in Val ROC AUC for 17 epoch(s). Best is 0.8661. Train Loss: 0.7504, Train Accuracy: 0.6408, Val Loss: 0.6754, Val Accuracy: 0.6844\n", + "===== Epoch 1882/2000 =====\n", + "No improvement in Val ROC AUC for 18 epoch(s). Best is 0.8661. Train Loss: 0.7378, Train Accuracy: 0.6337, Val Loss: 0.6969, Val Accuracy: 0.6533\n", + "===== Epoch 1883/2000 =====\n", + "No improvement in Val ROC AUC for 19 epoch(s). Best is 0.8661. Train Loss: 0.7035, Train Accuracy: 0.6494, Val Loss: 0.7107, Val Accuracy: 0.6178\n", + "===== Epoch 1884/2000 =====\n", + "No improvement in Val ROC AUC for 20 epoch(s). Best is 0.8661. Train Loss: 0.7127, Train Accuracy: 0.6345, Val Loss: 0.6848, Val Accuracy: 0.6622\n", + "===== Epoch 1885/2000 =====\n", + "No improvement in Val ROC AUC for 21 epoch(s). Best is 0.8661. Train Loss: 0.7318, Train Accuracy: 0.6337, Val Loss: 0.6867, Val Accuracy: 0.6489\n", + "===== Epoch 1886/2000 =====\n", + "No improvement in Val ROC AUC for 22 epoch(s). Best is 0.8661. Train Loss: 0.7176, Train Accuracy: 0.6690, Val Loss: 0.7476, Val Accuracy: 0.6311\n", + "===== Epoch 1887/2000 =====\n", + "No improvement in Val ROC AUC for 23 epoch(s). Best is 0.8661. Train Loss: 0.7712, Train Accuracy: 0.6282, Val Loss: 0.7374, Val Accuracy: 0.6356\n", + "===== Epoch 1888/2000 =====\n", + "No improvement in Val ROC AUC for 24 epoch(s). Best is 0.8661. Train Loss: 0.7459, Train Accuracy: 0.6267, Val Loss: 0.6771, Val Accuracy: 0.6800\n", + "===== Epoch 1889/2000 =====\n", + "No improvement in Val ROC AUC for 25 epoch(s). Best is 0.8661. Train Loss: 0.7223, Train Accuracy: 0.6455, Val Loss: 0.7030, Val Accuracy: 0.6444\n", + "===== Epoch 1890/2000 =====\n", + "No improvement in Val ROC AUC for 26 epoch(s). Best is 0.8661. Train Loss: 0.7275, Train Accuracy: 0.6596, Val Loss: 0.6798, Val Accuracy: 0.6578\n", + "===== Epoch 1891/2000 =====\n", + "No improvement in Val ROC AUC for 27 epoch(s). Best is 0.8661. Train Loss: 0.7221, Train Accuracy: 0.6565, Val Loss: 0.6604, Val Accuracy: 0.6622\n", + "===== Epoch 1892/2000 =====\n", + "No improvement in Val ROC AUC for 28 epoch(s). Best is 0.8661. Train Loss: 0.7176, Train Accuracy: 0.6424, Val Loss: 0.6925, Val Accuracy: 0.6489\n", + "===== Epoch 1893/2000 =====\n", + "No improvement in Val ROC AUC for 29 epoch(s). Best is 0.8661. Train Loss: 0.7341, Train Accuracy: 0.6353, Val Loss: 0.8074, Val Accuracy: 0.6311\n", + "===== Epoch 1894/2000 =====\n", + "No improvement in Val ROC AUC for 30 epoch(s). Best is 0.8661. Train Loss: 0.7158, Train Accuracy: 0.6518, Val Loss: 0.6438, Val Accuracy: 0.6933\n", + "===== Epoch 1895/2000 =====\n", + "No improvement in Val ROC AUC for 31 epoch(s). Best is 0.8661. Train Loss: 0.6994, Train Accuracy: 0.6588, Val Loss: 0.7332, Val Accuracy: 0.6222\n", + "===== Epoch 1896/2000 =====\n", + "No improvement in Val ROC AUC for 32 epoch(s). Best is 0.8661. Train Loss: 0.7254, Train Accuracy: 0.6322, Val Loss: 0.6772, Val Accuracy: 0.6444\n", + "===== Epoch 1897/2000 =====\n", + "No improvement in Val ROC AUC for 33 epoch(s). Best is 0.8661. Train Loss: 0.7285, Train Accuracy: 0.6494, Val Loss: 0.7251, Val Accuracy: 0.6089\n", + "===== Epoch 1898/2000 =====\n", + "No improvement in Val ROC AUC for 34 epoch(s). Best is 0.8661. Train Loss: 0.7273, Train Accuracy: 0.6455, Val Loss: 0.6316, Val Accuracy: 0.6844\n", + "===== Epoch 1899/2000 =====\n", + "No improvement in Val ROC AUC for 35 epoch(s). Best is 0.8661. Train Loss: 0.7511, Train Accuracy: 0.6392, Val Loss: 0.6682, Val Accuracy: 0.6578\n", + "===== Epoch 1900/2000 =====\n", + "No improvement in Val ROC AUC for 36 epoch(s). Best is 0.8661. Train Loss: 0.7235, Train Accuracy: 0.6604, Val Loss: 0.6672, Val Accuracy: 0.6889\n", + "===== Epoch 1901/2000 =====\n", + "No improvement in Val ROC AUC for 37 epoch(s). Best is 0.8661. Train Loss: 0.7221, Train Accuracy: 0.6447, Val Loss: 0.6589, Val Accuracy: 0.6978\n", + "===== Epoch 1902/2000 =====\n", + "No improvement in Val ROC AUC for 38 epoch(s). Best is 0.8661. Train Loss: 0.7110, Train Accuracy: 0.6557, Val Loss: 0.6534, Val Accuracy: 0.6800\n", + "===== Epoch 1903/2000 =====\n", + "No improvement in Val ROC AUC for 39 epoch(s). Best is 0.8661. Train Loss: 0.7126, Train Accuracy: 0.6510, Val Loss: 0.6683, Val Accuracy: 0.7067\n", + "===== Epoch 1904/2000 =====\n", + "No improvement in Val ROC AUC for 40 epoch(s). Best is 0.8661. Train Loss: 0.7219, Train Accuracy: 0.6416, Val Loss: 0.6811, Val Accuracy: 0.6311\n", + "===== Epoch 1905/2000 =====\n", + "No improvement in Val ROC AUC for 41 epoch(s). Best is 0.8661. Train Loss: 0.7116, Train Accuracy: 0.6510, Val Loss: 0.6694, Val Accuracy: 0.6489\n", + "===== Epoch 1906/2000 =====\n", + "No improvement in Val ROC AUC for 42 epoch(s). Best is 0.8661. Train Loss: 0.7510, Train Accuracy: 0.6251, Val Loss: 0.7060, Val Accuracy: 0.6400\n", + "===== Epoch 1907/2000 =====\n", + "No improvement in Val ROC AUC for 43 epoch(s). Best is 0.8661. Train Loss: 0.7051, Train Accuracy: 0.6463, Val Loss: 0.7166, Val Accuracy: 0.6311\n", + "===== Epoch 1908/2000 =====\n", + "No improvement in Val ROC AUC for 44 epoch(s). Best is 0.8661. Train Loss: 0.6999, Train Accuracy: 0.6588, Val Loss: 0.6293, Val Accuracy: 0.7333\n", + "===== Epoch 1909/2000 =====\n", + "No improvement in Val ROC AUC for 45 epoch(s). Best is 0.8661. Train Loss: 0.7195, Train Accuracy: 0.6471, Val Loss: 0.6704, Val Accuracy: 0.6667\n", + "===== Epoch 1910/2000 =====\n", + "No improvement in Val ROC AUC for 46 epoch(s). Best is 0.8661. Train Loss: 0.7239, Train Accuracy: 0.6455, Val Loss: 0.6290, Val Accuracy: 0.7333\n", + "===== Epoch 1911/2000 =====\n", + "No improvement in Val ROC AUC for 47 epoch(s). Best is 0.8661. Train Loss: 0.7165, Train Accuracy: 0.6424, Val Loss: 0.6691, Val Accuracy: 0.6800\n", + "===== Epoch 1912/2000 =====\n", + "No improvement in Val ROC AUC for 48 epoch(s). Best is 0.8661. Train Loss: 0.7122, Train Accuracy: 0.6400, Val Loss: 0.6587, Val Accuracy: 0.6667\n", + "===== Epoch 1913/2000 =====\n", + "No improvement in Val ROC AUC for 49 epoch(s). Best is 0.8661. Train Loss: 0.7268, Train Accuracy: 0.6478, Val Loss: 0.7185, Val Accuracy: 0.6711\n", + "===== Epoch 1914/2000 =====\n", + "No improvement in Val ROC AUC for 50 epoch(s). Best is 0.8661. Train Loss: 0.7240, Train Accuracy: 0.6455, Val Loss: 0.6747, Val Accuracy: 0.6400\n", + "===== Epoch 1915/2000 =====\n", + "No improvement in Val ROC AUC for 51 epoch(s). Best is 0.8661. Train Loss: 0.7207, Train Accuracy: 0.6502, Val Loss: 0.6555, Val Accuracy: 0.6800\n", + "===== Epoch 1916/2000 =====\n", + "No improvement in Val ROC AUC for 52 epoch(s). Best is 0.8661. Train Loss: 0.6860, Train Accuracy: 0.6737, Val Loss: 0.6380, Val Accuracy: 0.6978\n", + "===== Epoch 1917/2000 =====\n", + "No improvement in Val ROC AUC for 53 epoch(s). Best is 0.8661. Train Loss: 0.7169, Train Accuracy: 0.6345, Val Loss: 0.6912, Val Accuracy: 0.6578\n", + "===== Epoch 1918/2000 =====\n", + "No improvement in Val ROC AUC for 54 epoch(s). Best is 0.8661. Train Loss: 0.6978, Train Accuracy: 0.6486, Val Loss: 0.6002, Val Accuracy: 0.6844\n", + "===== Epoch 1919/2000 =====\n", + "No improvement in Val ROC AUC for 55 epoch(s). Best is 0.8661. Train Loss: 0.7028, Train Accuracy: 0.6722, Val Loss: 0.6372, Val Accuracy: 0.6889\n", + "===== Epoch 1920/2000 =====\n", + "No improvement in Val ROC AUC for 56 epoch(s). Best is 0.8661. Train Loss: 0.6909, Train Accuracy: 0.6573, Val Loss: 0.6907, Val Accuracy: 0.6311\n", + "===== Epoch 1921/2000 =====\n", + "No improvement in Val ROC AUC for 57 epoch(s). Best is 0.8661. Train Loss: 0.7001, Train Accuracy: 0.6478, Val Loss: 0.6385, Val Accuracy: 0.6667\n", + "===== Epoch 1922/2000 =====\n", + "No improvement in Val ROC AUC for 58 epoch(s). Best is 0.8661. Train Loss: 0.6845, Train Accuracy: 0.6612, Val Loss: 0.6329, Val Accuracy: 0.7200\n", + "===== Epoch 1923/2000 =====\n", + "No improvement in Val ROC AUC for 59 epoch(s). Best is 0.8661. Train Loss: 0.6921, Train Accuracy: 0.6729, Val Loss: 0.6685, Val Accuracy: 0.6800\n", + "===== Epoch 1924/2000 =====\n", + "No improvement in Val ROC AUC for 60 epoch(s). Best is 0.8661. Train Loss: 0.6822, Train Accuracy: 0.6612, Val Loss: 0.6697, Val Accuracy: 0.7156\n", + "===== Epoch 1925/2000 =====\n", + "No improvement in Val ROC AUC for 61 epoch(s). Best is 0.8661. Train Loss: 0.7150, Train Accuracy: 0.6588, Val Loss: 0.6700, Val Accuracy: 0.6578\n", + "===== Epoch 1926/2000 =====\n", + "No improvement in Val ROC AUC for 62 epoch(s). Best is 0.8661. Train Loss: 0.6934, Train Accuracy: 0.6745, Val Loss: 0.6728, Val Accuracy: 0.6578\n", + "===== Epoch 1927/2000 =====\n", + "No improvement in Val ROC AUC for 63 epoch(s). Best is 0.8661. Train Loss: 0.6959, Train Accuracy: 0.6635, Val Loss: 0.6891, Val Accuracy: 0.6311\n", + "===== Epoch 1928/2000 =====\n", + "No improvement in Val ROC AUC for 64 epoch(s). Best is 0.8661. Train Loss: 0.6818, Train Accuracy: 0.6816, Val Loss: 0.6495, Val Accuracy: 0.6933\n", + "===== Epoch 1929/2000 =====\n", + "No improvement in Val ROC AUC for 65 epoch(s). Best is 0.8661. Train Loss: 0.6965, Train Accuracy: 0.6745, Val Loss: 0.6073, Val Accuracy: 0.7067\n", + "===== Epoch 1930/2000 =====\n", + "No improvement in Val ROC AUC for 66 epoch(s). Best is 0.8661. Train Loss: 0.6838, Train Accuracy: 0.6894, Val Loss: 0.6563, Val Accuracy: 0.6533\n", + "===== Epoch 1931/2000 =====\n", + "No improvement in Val ROC AUC for 67 epoch(s). Best is 0.8661. Train Loss: 0.6868, Train Accuracy: 0.6588, Val Loss: 0.6725, Val Accuracy: 0.6711\n", + "===== Epoch 1932/2000 =====\n", + "No improvement in Val ROC AUC for 68 epoch(s). Best is 0.8661. Train Loss: 0.6838, Train Accuracy: 0.6682, Val Loss: 0.6516, Val Accuracy: 0.6578\n", + "===== Epoch 1933/2000 =====\n", + "No improvement in Val ROC AUC for 69 epoch(s). Best is 0.8661. Train Loss: 0.6910, Train Accuracy: 0.6714, Val Loss: 0.6437, Val Accuracy: 0.6756\n", + "===== Epoch 1934/2000 =====\n", + "No improvement in Val ROC AUC for 70 epoch(s). Best is 0.8661. Train Loss: 0.6814, Train Accuracy: 0.6675, Val Loss: 0.7163, Val Accuracy: 0.6489\n", + "===== Epoch 1935/2000 =====\n", + "No improvement in Val ROC AUC for 71 epoch(s). Best is 0.8661. Train Loss: 0.6891, Train Accuracy: 0.6541, Val Loss: 0.6677, Val Accuracy: 0.6889\n", + "===== Epoch 1936/2000 =====\n", + "No improvement in Val ROC AUC for 72 epoch(s). Best is 0.8661. Train Loss: 0.6820, Train Accuracy: 0.6612, Val Loss: 0.6390, Val Accuracy: 0.7067\n", + "===== Epoch 1937/2000 =====\n", + "No improvement in Val ROC AUC for 73 epoch(s). Best is 0.8661. Train Loss: 0.6871, Train Accuracy: 0.6573, Val Loss: 0.6092, Val Accuracy: 0.7244\n", + "===== Epoch 1938/2000 =====\n", + "No improvement in Val ROC AUC for 74 epoch(s). Best is 0.8661. Train Loss: 0.6725, Train Accuracy: 0.6784, Val Loss: 0.6406, Val Accuracy: 0.6978\n", + "===== Epoch 1939/2000 =====\n", + "No improvement in Val ROC AUC for 75 epoch(s). Best is 0.8661. Train Loss: 0.6834, Train Accuracy: 0.6729, Val Loss: 0.6717, Val Accuracy: 0.6667\n", + "===== Epoch 1940/2000 =====\n", + "No improvement in Val ROC AUC for 76 epoch(s). Best is 0.8661. Train Loss: 0.6984, Train Accuracy: 0.6478, Val Loss: 0.6554, Val Accuracy: 0.6622\n", + "===== Epoch 1941/2000 =====\n", + "No improvement in Val ROC AUC for 77 epoch(s). Best is 0.8661. Train Loss: 0.6809, Train Accuracy: 0.6682, Val Loss: 0.6034, Val Accuracy: 0.7289\n", + "===== Epoch 1942/2000 =====\n", + "No improvement in Val ROC AUC for 78 epoch(s). Best is 0.8661. Train Loss: 0.6784, Train Accuracy: 0.6902, Val Loss: 0.6605, Val Accuracy: 0.6711\n", + "===== Epoch 1943/2000 =====\n", + "No improvement in Val ROC AUC for 79 epoch(s). Best is 0.8661. Train Loss: 0.6824, Train Accuracy: 0.6737, Val Loss: 0.6471, Val Accuracy: 0.7111\n", + "===== Epoch 1944/2000 =====\n", + "No improvement in Val ROC AUC for 80 epoch(s). Best is 0.8661. Train Loss: 0.6707, Train Accuracy: 0.6847, Val Loss: 0.6348, Val Accuracy: 0.6622\n", + "===== Epoch 1945/2000 =====\n", + "No improvement in Val ROC AUC for 81 epoch(s). Best is 0.8661. Train Loss: 0.6912, Train Accuracy: 0.6557, Val Loss: 0.6655, Val Accuracy: 0.6489\n", + "===== Epoch 1946/2000 =====\n", + "No improvement in Val ROC AUC for 82 epoch(s). Best is 0.8661. Train Loss: 0.6730, Train Accuracy: 0.6659, Val Loss: 0.6558, Val Accuracy: 0.6800\n", + "===== Epoch 1947/2000 =====\n", + "No improvement in Val ROC AUC for 83 epoch(s). Best is 0.8661. Train Loss: 0.6970, Train Accuracy: 0.6627, Val Loss: 0.6842, Val Accuracy: 0.6667\n", + "===== Epoch 1948/2000 =====\n", + "No improvement in Val ROC AUC for 84 epoch(s). Best is 0.8661. Train Loss: 0.6779, Train Accuracy: 0.6714, Val Loss: 0.6124, Val Accuracy: 0.7067\n", + "===== Epoch 1949/2000 =====\n", + "No improvement in Val ROC AUC for 85 epoch(s). Best is 0.8661. Train Loss: 0.6770, Train Accuracy: 0.6698, Val Loss: 0.6456, Val Accuracy: 0.6622\n", + "===== Epoch 1950/2000 =====\n", + "No improvement in Val ROC AUC for 86 epoch(s). Best is 0.8661. Train Loss: 0.6853, Train Accuracy: 0.6604, Val Loss: 0.6578, Val Accuracy: 0.6533\n", + "===== Epoch 1951/2000 =====\n", + "No improvement in Val ROC AUC for 87 epoch(s). Best is 0.8661. Train Loss: 0.6891, Train Accuracy: 0.6808, Val Loss: 0.6312, Val Accuracy: 0.7156\n", + "===== Epoch 1952/2000 =====\n", + "No improvement in Val ROC AUC for 88 epoch(s). Best is 0.8661. Train Loss: 0.7069, Train Accuracy: 0.6557, Val Loss: 0.6511, Val Accuracy: 0.6978\n", + "===== Epoch 1953/2000 =====\n", + "No improvement in Val ROC AUC for 89 epoch(s). Best is 0.8661. Train Loss: 0.6880, Train Accuracy: 0.6698, Val Loss: 0.6695, Val Accuracy: 0.6711\n", + "===== Epoch 1954/2000 =====\n", + "No improvement in Val ROC AUC for 90 epoch(s). Best is 0.8661. Train Loss: 0.6687, Train Accuracy: 0.6831, Val Loss: 0.6957, Val Accuracy: 0.6444\n", + "===== Epoch 1955/2000 =====\n", + "No improvement in Val ROC AUC for 91 epoch(s). Best is 0.8661. Train Loss: 0.6871, Train Accuracy: 0.6690, Val Loss: 0.6651, Val Accuracy: 0.7022\n", + "===== Epoch 1956/2000 =====\n", + "No improvement in Val ROC AUC for 92 epoch(s). Best is 0.8661. Train Loss: 0.7066, Train Accuracy: 0.6471, Val Loss: 0.6303, Val Accuracy: 0.7156\n", + "===== Epoch 1957/2000 =====\n", + "No improvement in Val ROC AUC for 93 epoch(s). Best is 0.8661. Train Loss: 0.6692, Train Accuracy: 0.6706, Val Loss: 0.6612, Val Accuracy: 0.6800\n", + "===== Epoch 1958/2000 =====\n", + "No improvement in Val ROC AUC for 94 epoch(s). Best is 0.8661. Train Loss: 0.6918, Train Accuracy: 0.6776, Val Loss: 0.7065, Val Accuracy: 0.6533\n", + "===== Epoch 1959/2000 =====\n", + "No improvement in Val ROC AUC for 95 epoch(s). Best is 0.8661. Train Loss: 0.6941, Train Accuracy: 0.6651, Val Loss: 0.6879, Val Accuracy: 0.6622\n", + "===== Epoch 1960/2000 =====\n", + "No improvement in Val ROC AUC for 96 epoch(s). Best is 0.8661. Train Loss: 0.7157, Train Accuracy: 0.6486, Val Loss: 0.6280, Val Accuracy: 0.7111\n", + "===== Epoch 1961/2000 =====\n", + "No improvement in Val ROC AUC for 97 epoch(s). Best is 0.8661. Train Loss: 0.6850, Train Accuracy: 0.6549, Val Loss: 0.6570, Val Accuracy: 0.6756\n", + "===== Epoch 1962/2000 =====\n", + "No improvement in Val ROC AUC for 98 epoch(s). Best is 0.8661. Train Loss: 0.6914, Train Accuracy: 0.6651, Val Loss: 0.6346, Val Accuracy: 0.7022\n", + "===== Epoch 1963/2000 =====\n", + "No improvement in Val ROC AUC for 99 epoch(s). Best is 0.8661. Train Loss: 0.6921, Train Accuracy: 0.6776, Val Loss: 0.6717, Val Accuracy: 0.6933\n", + "===== Epoch 1964/2000 =====\n", + "No improvement in Val ROC AUC for 100 epoch(s). Best is 0.8661. Train Loss: 0.7042, Train Accuracy: 0.6682, Val Loss: 0.6319, Val Accuracy: 0.6889\n", + "===== Epoch 1965/2000 =====\n", + "No improvement in Val ROC AUC for 101 epoch(s). Best is 0.8661. Train Loss: 0.6759, Train Accuracy: 0.6722, Val Loss: 0.6705, Val Accuracy: 0.6711\n", + "===== Epoch 1966/2000 =====\n", + "No improvement in Val ROC AUC for 102 epoch(s). Best is 0.8661. Train Loss: 0.7193, Train Accuracy: 0.6486, Val Loss: 0.6677, Val Accuracy: 0.6756\n", + "===== Epoch 1967/2000 =====\n", + "No improvement in Val ROC AUC for 103 epoch(s). Best is 0.8661. Train Loss: 0.7010, Train Accuracy: 0.6690, Val Loss: 0.6959, Val Accuracy: 0.6489\n", + "===== Epoch 1968/2000 =====\n", + "No improvement in Val ROC AUC for 104 epoch(s). Best is 0.8661. Train Loss: 0.7116, Train Accuracy: 0.6518, Val Loss: 0.6123, Val Accuracy: 0.7244\n", + "===== Epoch 1969/2000 =====\n", + "No improvement in Val ROC AUC for 105 epoch(s). Best is 0.8661. Train Loss: 0.7139, Train Accuracy: 0.6502, Val Loss: 0.6871, Val Accuracy: 0.6667\n", + "===== Epoch 1970/2000 =====\n", + "No improvement in Val ROC AUC for 106 epoch(s). Best is 0.8661. Train Loss: 0.7118, Train Accuracy: 0.6635, Val Loss: 0.6483, Val Accuracy: 0.6578\n", + "===== Epoch 1971/2000 =====\n", + "No improvement in Val ROC AUC for 107 epoch(s). Best is 0.8661. Train Loss: 0.6890, Train Accuracy: 0.6533, Val Loss: 0.6418, Val Accuracy: 0.7156\n", + "===== Epoch 1972/2000 =====\n", + "No improvement in Val ROC AUC for 108 epoch(s). Best is 0.8661. Train Loss: 0.7000, Train Accuracy: 0.6525, Val Loss: 0.7315, Val Accuracy: 0.6311\n", + "===== Epoch 1973/2000 =====\n", + "No improvement in Val ROC AUC for 109 epoch(s). Best is 0.8661. Train Loss: 0.7002, Train Accuracy: 0.6612, Val Loss: 0.7611, Val Accuracy: 0.6000\n", + "===== Epoch 1974/2000 =====\n", + "No improvement in Val ROC AUC for 110 epoch(s). Best is 0.8661. Train Loss: 0.6957, Train Accuracy: 0.6533, Val Loss: 0.7047, Val Accuracy: 0.6444\n", + "===== Epoch 1975/2000 =====\n", + "No improvement in Val ROC AUC for 111 epoch(s). Best is 0.8661. Train Loss: 0.6909, Train Accuracy: 0.6651, Val Loss: 0.6687, Val Accuracy: 0.6844\n", + "===== Epoch 1976/2000 =====\n", + "No improvement in Val ROC AUC for 112 epoch(s). Best is 0.8661. Train Loss: 0.7043, Train Accuracy: 0.6455, Val Loss: 0.6284, Val Accuracy: 0.6978\n", + "===== Epoch 1977/2000 =====\n", + "No improvement in Val ROC AUC for 113 epoch(s). Best is 0.8661. Train Loss: 0.7205, Train Accuracy: 0.6369, Val Loss: 0.6365, Val Accuracy: 0.6711\n", + "===== Epoch 1978/2000 =====\n", + "No improvement in Val ROC AUC for 114 epoch(s). Best is 0.8661. Train Loss: 0.7109, Train Accuracy: 0.6627, Val Loss: 0.6807, Val Accuracy: 0.6533\n", + "===== Epoch 1979/2000 =====\n", + "No improvement in Val ROC AUC for 115 epoch(s). Best is 0.8661. Train Loss: 0.7129, Train Accuracy: 0.6424, Val Loss: 0.6238, Val Accuracy: 0.7156\n", + "===== Epoch 1980/2000 =====\n", + "No improvement in Val ROC AUC for 116 epoch(s). Best is 0.8661. Train Loss: 0.7097, Train Accuracy: 0.6455, Val Loss: 0.6586, Val Accuracy: 0.6844\n", + "===== Epoch 1981/2000 =====\n", + "No improvement in Val ROC AUC for 117 epoch(s). Best is 0.8661. Train Loss: 0.6945, Train Accuracy: 0.6471, Val Loss: 0.6825, Val Accuracy: 0.6667\n", + "===== Epoch 1982/2000 =====\n", + "No improvement in Val ROC AUC for 118 epoch(s). Best is 0.8661. Train Loss: 0.7042, Train Accuracy: 0.6431, Val Loss: 0.8068, Val Accuracy: 0.6133\n", + "===== Epoch 1983/2000 =====\n", + "No improvement in Val ROC AUC for 119 epoch(s). Best is 0.8661. Train Loss: 0.7693, Train Accuracy: 0.6227, Val Loss: 0.6607, Val Accuracy: 0.6667\n", + "===== Epoch 1984/2000 =====\n", + "No improvement in Val ROC AUC for 120 epoch(s). Best is 0.8661. Train Loss: 0.7086, Train Accuracy: 0.6690, Val Loss: 0.7193, Val Accuracy: 0.6356\n", + "===== Epoch 1985/2000 =====\n", + "No improvement in Val ROC AUC for 121 epoch(s). Best is 0.8661. Train Loss: 0.6864, Train Accuracy: 0.6651, Val Loss: 0.6656, Val Accuracy: 0.6489\n", + "===== Epoch 1986/2000 =====\n", + "No improvement in Val ROC AUC for 122 epoch(s). Best is 0.8661. Train Loss: 0.7187, Train Accuracy: 0.6471, Val Loss: 0.6730, Val Accuracy: 0.6311\n", + "===== Epoch 1987/2000 =====\n", + "No improvement in Val ROC AUC for 123 epoch(s). Best is 0.8661. Train Loss: 0.6980, Train Accuracy: 0.6541, Val Loss: 0.6364, Val Accuracy: 0.7022\n", + "===== Epoch 1988/2000 =====\n", + "No improvement in Val ROC AUC for 124 epoch(s). Best is 0.8661. Train Loss: 0.7081, Train Accuracy: 0.6690, Val Loss: 0.6610, Val Accuracy: 0.6889\n", + "===== Epoch 1989/2000 =====\n", + "No improvement in Val ROC AUC for 125 epoch(s). Best is 0.8661. Train Loss: 0.7001, Train Accuracy: 0.6596, Val Loss: 0.6844, Val Accuracy: 0.6578\n", + "===== Epoch 1990/2000 =====\n", + "No improvement in Val ROC AUC for 126 epoch(s). Best is 0.8661. Train Loss: 0.6803, Train Accuracy: 0.6761, Val Loss: 0.6161, Val Accuracy: 0.7244\n", + "===== Epoch 1991/2000 =====\n", + "No improvement in Val ROC AUC for 127 epoch(s). Best is 0.8661. Train Loss: 0.6983, Train Accuracy: 0.6510, Val Loss: 0.6490, Val Accuracy: 0.6933\n", + "===== Epoch 1992/2000 =====\n", + "No improvement in Val ROC AUC for 128 epoch(s). Best is 0.8661. Train Loss: 0.7086, Train Accuracy: 0.6659, Val Loss: 0.6251, Val Accuracy: 0.6978\n", + "===== Epoch 1993/2000 =====\n", + "No improvement in Val ROC AUC for 129 epoch(s). Best is 0.8661. Train Loss: 0.7188, Train Accuracy: 0.6416, Val Loss: 0.6767, Val Accuracy: 0.6622\n", + "===== Epoch 1994/2000 =====\n", + "No improvement in Val ROC AUC for 130 epoch(s). Best is 0.8661. Train Loss: 0.6899, Train Accuracy: 0.6471, Val Loss: 0.6818, Val Accuracy: 0.6933\n", + "===== Epoch 1995/2000 =====\n", + "No improvement in Val ROC AUC for 131 epoch(s). Best is 0.8661. Train Loss: 0.7218, Train Accuracy: 0.6659, Val Loss: 0.6744, Val Accuracy: 0.6489\n", + "===== Epoch 1996/2000 =====\n", + "No improvement in Val ROC AUC for 132 epoch(s). Best is 0.8661. Train Loss: 0.7105, Train Accuracy: 0.6439, Val Loss: 0.6889, Val Accuracy: 0.6844\n", + "===== Epoch 1997/2000 =====\n", + "No improvement in Val ROC AUC for 133 epoch(s). Best is 0.8661. Train Loss: 0.6956, Train Accuracy: 0.6486, Val Loss: 0.6619, Val Accuracy: 0.7067\n", + "===== Epoch 1998/2000 =====\n", + "No improvement in Val ROC AUC for 134 epoch(s). Best is 0.8661. Train Loss: 0.7152, Train Accuracy: 0.6431, Val Loss: 0.6319, Val Accuracy: 0.7244\n", + "===== Epoch 1999/2000 =====\n", + "No improvement in Val ROC AUC for 135 epoch(s). Best is 0.8661. Train Loss: 0.6914, Train Accuracy: 0.6643, Val Loss: 0.6577, Val Accuracy: 0.6889\n", + "===== Epoch 2000/2000 =====\n", + "No improvement in Val ROC AUC for 136 epoch(s). Best is 0.8661. Train Loss: 0.7051, Train Accuracy: 0.6682, Val Loss: 0.6653, Val Accuracy: 0.6844\n", + "\n", + "Training Complete!\n", + "\n", + "ROC curve plot saved as roc_curve.png\n" + ] + }, + { + "data": { + "image/png": "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/vw5ihcvbrTzFboky9bWFoDygbSzsxM5GiIiIiIiEktMTAw8PT1VOYKxFLokK32KoJ2dHZMsIiIiIiIy+jIiFr4gIiIiIiIyIiZZRERERERERsQki4iIiIiIyIiYZBERERERERkRkywiIiIiIiIjYpJFRERERERkREyyiIiIiIiIjIhJFhERERERkRExySIiIiIiIjIiJllERERERERGxCSLiIiIiIjIiJhkERERERERGRGTLCIiIiIiIiNikkVERERERGRETLKIiIiIiIiMiEkWERERERGRETHJIiIiIiIiMiImWUREREREREbEJIuIiIiIiMiImGQREREREREZEZMsIiIiIiIiI2KSRUREREREZESiJllnzpxBu3bt4OHhAYlEgj179mTZ59SpU6hRowbMzc1RunRprF+/PsfjJCIiIiIi0peJmHceHx+PqlWron///ujUqVOWx4eEhKBNmzYYOnQotmzZguPHj2PgwIFwd3dHy5YtcyFiIiIiov+cfg5suws8i37fNqgq0Kms7n6HQoAlVzXbV7QAvO119/3uInDuhXpbEUtgc9us4+20B0hMVW9r4QOM9dXd785b4KuTmu2T6wKNPTWat2z5G7t330NcXArwKg54HQcAMJdKsK9mCeVBuzoA1qZa765Pn98RFhYP3HsHxCvjre9ohemlnYFyRYBFn2nt9+JFDAYM2AfIFcCNN6r2UV5OaOtiC/SoAPSuqLXv3r33sHz5VSAyCXgSpWrfUKUY3MxNgAWfAhWKau07bdoJBAe/Uj4P3iYCAIpZmGJtZQ/A0hTY3UFrPwD4/PMtkMsF4FY4kCIHAPzPxRYjvJyAhsWBKfW09rtxIxSTJh1T/n/eeadqn1nGGXUcrIDRvkArH619V6++hqCgO0BYPPAiVtX+Z80SMJFKgI1tAGcrrX2HDt2PkJAo4GEkEJMMAKhqZ4EfP3EFStgBq7R/Ho+ISET37r8pr/wVqmofUNwBXd3tgQ5lgSFVtfY9evQx5s+/qLy/h5Gq9hUV3VHSygyY1QjwddPa9/vvz+HkyafK3zMsHgDgaCrD9mrFlQcc9NfazxhETbJat26N1q1b6338ypUr4ePjgwULFgAAypcvj3PnzmHRokVMsoiIiCj3nH4OdPsDSFOot/8vPuu+4QnA1TDN9qS0rPs+jtLs626ddT8AuB4GxGVIsj4p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iIiI9HDjxg2UL18e5ubmqra+ffuid+/eLG5BVAjxVU+ie/jwHVavvqbW9uZNPM6ceQYnJ0uRoiIiIsqaIAhYunQpateujfHjx2vczgSLqHDiSBZ9nEMhQHiCepuzFdDKR+9TTJhwFKmpCo32du0+gZ2duZYeRERE4ouOjsbAgQOxa9cuAMCyZcvQpk0btGrVSuTIiEhsTLLo4yy5ClwNU2/zddU7yQoPj8flyy812k1MpJg7lwuEiYgob7px4wb8/f3x6NEjVdtXX33F4hZEBIDTBUlkzs7WePBgJCZPbgjzD/bXGjGiFsqVKypiZERERJoEQcCvv/6KunXrqhIsBwcH7NmzB/Pnz4epqanIERJRXsCRLBKdra055sxpikGDamDixGM4cSIEgYF+YodF2twPAi4EAimx4tx//Gtx7peICEBcXByGDRuGzZs3q9p8fX2xc+dO+PjoP02eiAo+JlmUZ/j4OCIoyB9v3sSz4EVedSEQiLgndhSAma3YERBRIfPy5Us0b94cd+/eVbWNHDkS8+fPV6soSEQEMMmiPMjFxVrsECgz6SNYEilg7S5ODGa2QINZ4tw3ERVaLi4uKFKkCADA1tYWq1evRteuXUWOiojyKiZZ9HFWtACS0tTbLPi0KvCs3YEhL8SOgogo15iammL79u344osv8PPPP6Ns2bJih0REeRg/DdPH8bbP8pC0NAWmTj2BXr2qoFIll1wIioiI6OPcv38fSUlJqFq1qqqtWLFiOHr0qIhREVF+weqClGMiIxOxaNFFlCmzFD/8cB6ff74Fr16JVDCBiIhIT9u3b4evry86deqEqKgoscMhonyISRbliNevY1Gs2EKMG3cET59GAQCeP49BmzZbERubLG5wREREWiQlJWH48OHo3r074uLi8OTJE3z77bdih0VE+RCTLMoR7u628PX10Gi/cSMU/v5BSE2VixAVERGRdk+ePEGDBg2wYsUKVVvv3r0xe/ZsEaMiovyKa7KM7OqjFOwNTkBSqqBqi04QdPQouEaMqIWzZ//VaD958in++us16tYtLkJURERE6n7//Xf069cP0dHRAAALCwssXboUAwYMgEQiETk6IsqPOJJlZHuDExAapUBUvKC6CP/lWBamheuNumPH8nB1VS/H7uPjgOPH+zDBIiIi0aWkpGDcuHHo1KmTKsEqU6YMLl26hIED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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"\"\"\n", + "Args:\n", + " image_size (int): Size of the input image (e.g., 224).\n", + " patch_size (int): Size of each patch (e.g., 16).\n", + " in_channels (int): Number of input channels (e.g., 1 for your task).\n", + " num_classes (int): Number of output classes (e.g., 3 for your task).\n", + " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", + " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", + " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", + " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", + " dropout (float): Dropout probability.\n", + "\"\"\"\n", + "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", + "batch_size = 32\n", + "learning_rate = 1e-4\n", + "weight_decay = 0.05\n", + "num_epochs = 2000\n", + "warmup_epochs = 10\n", + "model = SwinTransformerForClassification(\n", + " img_size=(150, 150),\n", + " patch_size=(10, 10),\n", + " in_chans=1,\n", + " num_classes=3,\n", + " embed_dim=48,\n", + " depths=[2, 2, 2],\n", + " num_heads=[3, 6, 12],\n", + " window_size=(5, 5),\n", + " use_relativistic_encoder=False, # <-- Set to True\n", + " relativistic_encoder_blocks=0 # <-- Hyperparameter for the new encoder\n", + " )\n", + "\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n", + "\n", + "\n", + "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", + "def warmup_lambda(current_epoch):\n", + " if current_epoch < warmup_epochs:\n", + " return float(current_epoch) / float(max(1, warmup_epochs))\n", + " return 1.0\n", + "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", + "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", + "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", + "\n", + "\n", + "print(\"Optimizer: Adam\")\n", + "print(f\"Learning Rate: {learning_rate}\")\n", + "\n", + "# Train Model\n", + "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G_-lEQtu_txF" + }, + "source": [ + "\"\"\" ROC Curve Plotting Function\"\"\"\n", + "def plot_roc_curve(all_preds, all_labels):\n", + " print(\"Generating ROC Curve\")\n", + "\n", + " # Convert predictions and labels to numpy arrays\n", + " all_preds = np.array(all_preds)\n", + " all_labels = np.array(all_labels)\n", + "\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " n_classes = 3\n", + "\n", + " for i in range(n_classes):\n", + " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", + "\n", + " # Plot ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + " colors = ['blue', 'red', 'green']\n", + " class_names = ['Axion', 'CDM', 'No Substructure']\n", + "\n", + " for i, color in zip(range(n_classes), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color,\n", + " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve_swin.png')\n", + " plt.close()\n", + "\n", + " print(\"ROC Curve saved as roc_curve.png\")\n", + "\n", + "\n", + "plot_roc_curve(all_probs, all_labels)\n", + "\n", + "print(\"Training and Evaluation Complete!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MZ59pFZa_txG" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "machine_shape": "hm", + "provenance": [ + { + "file_id": "1ghkT6ZbFHFHhRUGGQefyNf9CpDdFjamf", + "timestamp": 1756322133533 + }, + { + "file_id": "1wEko_Ik-lhlsW1rYndRXwX-Mgx9jST28", + "timestamp": 1756243482189 + } + ] + }, + "kernelspec": { + "display_name": "Python 3", + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/VisionTransformerBasic/vision_transformer_basic.ipynb b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/VisionTransformerBasic/vision_transformer_basic.ipynb index 251baf5..4515999 100644 --- a/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/VisionTransformerBasic/vision_transformer_basic.ipynb +++ b/DeepLense_Gravitational_Lens_Classification_Transformers_Dhruv_Srivastava/VisionTransformerBasic/vision_transformer_basic.ipynb @@ -1,1909 +1,1900 @@ { - "cells": [ - { - "cell_type": "markdown", - "source": [], - "metadata": { - "id": "X7Ekxmo1XV5I" - } - }, - { - "cell_type": "code", - "source": [ - "from google.colab import drive\n", - "drive.mount('/content/drive')" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "_mFRKD8F__hl", - "outputId": "0495f67f-8d6b-4160-c594-cceaab989d2a" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Mounted at /content/drive\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "!cd /content/drive/MyDrive/Model_III_data/Model_III/axion\n", - "!ls -1q /content/drive/MyDrive/Model_III_data/Model_III/no_sub | wc -l" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "DMbel4LB8oLb", - "outputId": "7cc98f45-8719-4e02-c747-c15d4c1ff05c" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "30000\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "!ls /content/drive/MyDrive/Model_III_data/Model_III/" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "9l0m91pCBpI1", - "outputId": "483f3706-70d6-4eaf-efaf-23bb1238f35a" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "ls: cannot access '/content/drive/MyDrive/Model_III_data/Model_III/': No such file or directory\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "#Extract tarfile\n", - "import shutil\n", - "shutil.unpack_archive('/content/drive/MyDrive/Model_III.tgz', '/content/drive/MyDrive/Model_III_dataset')" - ], - "metadata": { - "id": "_HwTHNYYAoBC" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "vRM2kxST8KJZ" - }, - "outputs": [], - "source": [ - "\"\"\"\n", - "GSoC 2025 Internship Application Task - 1\n", - "Author: Dhruv Srivastava\n", - "\"\"\"\n", - "\n", - "\"\"\"Import dependencies\"\"\"\n", - "import os\n", - "import numpy as np\n", - "import torch\n", - "import torch.nn as nn\n", - "import torch.optim as optim\n", - "from torch.utils.data import Dataset, DataLoader\n", - "from torchvision.models import resnet18\n", - "from sklearn.metrics import roc_curve, auc\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9Dm6SC1o_txB" - }, - "outputs": [], - "source": [ - "\"\"\"Define Dataset Class for Vision Transformer with Debugging\"\"\"\n", - "class MyDatasetViT(Dataset):\n", - " def __init__(self, data_dir, transform=None):\n", - " self.data = []\n", - " self.labels = []\n", - " self.class_names = ['axion', 'cdm', 'no_sub']\n", - " self.transform = transform\n", - "\n", - " print(f\"Loading dataset from: {data_dir}\")\n", - " print(f\"Looking for classes: {self.class_names}\")\n", - "\n", - " for idx, class_name in enumerate(self.class_names):\n", - " class_dir = os.path.join(data_dir, class_name)\n", - " print(f\"--- Processing class: {class_name} ---\")\n", - "\n", - " if not os.path.exists(class_dir):\n", - " print(f\"[ERROR] Directory not found: {class_dir}\")\n", - " continue\n", - "\n", - " files = os.listdir(class_dir)\n", - "\n", - " for file_name in files:\n", - " if file_name.endswith('.npy'):\n", - " file_path = os.path.join(class_dir, file_name)\n", - " loaded_data = np.load(file_path, allow_pickle=True)\n", - "\n", - " if class_name == 'axion':\n", - " image = loaded_data[0]\n", - " else:\n", - " image = loaded_data\n", - "\n", - " # [DEBUG] Print the shape of the raw numpy array\n", - " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", - "\n", - " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", - " if image.ndim != 2:\n", - " image = np.squeeze(image)\n", - "\n", - " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", - " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", - "\n", - " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", - " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", - "\n", - " self.data.append(image_tensor)\n", - " self.labels.append(idx)\n", - "\n", - " print(\"\\n--- Dataset Loading Complete ---\")\n", - " print(f\"Total images loaded: {len(self.data)}\")\n", - "\n", - " def __len__(self):\n", - " return len(self.data)\n", - "\n", - " def __getitem__(self, idx):\n", - " \"\"\"\n", - " This method is called by the DataLoader to get one item from the dataset.\n", - " The debug prints here are CRITICAL for finding the error.\n", - " \"\"\"\n", - " #print(f\"--- Getting item index: {idx} ---\")\n", - "\n", - " # Retrieve the pre-loaded tensor and its label\n", - " image = self.data[idx]\n", - " label = self.labels[idx]\n", - "\n", - " # [DEBUG] Print shape BEFORE the transform is applied\n", - " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", - "\n", - " # Apply transformations (e.g., resizing) if they are provided\n", - " if self.transform:\n", - " image = self.transform(image)\n", - " # [DEBUG] Print shape AFTER the transform is applied\n", - " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", - " else:\n", - " #print(\" [DEBUG] No transform was applied.\")\n", - " pass\n", - "\n", - " return image, label" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "VJEgowwT_txC", - "outputId": "de7672d2-1191-4930-adc3-37c424d0ad7c", - "colab": { - "base_uri": "https://localhost:8080/" - } - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n" - ] - } - ], - "source": [ - "# Import the transforms module\n", - "from torchvision import transforms\n", - "# Hyperparameters\n", - "batch_size = 32\n", - "learning_rate = 0.001\n", - "num_epochs = 100\n", - "\n", - "# Data Directories\n", - "train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n", - "#val_dir = '../dataset/dataset/val'\n", - "\n", - "print(f\"Training Directory: {train_dir}\")\n", - "#print(f\"Validation Directory: {val_dir}\")\n", - "\n", - "vit_transforms = transforms.Compose([\n", - " transforms.Resize((64, 64), antialias=True)\n", - "])\n", - "\n", - "# Create Datasets and Dataloaders\n", - "#train_dataset = MyDataset(train_dir)\n", - "#val_dataset = MyDataset(val_dir)\n", - "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", - "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", - "\n", - "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", - "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", - "\n", - "#print(f\"Batch Size: {batch_size}\")\n", - "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", - "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", - "\n", - "#Save the dataloader so that we don't have to bear with this pain again\n", - "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", - "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" - ] - }, - { - "cell_type": "code", - "source": [ - "#import data loaders from file\n", - "train_loader = torch.load('/content/drive/MyDrive/Model_III_dataset/train_loader.pth', weights_only=False)\n", - "val_loader = torch.load('/content/drive/MyDrive/Model_III_dataset/val_loader.pth', weights_only=False)" - ], - "metadata": { - "id": "gvqsjdgzKmOL" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "y6Q9I1Hw_txD", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "3cbb9dc6-5dc1-4d81-cc79-3feb9bd3cf9f" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n", - " warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n" - ] - } - ], - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "from timm.models.layers import DropPath\n", - "\n", - "class PatchEmbedding(nn.Module):\n", - " def __init__(self, image_size, patch_size, in_channels, embed_dim):\n", - " super().__init__()\n", - " self.image_size = image_size\n", - " self.patch_size = patch_size\n", - " self.num_patches = (image_size // patch_size) ** 2\n", - "\n", - " self.projection = nn.Conv2d(\n", - " in_channels,\n", - " embed_dim,\n", - " kernel_size=patch_size,\n", - " stride=patch_size\n", - " )\n", - "\n", - " self.cls_token = nn.Parameter(torch.randn(1, 1, embed_dim))\n", - " self.positional_embedding = nn.Parameter(torch.randn(1, self.num_patches + 1, embed_dim))\n", - "\n", - " def forward(self, x):\n", - " # (B, C, H, W) -> (B, E, N_patches_sqrt, N_patches_sqrt)\n", - " x = self.projection(x)\n", - " # (B, E, N_patches_sqrt, N_patches_sqrt) -> (B, E, N)\n", - " x = x.flatten(2)\n", - " # (B, E, N) -> (B, N, E)\n", - " x = x.transpose(1, 2)\n", - "\n", - " # --- FIX IS HERE ---\n", - " # Get the batch size from the input tensor x\n", - " batch_size = x.shape[0]\n", - " # Expand the CLS token to match the batch size\n", - " cls_tokens = self.cls_token.expand(batch_size, -1, -1)\n", - "\n", - " # Prepend the CLS token to the patch embeddings\n", - " x = torch.cat((cls_tokens, x), dim=1)\n", - "\n", - " # Add positional embeddings\n", - " x = x + self.positional_embedding\n", - "\n", - " return x\n", - "\n", - "class MultiHeadAttention(nn.Module):\n", - " def __init__(self, embed_dim, num_heads, dropout=0.1):\n", - " super().__init__()\n", - " assert embed_dim % num_heads == 0, \"Embedding dimension must be divisible by number of heads.\"\n", - "\n", - " self.num_heads = num_heads\n", - " self.head_dim = embed_dim // num_heads\n", - " self.scale = self.head_dim ** -0.5\n", - "\n", - " self.qkv = nn.Linear(embed_dim, embed_dim * 3)\n", - " self.attn_dropout = nn.Dropout(dropout)\n", - " self.proj = nn.Linear(embed_dim, embed_dim)\n", - " self.proj_dropout = nn.Dropout(dropout)\n", - "\n", - " def forward(self, x):\n", - " B, N, C = x.shape\n", - "\n", - " qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)\n", - "\n", - " # --- FIX IS HERE ---\n", - " # Unpack q, k, v from the first dimension\n", - " q, k, v = qkv[0], qkv[1], qkv[2]\n", - "\n", - " attn = (q @ k.transpose(-2, -1)) * self.scale\n", - " attn = attn.softmax(dim=-1)\n", - " attn = self.attn_dropout(attn)\n", - "\n", - " x = (attn @ v).transpose(1, 2).reshape(B, N, C)\n", - "\n", - " x = self.proj(x)\n", - " x = self.proj_dropout(x)\n", - "\n", - " return x\n", - "\n", - "class MLP(nn.Module):\n", - " def __init__(self, in_features, hidden_features, out_features, dropout=0.1):\n", - " super().__init__()\n", - " self.fc1 = nn.Linear(in_features, hidden_features)\n", - " self.act = nn.GELU()\n", - " self.fc2 = nn.Linear(hidden_features, out_features)\n", - " self.dropout = nn.Dropout(dropout)\n", - "\n", - " def forward(self, x):\n", - " x = self.fc1(x)\n", - " x = self.act(x)\n", - " x = self.dropout(x)\n", - " x = self.fc2(x)\n", - " x = self.dropout(x)\n", - " return x\n", - "\n", - "class TransformerEncoderBlock(nn.Module):\n", - " def __init__(self, embed_dim, num_heads, mlp_ratio=4.0, dropout=0.1, drop_path_rate=0.0):\n", - " super().__init__()\n", - " self.norm1 = nn.LayerNorm(embed_dim)\n", - " self.attn = MultiHeadAttention(embed_dim, num_heads, dropout)\n", - " self.norm2 = nn.LayerNorm(embed_dim)\n", - " mlp_hidden_dim = int(embed_dim * mlp_ratio)\n", - " self.mlp = MLP(in_features=embed_dim, hidden_features=mlp_hidden_dim, out_features=embed_dim, dropout=dropout)\n", - " self.drop_path = DropPath(drop_path_rate) if drop_path_rate > 0. else nn.Identity()\n", - "\n", - "\n", - " def forward(self, x):\n", - " x = x + self.drop_path(self.attn(self.norm1(x)))\n", - " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", - " return x\n", - "\n", - "class VisionTransformer(nn.Module):\n", - " def __init__(self, image_size=224, patch_size=16, in_channels=1, num_classes=3,\n", - " embed_dim=768, depth=12, num_heads=12, mlp_ratio=4.0, dropout=0.1, drop_path_rate = 0.1):\n", - " super().__init__()\n", - "\n", - " self.patch_embed = PatchEmbedding(image_size, patch_size, in_channels, embed_dim)\n", - "\n", - " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)]\n", - "\n", - " self.encoder_blocks = nn.ModuleList([\n", - " TransformerEncoderBlock(\n", - " embed_dim=embed_dim,\n", - " num_heads=num_heads,\n", - " mlp_ratio=mlp_ratio,\n", - " dropout=dropout,\n", - " drop_path_rate = dpr[i]\n", - " ) for i in range(depth)])\n", - "\n", - " self.norm = nn.LayerNorm(embed_dim)\n", - " self.head = nn.Linear(embed_dim, num_classes)\n", - "\n", - " def forward(self, x):\n", - " x = self.patch_embed(x)\n", - "\n", - " for block in self.encoder_blocks:\n", - " x = block(x)\n", - "\n", - " x = self.norm(x)\n", - "\n", - " cls_token_final = x[:, 0]\n", - " output = self.head(cls_token_final)\n", - "\n", - " return output\n" - ] - }, - { - "cell_type": "code", - "source": [ - "#!pip install torch_xla[tpu]" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "hivvAHcI41JJ", - "outputId": "257c8cec-1eba-478e-ca04-286fede0f97c" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Collecting torch_xla[tpu]\n", - " Downloading torch_xla-2.7.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (21 kB)\n", - "Requirement already satisfied: absl-py>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (1.4.0)\n", - "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (2.0.2)\n", - "Requirement already satisfied: pyyaml in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (6.0.2)\n", - "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (2.32.3)\n", - "Collecting libtpu==0.0.11.1 (from torch_xla[tpu])\n", - " Downloading libtpu-0.0.11.1-py3-none-manylinux_2_31_x86_64.whl.metadata (556 bytes)\n", - "Collecting tpu-info (from torch_xla[tpu])\n", - " Downloading tpu_info-0.3.0-py3-none-any.whl.metadata (3.7 kB)\n", - "Requirement already satisfied: grpcio>=1.65.5 in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (1.73.0)\n", - "Requirement already satisfied: protobuf in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (5.29.5)\n", - "Requirement already satisfied: rich in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (13.9.4)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (3.4.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (2.4.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (2025.6.15)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich->tpu-info->torch_xla[tpu]) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich->tpu-info->torch_xla[tpu]) (2.19.1)\n", - "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich->tpu-info->torch_xla[tpu]) (0.1.2)\n", - "Downloading libtpu-0.0.11.1-py3-none-manylinux_2_31_x86_64.whl (130.4 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.4/130.4 MB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hDownloading tpu_info-0.3.0-py3-none-any.whl (15 kB)\n", - "Downloading torch_xla-2.7.0-cp311-cp311-manylinux_2_28_x86_64.whl (96.6 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m96.6/96.6 MB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: torch_xla, tpu-info, libtpu\n", - "Successfully installed libtpu-0.0.11.1 torch_xla-2.7.0 tpu-info-0.3.0\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "#import torch_xla" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 436 - }, - "id": "GtiRNfT34-6a", - "outputId": "c9533c3a-f67e-4fcd-fce4-a4af6e412ce4" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "error", - "ename": "ImportError", - "evalue": "/usr/local/lib/python3.11/dist-packages/_XLAC.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN5torch4lazy13MetricFnValueB5cxx11Ed", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipython-input-14-846170711.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtorch_xla\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch_xla/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdlopenflags\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0m_XLAC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_internal\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mversion\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m__version__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: /usr/local/lib/python3.11/dist-packages/_XLAC.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN5torch4lazy13MetricFnValueB5cxx11Ed", - "", - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" - ], - "errorDetails": { - "actions": [ - { - "action": "open_url", - "actionText": "Open Examples", - "url": "/notebooks/snippets/importing_libraries.ipynb" - } - ] - } - } - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Q3rnNlt1_txE" - }, - "outputs": [], - "source": [ - "import torch\n", - "import numpy as np\n", - "from sklearn.metrics import roc_auc_score\n", - "import copy\n", - "\n", - "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", - "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=10):\n", - " \"\"\"\n", - " Trains the model with early stopping based on validation ROC AUC score.\n", - "\n", - " Args:\n", - " model (torch.nn.Module): The neural network model to train.\n", - " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", - " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", - " criterion: The loss function.\n", - " optimizer: The optimization algorithm.\n", - " scheduler: The learning rate scheduler.\n", - " num_epochs (int): The maximum number of epochs to train for.\n", - " patience (int): Number of epochs to wait for improvement before stopping.\n", - " \"\"\"\n", - " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - " print(f\"Training on device: {device}\")\n", - "\n", - " model.to(device)\n", - "\n", - " best_roc_auc = 0.0\n", - " epochs_no_improve = 0\n", - " best_model_wts = copy.deepcopy(model.state_dict())\n", - "\n", - " class_names = ['axion', 'cdm', 'no_sub']\n", - "\n", - " for epoch in range(num_epochs):\n", - " print(f\"\\n===== Epoch {epoch+1}/{num_epochs} =====\")\n", - "\n", - " # --- Training Phase ---\n", - " model.train()\n", - " train_loss = 0.0\n", - " train_correct = 0\n", - "\n", - " for images, labels in train_loader:\n", - " images, labels = images.to(device), labels.to(device)\n", - "\n", - " optimizer.zero_grad()\n", - " outputs = model(images)\n", - " loss = criterion(outputs, labels)\n", - " loss.backward()\n", - " optimizer.step()\n", - " scheduler.step()\n", - "\n", - " train_loss += loss.item() * images.size(0)\n", - " _, predicted = torch.max(outputs.data, 1)\n", - " train_correct += (predicted == labels).sum().item()\n", - "\n", - " # --- Validation Phase ---\n", - " model.eval()\n", - " val_loss = 0.0\n", - " val_correct = 0\n", - " all_probs = []\n", - " all_labels = []\n", - "\n", - " with torch.no_grad():\n", - " for images, labels in val_loader:\n", - " images, labels = images.to(device), labels.to(device)\n", - " outputs = model(images)\n", - " loss = criterion(outputs, labels)\n", - "\n", - " val_loss += loss.item() * images.size(0)\n", - " _, predicted = torch.max(outputs.data, 1)\n", - " val_correct += (predicted == labels).sum().item()\n", - "\n", - " probs = torch.softmax(outputs, dim=1)\n", - " all_probs.extend(probs.cpu().numpy())\n", - " all_labels.extend(labels.cpu().numpy())\n", - "\n", - " # --- Calculate Metrics ---\n", - " train_loss = train_loss / len(train_loader.dataset)\n", - " val_loss = val_loss / len(val_loader.dataset)\n", - " train_accuracy = train_correct / len(train_loader.dataset)\n", - " val_accuracy = val_correct / len(val_loader.dataset)\n", - "\n", - " # Calculate multi-class ROC AUC score\n", - " all_labels_np = np.array(all_labels)\n", - " all_probs_np = np.array(all_probs)\n", - " try:\n", - " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", - " except ValueError as e:\n", - " print(f\"Could not calculate ROC AUC: {e}\")\n", - " val_roc_auc = 0.0\n", - "\n", - " # Epoch-level summary\n", - " print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", - " print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", - " print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", - "\n", - " if val_roc_auc > best_roc_auc:\n", - " best_roc_auc = val_roc_auc\n", - " epochs_no_improve = 0\n", - " best_model_wts = copy.deepcopy(model.state_dict())\n", - " torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", - " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}\")\n", - " else:\n", - " epochs_no_improve += 1\n", - " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}.\")\n", - "\n", - " if epochs_no_improve >= patience:\n", - " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", - " model.load_state_dict(best_model_wts)\n", - " break\n", - "\n", - " print(\"\\nTraining Complete!\")\n", - " model.load_state_dict(best_model_wts)\n", - " return model, all_probs, all_labels" - ] - }, - { - "cell_type": "code", - "source": [ - "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" - ], - "metadata": { - "id": "9QBIRCLEkikD", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 141 - }, - "outputId": "91f23758-e1e5-4da6-da2c-c68f6ff45595" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "error", - "ename": "NameError", - "evalue": "name 'model' is not defined", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipython-input-9-2106813171.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'/content/drive/MyDrive/Model_III_dataset/model_weights.pth'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" - ] - } - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "-ZJepKUw_txF", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "fb8cea1e-a600-45a2-f604-6052f8bbff56" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Optimizer: Adam\n", - "Learning Rate: 0.0005\n", - "Training on device: cuda\n", - "\n", - "===== Epoch 1/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n", - "/usr/local/lib/python3.11/dist-packages/torch/optim/lr_scheduler.py:243: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n", - " warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 1/200:\n", - "Train Loss: 0.9092, Train Accuracy: 0.4850\n", - "Val Loss: 0.5946, Val Accuracy: 0.6748, Val ROC AUC: 0.8394\n", - "✅ New best model saved with Val ROC AUC: 0.8394\n", - "\n", - "===== Epoch 2/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 2/200:\n", - "Train Loss: 0.6260, Train Accuracy: 0.6503\n", - "Val Loss: 0.5740, Val Accuracy: 0.6807, Val ROC AUC: 0.8549\n", - "✅ New best model saved with Val ROC AUC: 0.8549\n", - "\n", - "===== Epoch 3/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 3/200:\n", - "Train Loss: 0.5810, Train Accuracy: 0.6884\n", - "Val Loss: 0.5053, Val Accuracy: 0.7443, Val ROC AUC: 0.8966\n", - "✅ New best model saved with Val ROC AUC: 0.8966\n", - "\n", - "===== Epoch 4/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 4/200:\n", - "Train Loss: 0.5559, Train Accuracy: 0.7091\n", - "Val Loss: 0.6880, Val Accuracy: 0.6322, Val ROC AUC: 0.8330\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8966.\n", - "\n", - "===== Epoch 5/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 5/200:\n", - "Train Loss: 0.5240, Train Accuracy: 0.7328\n", - "Val Loss: 0.4144, Val Accuracy: 0.8163, Val ROC AUC: 0.9383\n", - "✅ New best model saved with Val ROC AUC: 0.9383\n", - "\n", - "===== Epoch 6/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 6/200:\n", - "Train Loss: 0.4963, Train Accuracy: 0.7604\n", - "Val Loss: 0.4904, Val Accuracy: 0.7703, Val ROC AUC: 0.9138\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9383.\n", - "\n", - "===== Epoch 7/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 7/200:\n", - "Train Loss: 0.4268, Train Accuracy: 0.8049\n", - "Val Loss: 0.2687, Val Accuracy: 0.8956, Val ROC AUC: 0.9759\n", - "✅ New best model saved with Val ROC AUC: 0.9759\n", - "\n", - "===== Epoch 8/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 8/200:\n", - "Train Loss: 0.3901, Train Accuracy: 0.8346\n", - "Val Loss: 0.4528, Val Accuracy: 0.8038, Val ROC AUC: 0.9345\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9759.\n", - "\n", - "===== Epoch 9/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 9/200:\n", - "Train Loss: 0.3253, Train Accuracy: 0.8665\n", - "Val Loss: 0.1956, Val Accuracy: 0.9268, Val ROC AUC: 0.9869\n", - "✅ New best model saved with Val ROC AUC: 0.9869\n", - "\n", - "===== Epoch 10/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 10/200:\n", - "Train Loss: 0.3056, Train Accuracy: 0.8774\n", - "Val Loss: 0.2845, Val Accuracy: 0.8890, Val ROC AUC: 0.9734\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9869.\n", - "\n", - "===== Epoch 11/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 11/200:\n", - "Train Loss: 0.2788, Train Accuracy: 0.8919\n", - "Val Loss: 0.1745, Val Accuracy: 0.9365, Val ROC AUC: 0.9903\n", - "✅ New best model saved with Val ROC AUC: 0.9903\n", - "\n", - "===== Epoch 12/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 12/200:\n", - "Train Loss: 0.2640, Train Accuracy: 0.8992\n", - "Val Loss: 0.2380, Val Accuracy: 0.9133, Val ROC AUC: 0.9815\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9903.\n", - "\n", - "===== Epoch 13/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 13/200:\n", - "Train Loss: 0.2433, Train Accuracy: 0.9092\n", - "Val Loss: 0.2031, Val Accuracy: 0.9222, Val ROC AUC: 0.9870\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9903.\n", - "\n", - "===== Epoch 14/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 14/200:\n", - "Train Loss: 0.2478, Train Accuracy: 0.9080\n", - "Val Loss: 0.2844, Val Accuracy: 0.8917, Val ROC AUC: 0.9789\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9903.\n", - "\n", - "===== Epoch 15/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 15/200:\n", - "Train Loss: 0.2366, Train Accuracy: 0.9119\n", - "Val Loss: 0.1688, Val Accuracy: 0.9385, Val ROC AUC: 0.9920\n", - "✅ New best model saved with Val ROC AUC: 0.9920\n", - "\n", - "===== Epoch 16/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 16/200:\n", - "Train Loss: 0.2261, Train Accuracy: 0.9153\n", - "Val Loss: 0.2232, Val Accuracy: 0.9133, Val ROC AUC: 0.9848\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 17/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 17/200:\n", - "Train Loss: 0.2157, Train Accuracy: 0.9201\n", - "Val Loss: 0.1766, Val Accuracy: 0.9362, Val ROC AUC: 0.9914\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 18/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 18/200:\n", - "Train Loss: 0.2305, Train Accuracy: 0.9158\n", - "Val Loss: 0.2010, Val Accuracy: 0.9263, Val ROC AUC: 0.9835\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 19/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 19/200:\n", - "Train Loss: 0.2231, Train Accuracy: 0.9194\n", - "Val Loss: 0.1821, Val Accuracy: 0.9344, Val ROC AUC: 0.9900\n", - "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 20/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 20/200:\n", - "Train Loss: 0.2101, Train Accuracy: 0.9231\n", - "Val Loss: 0.1596, Val Accuracy: 0.9476, Val ROC AUC: 0.9910\n", - "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 21/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 21/200:\n", - "Train Loss: 0.1990, Train Accuracy: 0.9277\n", - "Val Loss: 0.1646, Val Accuracy: 0.9391, Val ROC AUC: 0.9903\n", - "⚠️ No improvement in Val ROC AUC for 6 epoch(s). Best is 0.9920.\n", - "\n", - "===== Epoch 22/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 22/200:\n", - "Train Loss: 0.2009, Train Accuracy: 0.9268\n", - "Val Loss: 0.1438, Val Accuracy: 0.9483, Val ROC AUC: 0.9924\n", - "✅ New best model saved with Val ROC AUC: 0.9924\n", - "\n", - "===== Epoch 23/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 23/200:\n", - "Train Loss: 0.2010, Train Accuracy: 0.9278\n", - "Val Loss: 0.2015, Val Accuracy: 0.9256, Val ROC AUC: 0.9855\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9924.\n", - "\n", - "===== Epoch 24/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 24/200:\n", - "Train Loss: 0.2141, Train Accuracy: 0.9235\n", - "Val Loss: 0.1369, Val Accuracy: 0.9529, Val ROC AUC: 0.9928\n", - "✅ New best model saved with Val ROC AUC: 0.9928\n", - "\n", - "===== Epoch 25/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 25/200:\n", - "Train Loss: 0.2007, Train Accuracy: 0.9269\n", - "Val Loss: 0.2793, Val Accuracy: 0.9020, Val ROC AUC: 0.9764\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9928.\n", - "\n", - "===== Epoch 26/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 26/200:\n", - "Train Loss: 0.1993, Train Accuracy: 0.9272\n", - "Val Loss: 0.1412, Val Accuracy: 0.9520, Val ROC AUC: 0.9917\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9928.\n", - "\n", - "===== Epoch 27/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 27/200:\n", - "Train Loss: 0.1817, Train Accuracy: 0.9351\n", - "Val Loss: 0.2009, Val Accuracy: 0.9252, Val ROC AUC: 0.9843\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9928.\n", - "\n", - "===== Epoch 28/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 28/200:\n", - "Train Loss: 0.2001, Train Accuracy: 0.9271\n", - "Val Loss: 0.1242, Val Accuracy: 0.9588, Val ROC AUC: 0.9942\n", - "✅ New best model saved with Val ROC AUC: 0.9942\n", - "\n", - "===== Epoch 29/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 29/200:\n", - "Train Loss: 0.1764, Train Accuracy: 0.9373\n", - "Val Loss: 0.2235, Val Accuracy: 0.9174, Val ROC AUC: 0.9841\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9942.\n", - "\n", - "===== Epoch 30/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 30/200:\n", - "Train Loss: 0.1734, Train Accuracy: 0.9385\n", - "Val Loss: 0.1251, Val Accuracy: 0.9576, Val ROC AUC: 0.9935\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9942.\n", - "\n", - "===== Epoch 31/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 31/200:\n", - "Train Loss: 0.1946, Train Accuracy: 0.9306\n", - "Val Loss: 0.2429, Val Accuracy: 0.8971, Val ROC AUC: 0.9795\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9942.\n", - "\n", - "===== Epoch 32/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 32/200:\n", - "Train Loss: 0.2203, Train Accuracy: 0.9198\n", - "Val Loss: 0.1360, Val Accuracy: 0.9487, Val ROC AUC: 0.9928\n", - "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9942.\n", - "\n", - "===== Epoch 33/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 33/200:\n", - "Train Loss: 0.1714, Train Accuracy: 0.9401\n", - "Val Loss: 0.2352, Val Accuracy: 0.9176, Val ROC AUC: 0.9870\n", - "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9942.\n", - "\n", - "===== Epoch 34/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 34/200:\n", - "Train Loss: 0.1754, Train Accuracy: 0.9386\n", - "Val Loss: 0.1072, Val Accuracy: 0.9616, Val ROC AUC: 0.9961\n", - "✅ New best model saved with Val ROC AUC: 0.9961\n", - "\n", - "===== Epoch 35/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 35/200:\n", - "Train Loss: 0.1649, Train Accuracy: 0.9426\n", - "Val Loss: 0.2433, Val Accuracy: 0.9060, Val ROC AUC: 0.9815\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9961.\n", - "\n", - "===== Epoch 36/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 36/200:\n", - "Train Loss: 0.1713, Train Accuracy: 0.9398\n", - "Val Loss: 0.1205, Val Accuracy: 0.9581, Val ROC AUC: 0.9943\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9961.\n", - "\n", - "===== Epoch 37/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 37/200:\n", - "Train Loss: 0.1671, Train Accuracy: 0.9412\n", - "Val Loss: 0.2016, Val Accuracy: 0.9250, Val ROC AUC: 0.9878\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9961.\n", - "\n", - "===== Epoch 38/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 38/200:\n", - "Train Loss: 0.1550, Train Accuracy: 0.9458\n", - "Val Loss: 0.1049, Val Accuracy: 0.9635, Val ROC AUC: 0.9955\n", - "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9961.\n", - "\n", - "===== Epoch 39/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 39/200:\n", - "Train Loss: 0.1474, Train Accuracy: 0.9490\n", - "Val Loss: 0.2036, Val Accuracy: 0.9350, Val ROC AUC: 0.9849\n", - "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9961.\n", - "\n", - "===== Epoch 40/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 40/200:\n", - "Train Loss: 0.1433, Train Accuracy: 0.9510\n", - "Val Loss: 0.0847, Val Accuracy: 0.9712, Val ROC AUC: 0.9970\n", - "✅ New best model saved with Val ROC AUC: 0.9970\n", - "\n", - "===== Epoch 41/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 41/200:\n", - "Train Loss: 0.1556, Train Accuracy: 0.9459\n", - "Val Loss: 0.1377, Val Accuracy: 0.9508, Val ROC AUC: 0.9931\n", - "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 42/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 42/200:\n", - "Train Loss: 0.1400, Train Accuracy: 0.9517\n", - "Val Loss: 0.1029, Val Accuracy: 0.9661, Val ROC AUC: 0.9950\n", - "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 43/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 43/200:\n", - "Train Loss: 0.1454, Train Accuracy: 0.9503\n", - "Val Loss: 0.2245, Val Accuracy: 0.9220, Val ROC AUC: 0.9888\n", - "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 44/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 44/200:\n", - "Train Loss: 0.1394, Train Accuracy: 0.9523\n", - "Val Loss: 0.0874, Val Accuracy: 0.9701, Val ROC AUC: 0.9968\n", - "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 45/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 45/200:\n", - "Train Loss: 0.1534, Train Accuracy: 0.9478\n", - "Val Loss: 0.1396, Val Accuracy: 0.9518, Val ROC AUC: 0.9925\n", - "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 46/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 46/200:\n", - "Train Loss: 0.1505, Train Accuracy: 0.9481\n", - "Val Loss: 0.1128, Val Accuracy: 0.9617, Val ROC AUC: 0.9945\n", - "⚠️ No improvement in Val ROC AUC for 6 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 47/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 47/200:\n", - "Train Loss: 0.1494, Train Accuracy: 0.9485\n", - "Val Loss: 0.1788, Val Accuracy: 0.9294, Val ROC AUC: 0.9901\n", - "⚠️ No improvement in Val ROC AUC for 7 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 48/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 48/200:\n", - "Train Loss: 0.1399, Train Accuracy: 0.9521\n", - "Val Loss: 0.1041, Val Accuracy: 0.9647, Val ROC AUC: 0.9956\n", - "⚠️ No improvement in Val ROC AUC for 8 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 49/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 49/200:\n", - "Train Loss: 0.1363, Train Accuracy: 0.9537\n", - "Val Loss: 0.1726, Val Accuracy: 0.9388, Val ROC AUC: 0.9912\n", - "⚠️ No improvement in Val ROC AUC for 9 epoch(s). Best is 0.9970.\n", - "\n", - "===== Epoch 50/200 =====\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", - " warnings.warn(\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "[SUMMARY] Epoch 50/200:\n", - "Train Loss: 0.1385, Train Accuracy: 0.9533\n", - "Val Loss: 0.0885, Val Accuracy: 0.9710, Val ROC AUC: 0.9965\n", - "⚠️ No improvement in Val ROC AUC for 10 epoch(s). Best is 0.9970.\n", - "\n", - "🛑 Early stopping triggered after 10 epochs without improvement.\n", - "\n", - "Training Complete!\n" - ] - } - ], - "source": [ - "\"\"\"\n", - "Args:\n", - " image_size (int): Size of the input image (e.g., 224).\n", - " patch_size (int): Size of each patch (e.g., 16).\n", - " in_channels (int): Number of input channels (e.g., 1 for your task).\n", - " num_classes (int): Number of output classes (e.g., 3 for your task).\n", - " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", - " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", - " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", - " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", - " dropout (float): Dropout probability.\n", - "\"\"\"\n", - "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", - "batch_size = 32\n", - "learning_rate = 5e-4\n", - "weight_decay = 0.05\n", - "num_epochs = 200\n", - "warmup_epochs = 10\n", - "model = VisionTransformer(\n", - " image_size=64, patch_size=4, in_channels=1, num_classes=3,\n", - " embed_dim=192, depth=6, num_heads=4, mlp_ratio=4.0, dropout=0.1\n", - " )\n", - "\n", - "\n", - "criterion = nn.CrossEntropyLoss()\n", - "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n", - "\n", - "\n", - "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", - "def warmup_lambda(current_epoch):\n", - " if current_epoch < warmup_epochs:\n", - " return float(current_epoch) / float(max(1, warmup_epochs))\n", - " return 1.0\n", - "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", - "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", - "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", - "\n", - "\n", - "print(\"Optimizer: Adam\")\n", - "print(f\"Learning Rate: {learning_rate}\")\n", - "\n", - "# Train Model\n", - "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "G_-lEQtu_txF", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "380b9897-dd4d-40ef-ba22-02663ddea4b9" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Generating ROC Curve\n", - "Class 0 ROC AUC: 0.9985\n", - "Class 1 ROC AUC: 0.9936\n", - "Class 2 ROC AUC: 0.9974\n", - "ROC Curve saved as roc_curve.png\n", - "Training and Evaluation Complete!\n" - ] - } - ], - "source": [ - "\"\"\" ROC Curve Plotting Function\"\"\"\n", - "def plot_roc_curve(all_preds, all_labels):\n", - " print(\"Generating ROC Curve\")\n", - "\n", - " # Convert predictions and labels to numpy arrays\n", - " all_preds = np.array(all_preds)\n", - " all_labels = np.array(all_labels)\n", - "\n", - " fpr = dict()\n", - " tpr = dict()\n", - " roc_auc = dict()\n", - " n_classes = 3\n", - "\n", - " for i in range(n_classes):\n", - " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", - " roc_auc[i] = auc(fpr[i], tpr[i])\n", - "\n", - " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", - "\n", - " # Plot ROC curves\n", - " plt.figure(figsize=(10, 8))\n", - " colors = ['blue', 'red', 'green']\n", - " class_names = ['Axion', 'CDM', 'No Substructure']\n", - "\n", - " for i, color in zip(range(n_classes), colors):\n", - " plt.plot(fpr[i], tpr[i], color=color,\n", - " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", - "\n", - " plt.plot([0, 1], [0, 1], 'k--')\n", - " plt.xlim([0.0, 1.0])\n", - " plt.ylim([0.0, 1.05])\n", - " plt.xlabel('False Positive Rate')\n", - " plt.ylabel('True Positive Rate')\n", - " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", - " plt.legend(loc=\"lower right\")\n", - " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve.png')\n", - " plt.close()\n", - "\n", - " print(\"ROC Curve saved as roc_curve.png\")\n", - "\n", - "\n", - "plot_roc_curve(all_probs, all_labels)\n", - "\n", - "print(\"Training and Evaluation Complete!\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "MZ59pFZa_txG" - }, - "outputs": [], - "source": [] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "X7Ekxmo1XV5I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_mFRKD8F__hl", + "outputId": "0495f67f-8d6b-4160-c594-cceaab989d2a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mounted at /content/drive\n" + ] + } + ], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DMbel4LB8oLb", + "outputId": "7cc98f45-8719-4e02-c747-c15d4c1ff05c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30000\n" + ] + } + ], + "source": [ + "!cd /content/drive/MyDrive/Model_III_data/Model_III/axion\n", + "!ls -1q /content/drive/MyDrive/Model_III_data/Model_III/no_sub | wc -l" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9l0m91pCBpI1", + "outputId": "483f3706-70d6-4eaf-efaf-23bb1238f35a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ls: cannot access '/content/drive/MyDrive/Model_III_data/Model_III/': No such file or directory\n" + ] + } + ], + "source": [ + "!ls /content/drive/MyDrive/Model_III_data/Model_III/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_HwTHNYYAoBC" + }, + "outputs": [], + "source": [ + "#Extract tarfile\n", + "import shutil\n", + "shutil.unpack_archive('/content/drive/MyDrive/Model_III.tgz', '/content/drive/MyDrive/Model_III_dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vRM2kxST8KJZ" + }, + "outputs": [], + "source": [ + "\"\"\"\n", + "GSoC 2025 Internship Application Task - 1\n", + "Author: Dhruv Srivastava\n", + "\"\"\"\n", + "\n", + "\"\"\"Import dependencies\"\"\"\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import Dataset, DataLoader\n", + "from torchvision.models import resnet18\n", + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9Dm6SC1o_txB" + }, + "outputs": [], + "source": [ + "\"\"\"Define Dataset Class for Vision Transformer with Debugging\"\"\"\n", + "class MyDatasetViT(Dataset):\n", + " def __init__(self, data_dir, transform=None):\n", + " self.data = []\n", + " self.labels = []\n", + " self.class_names = ['axion', 'cdm', 'no_sub']\n", + " self.transform = transform\n", + "\n", + " print(f\"Loading dataset from: {data_dir}\")\n", + " print(f\"Looking for classes: {self.class_names}\")\n", + "\n", + " for idx, class_name in enumerate(self.class_names):\n", + " class_dir = os.path.join(data_dir, class_name)\n", + " print(f\"--- Processing class: {class_name} ---\")\n", + "\n", + " if not os.path.exists(class_dir):\n", + " print(f\"[ERROR] Directory not found: {class_dir}\")\n", + " continue\n", + "\n", + " files = os.listdir(class_dir)\n", + "\n", + " for file_name in files:\n", + " if file_name.endswith('.npy'):\n", + " file_path = os.path.join(class_dir, file_name)\n", + " loaded_data = np.load(file_path, allow_pickle=True)\n", + "\n", + " if class_name == 'axion':\n", + " image = loaded_data[0]\n", + " else:\n", + " image = loaded_data\n", + "\n", + " # [DEBUG] Print the shape of the raw numpy array\n", + " print(f\" [DEBUG] Loaded '{file_name}'. Raw numpy shape: {image.shape}\")\n", + "\n", + " # Ensure the image is a 2D array (H, W) before adding channel dimension.\n", + " if image.ndim != 2:\n", + " image = np.squeeze(image)\n", + "\n", + " # Convert to a float tensor and add a channel dimension -> [1, H, W]\n", + " image_tensor = torch.tensor(image, dtype=torch.float32).unsqueeze(0)\n", + "\n", + " # [DEBUG] Print the shape of the final tensor being stored in the dataset\n", + " print(f\" [DEBUG] Storing tensor with final shape: {image_tensor.shape}\\n\")\n", + "\n", + " self.data.append(image_tensor)\n", + " self.labels.append(idx)\n", + "\n", + " print(\"\\n--- Dataset Loading Complete ---\")\n", + " print(f\"Total images loaded: {len(self.data)}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, idx):\n", + " \"\"\"\n", + " This method is called by the DataLoader to get one item from the dataset.\n", + " The debug prints here are CRITICAL for finding the error.\n", + " \"\"\"\n", + " #print(f\"--- Getting item index: {idx} ---\")\n", + "\n", + " # Retrieve the pre-loaded tensor and its label\n", + " image = self.data[idx]\n", + " label = self.labels[idx]\n", + "\n", + " # [DEBUG] Print shape BEFORE the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor BEFORE transform: {image.shape}\")\n", + "\n", + " # Apply transformations (e.g., resizing) if they are provided\n", + " if self.transform:\n", + " image = self.transform(image)\n", + " # [DEBUG] Print shape AFTER the transform is applied\n", + " #print(f\" [DEBUG] Shape of tensor AFTER transform: {image.shape}\")\n", + " else:\n", + " #print(\" [DEBUG] No transform was applied.\")\n", + " pass\n", + "\n", + " return image, label" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VJEgowwT_txC", + "outputId": "de7672d2-1191-4930-adc3-37c424d0ad7c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training Directory: /content/drive/MyDrive/Model_III_dataset/Model_III\n" + ] + } + ], + "source": [ + "# Import the transforms module\n", + "from torchvision import transforms\n", + "# Hyperparameters\n", + "batch_size = 32\n", + "learning_rate = 0.001\n", + "num_epochs = 100\n", + "\n", + "# Data Directories\n", + "train_dir = '/content/drive/MyDrive/Model_III_dataset/Model_III'\n", + "#val_dir = '../dataset/dataset/val'\n", + "\n", + "print(f\"Training Directory: {train_dir}\")\n", + "#print(f\"Validation Directory: {val_dir}\")\n", + "\n", + "vit_transforms = transforms.Compose([\n", + " transforms.Resize((64, 64), antialias=True)\n", + "])\n", + "\n", + "# Create Datasets and Dataloaders\n", + "#train_dataset = MyDataset(train_dir)\n", + "#val_dataset = MyDataset(val_dir)\n", + "#dataset = MyDatasetViT(train_dir, vit_transforms)\n", + "#train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(dataset, [0.75, 0.15, 0.1])\n", + "\n", + "#train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=True)\n", + "#val_loader = DataLoader(val_dataset, batch_size=batch_size, num_workers=4, pin_memory=True)\n", + "\n", + "#print(f\"Batch Size: {batch_size}\")\n", + "#print(f\"Number of Training Batches: {len(train_loader)}\")\n", + "#print(f\"Number of Validation Batches: {len(val_loader)}\")\n", + "\n", + "#Save the dataloader so that we don't have to bear with this pain again\n", + "#torch.save(train_loader, '/content/drive/MyDrive/Model_III_dataset/train_loader.pth')\n", + "#torch.save(val_loader, '/content/drive/MyDrive/Model_III_dataset/val_loader.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gvqsjdgzKmOL" + }, + "outputs": [], + "source": [ + "#import data loaders from file\n", + "train_loader = torch.load('/content/drive/MyDrive/Model_III_dataset/train_loader.pth', weights_only=False)\n", + "val_loader = torch.load('/content/drive/MyDrive/Model_III_dataset/val_loader.pth', weights_only=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "y6Q9I1Hw_txD", + "outputId": "3cbb9dc6-5dc1-4d81-cc79-3feb9bd3cf9f" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/timm/models/layers/__init__.py:48: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers\n", + " warnings.warn(f\"Importing from {__name__} is deprecated, please import via timm.layers\", FutureWarning)\n" + ] + } + ], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "from timm.layers import DropPath\n", + "\n", + "class PatchEmbedding(nn.Module):\n", + " def __init__(self, image_size, patch_size, in_channels, embed_dim):\n", + " super().__init__()\n", + " self.image_size = image_size\n", + " self.patch_size = patch_size\n", + " self.num_patches = (image_size // patch_size) ** 2\n", + "\n", + " self.projection = nn.Conv2d(\n", + " in_channels,\n", + " embed_dim,\n", + " kernel_size=patch_size,\n", + " stride=patch_size\n", + " )\n", + "\n", + " self.cls_token = nn.Parameter(torch.randn(1, 1, embed_dim))\n", + " self.positional_embedding = nn.Parameter(torch.randn(1, self.num_patches + 1, embed_dim))\n", + "\n", + " def forward(self, x):\n", + " # (B, C, H, W) -> (B, E, N_patches_sqrt, N_patches_sqrt)\n", + " x = self.projection(x)\n", + " # (B, E, N_patches_sqrt, N_patches_sqrt) -> (B, E, N)\n", + " x = x.flatten(2)\n", + " # (B, E, N) -> (B, N, E)\n", + " x = x.transpose(1, 2)\n", + "\n", + " # --- FIX IS HERE ---\n", + " # Get the batch size from the input tensor x\n", + " batch_size = x.shape[0]\n", + " # Expand the CLS token to match the batch size\n", + " cls_tokens = self.cls_token.expand(batch_size, -1, -1)\n", + "\n", + " # Prepend the CLS token to the patch embeddings\n", + " x = torch.cat((cls_tokens, x), dim=1)\n", + "\n", + " # Add positional embeddings\n", + " x = x + self.positional_embedding\n", + "\n", + " return x\n", + "\n", + "class MultiHeadAttention(nn.Module):\n", + " def __init__(self, embed_dim, num_heads, dropout=0.1):\n", + " super().__init__()\n", + " assert embed_dim % num_heads == 0, \"Embedding dimension must be divisible by number of heads.\"\n", + "\n", + " self.num_heads = num_heads\n", + " self.head_dim = embed_dim // num_heads\n", + " self.scale = self.head_dim ** -0.5\n", + "\n", + " self.qkv = nn.Linear(embed_dim, embed_dim * 3)\n", + " self.attn_dropout = nn.Dropout(dropout)\n", + " self.proj = nn.Linear(embed_dim, embed_dim)\n", + " self.proj_dropout = nn.Dropout(dropout)\n", + "\n", + " def forward(self, x):\n", + " B, N, C = x.shape\n", + "\n", + " qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)\n", + "\n", + " # --- FIX IS HERE ---\n", + " # Unpack q, k, v from the first dimension\n", + " q, k, v = qkv[0], qkv[1], qkv[2]\n", + "\n", + " attn = (q @ k.transpose(-2, -1)) * self.scale\n", + " attn = attn.softmax(dim=-1)\n", + " attn = self.attn_dropout(attn)\n", + "\n", + " x = (attn @ v).transpose(1, 2).reshape(B, N, C)\n", + "\n", + " x = self.proj(x)\n", + " x = self.proj_dropout(x)\n", + "\n", + " return x\n", + "\n", + "class MLP(nn.Module):\n", + " def __init__(self, in_features, hidden_features, out_features, dropout=0.1):\n", + " super().__init__()\n", + " self.fc1 = nn.Linear(in_features, hidden_features)\n", + " self.act = nn.GELU()\n", + " self.fc2 = nn.Linear(hidden_features, out_features)\n", + " self.dropout = nn.Dropout(dropout)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.act(x)\n", + " x = self.dropout(x)\n", + " x = self.fc2(x)\n", + " x = self.dropout(x)\n", + " return x\n", + "\n", + "class TransformerEncoderBlock(nn.Module):\n", + " def __init__(self, embed_dim, num_heads, mlp_ratio=4.0, dropout=0.1, drop_path_rate=0.0):\n", + " super().__init__()\n", + " self.norm1 = nn.LayerNorm(embed_dim)\n", + " self.attn = MultiHeadAttention(embed_dim, num_heads, dropout)\n", + " self.norm2 = nn.LayerNorm(embed_dim)\n", + " mlp_hidden_dim = int(embed_dim * mlp_ratio)\n", + " self.mlp = MLP(in_features=embed_dim, hidden_features=mlp_hidden_dim, out_features=embed_dim, dropout=dropout)\n", + " self.drop_path = DropPath(drop_path_rate) if drop_path_rate > 0. else nn.Identity()\n", + "\n", + "\n", + " def forward(self, x):\n", + " x = x + self.drop_path(self.attn(self.norm1(x)))\n", + " x = x + self.drop_path(self.mlp(self.norm2(x)))\n", + " return x\n", + "\n", + "class VisionTransformer(nn.Module):\n", + " def __init__(self, image_size=224, patch_size=16, in_channels=1, num_classes=3,\n", + " embed_dim=768, depth=12, num_heads=12, mlp_ratio=4.0, dropout=0.1, drop_path_rate = 0.1):\n", + " super().__init__()\n", + "\n", + " self.patch_embed = PatchEmbedding(image_size, patch_size, in_channels, embed_dim)\n", + "\n", + " dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)]\n", + "\n", + " self.encoder_blocks = nn.ModuleList([\n", + " TransformerEncoderBlock(\n", + " embed_dim=embed_dim,\n", + " num_heads=num_heads,\n", + " mlp_ratio=mlp_ratio,\n", + " dropout=dropout,\n", + " drop_path_rate = dpr[i]\n", + " ) for i in range(depth)])\n", + "\n", + " self.norm = nn.LayerNorm(embed_dim)\n", + " self.head = nn.Linear(embed_dim, num_classes)\n", + "\n", + " def forward(self, x):\n", + " x = self.patch_embed(x)\n", + "\n", + " for block in self.encoder_blocks:\n", + " x = block(x)\n", + "\n", + " x = self.norm(x)\n", + "\n", + " cls_token_final = x[:, 0]\n", + " output = self.head(cls_token_final)\n", + "\n", + " return output\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hivvAHcI41JJ", + "outputId": "257c8cec-1eba-478e-ca04-286fede0f97c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting torch_xla[tpu]\n", + " Downloading torch_xla-2.7.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (21 kB)\n", + "Requirement already satisfied: absl-py>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (1.4.0)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (2.0.2)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (6.0.2)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from torch_xla[tpu]) (2.32.3)\n", + "Collecting libtpu==0.0.11.1 (from torch_xla[tpu])\n", + " Downloading libtpu-0.0.11.1-py3-none-manylinux_2_31_x86_64.whl.metadata (556 bytes)\n", + "Collecting tpu-info (from torch_xla[tpu])\n", + " Downloading tpu_info-0.3.0-py3-none-any.whl.metadata (3.7 kB)\n", + "Requirement already satisfied: grpcio>=1.65.5 in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (1.73.0)\n", + "Requirement already satisfied: protobuf in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (5.29.5)\n", + "Requirement already satisfied: rich in /usr/local/lib/python3.11/dist-packages (from tpu-info->torch_xla[tpu]) (13.9.4)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (3.4.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (2.4.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->torch_xla[tpu]) (2025.6.15)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich->tpu-info->torch_xla[tpu]) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich->tpu-info->torch_xla[tpu]) (2.19.1)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich->tpu-info->torch_xla[tpu]) (0.1.2)\n", + "Downloading libtpu-0.0.11.1-py3-none-manylinux_2_31_x86_64.whl (130.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.4/130.4 MB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tpu_info-0.3.0-py3-none-any.whl (15 kB)\n", + "Downloading torch_xla-2.7.0-cp311-cp311-manylinux_2_28_x86_64.whl (96.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m96.6/96.6 MB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: torch_xla, tpu-info, libtpu\n", + "Successfully installed libtpu-0.0.11.1 torch_xla-2.7.0 tpu-info-0.3.0\n" + ] + } + ], + "source": [ + "#!pip install torch_xla[tpu]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 436 + }, + "id": "GtiRNfT34-6a", + "outputId": "c9533c3a-f67e-4fcd-fce4-a4af6e412ce4" + }, + "outputs": [ + { + "ename": "ImportError", + "evalue": "/usr/local/lib/python3.11/dist-packages/_XLAC.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN5torch4lazy13MetricFnValueB5cxx11Ed", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipython-input-14-846170711.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtorch_xla\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch_xla/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdlopenflags\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0m_XLAC\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_internal\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mversion\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m__version__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: /usr/local/lib/python3.11/dist-packages/_XLAC.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN5torch4lazy13MetricFnValueB5cxx11Ed", + "", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" + ] + } + ], + "source": [ + "#import torch_xla" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Q3rnNlt1_txE" + }, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from sklearn.metrics import roc_auc_score\n", + "import copy\n", + "\n", + "\"\"\"Training and Evaluation with Early Stopping\"\"\"\n", + "def train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs=50, patience=10):\n", + " \"\"\"\n", + " Trains the model with early stopping based on validation ROC AUC score.\n", + "\n", + " Args:\n", + " model (torch.nn.Module): The neural network model to train.\n", + " train_loader (torch.utils.data.DataLoader): DataLoader for the training set.\n", + " val_loader (torch.utils.data.DataLoader): DataLoader for the validation set.\n", + " criterion: The loss function.\n", + " optimizer: The optimization algorithm.\n", + " scheduler: The learning rate scheduler.\n", + " num_epochs (int): The maximum number of epochs to train for.\n", + " patience (int): Number of epochs to wait for improvement before stopping.\n", + " \"\"\"\n", + " device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + " print(f\"Training on device: {device}\")\n", + "\n", + " model.to(device)\n", + "\n", + " best_roc_auc = 0.0\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + "\n", + " class_names = ['axion', 'cdm', 'no_sub']\n", + "\n", + " for epoch in range(num_epochs):\n", + " print(f\"\\n===== Epoch {epoch+1}/{num_epochs} =====\")\n", + "\n", + " # --- Training Phase ---\n", + " model.train()\n", + " train_loss = 0.0\n", + " train_correct = 0\n", + "\n", + " for images, labels in train_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + "\n", + " optimizer.zero_grad()\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " scheduler.step()\n", + "\n", + " train_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " train_correct += (predicted == labels).sum().item()\n", + "\n", + " # --- Validation Phase ---\n", + " model.eval()\n", + " val_loss = 0.0\n", + " val_correct = 0\n", + " all_probs = []\n", + " all_labels = []\n", + "\n", + " with torch.no_grad():\n", + " for images, labels in val_loader:\n", + " images, labels = images.to(device), labels.to(device)\n", + " outputs = model(images)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " val_loss += loss.item() * images.size(0)\n", + " _, predicted = torch.max(outputs.data, 1)\n", + " val_correct += (predicted == labels).sum().item()\n", + "\n", + " probs = torch.softmax(outputs, dim=1)\n", + " all_probs.extend(probs.cpu().numpy())\n", + " all_labels.extend(labels.cpu().numpy())\n", + "\n", + " # --- Calculate Metrics ---\n", + " train_loss = train_loss / len(train_loader.dataset)\n", + " val_loss = val_loss / len(val_loader.dataset)\n", + " train_accuracy = train_correct / len(train_loader.dataset)\n", + " val_accuracy = val_correct / len(val_loader.dataset)\n", + "\n", + " # Calculate multi-class ROC AUC score\n", + " all_labels_np = np.array(all_labels)\n", + " all_probs_np = np.array(all_probs)\n", + " try:\n", + " val_roc_auc = roc_auc_score(all_labels_np, all_probs_np, multi_class='ovr', average='macro')\n", + " except ValueError as e:\n", + " print(f\"Could not calculate ROC AUC: {e}\")\n", + " val_roc_auc = 0.0\n", + "\n", + " # Epoch-level summary\n", + " print(f'\\n[SUMMARY] Epoch {epoch+1}/{num_epochs}:')\n", + " print(f'Train Loss: {train_loss:.4f}, Train Accuracy: {train_accuracy:.4f}')\n", + " print(f'Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.4f}, Val ROC AUC: {val_roc_auc:.4f}')\n", + "\n", + " if val_roc_auc > best_roc_auc:\n", + " best_roc_auc = val_roc_auc\n", + " epochs_no_improve = 0\n", + " best_model_wts = copy.deepcopy(model.state_dict())\n", + " torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/lens_classifier_model_vision_transformer.pth')\n", + " print(f\"New best model saved with Val ROC AUC: {best_roc_auc:.4f}\")\n", + " else:\n", + " epochs_no_improve += 1\n", + " print(f\"No improvement in Val ROC AUC for {epochs_no_improve} epoch(s). Best is {best_roc_auc:.4f}.\")\n", + "\n", + " if epochs_no_improve >= patience:\n", + " print(f\"\\nEarly stopping triggered after {patience} epochs without improvement.\")\n", + " model.load_state_dict(best_model_wts)\n", + " break\n", + "\n", + " print(\"\\nTraining Complete!\")\n", + " model.load_state_dict(best_model_wts)\n", + " return model, all_probs, all_labels" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 141 + }, + "id": "9QBIRCLEkikD", + "outputId": "91f23758-e1e5-4da6-da2c-c68f6ff45595" + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'model' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipython-input-9-2106813171.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'/content/drive/MyDrive/Model_III_dataset/model_weights.pth'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'model' is not defined" + ] } - ], - "metadata": { + ], + "source": [ + "#torch.save(model.state_dict(), '/content/drive/MyDrive/Model_III_dataset/model_weights.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { "colab": { - "provenance": [], - "gpuType": "T4" - }, - "kernelspec": { - "display_name": "Python 3", - "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.11.2" - }, - "accelerator": "GPU" + "base_uri": "https://localhost:8080/" + }, + "id": "-ZJepKUw_txF", + "outputId": "fb8cea1e-a600-45a2-f604-6052f8bbff56" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimizer: Adam\n", + "Learning Rate: 0.0005\n", + "Training on device: cuda\n", + "\n", + "===== Epoch 1/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n", + "/usr/local/lib/python3.11/dist-packages/torch/optim/lr_scheduler.py:243: UserWarning: The epoch parameter in `scheduler.step()` was not necessary and is being deprecated where possible. Please use `scheduler.step()` to step the scheduler. During the deprecation, if epoch is different from None, the closed form is used instead of the new chainable form, where available. Please open an issue if you are unable to replicate your use case: https://github.com/pytorch/pytorch/issues/new/choose.\n", + " warnings.warn(EPOCH_DEPRECATION_WARNING, UserWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 1/200:\n", + "Train Loss: 0.9092, Train Accuracy: 0.4850\n", + "Val Loss: 0.5946, Val Accuracy: 0.6748, Val ROC AUC: 0.8394\n", + "✅ New best model saved with Val ROC AUC: 0.8394\n", + "\n", + "===== Epoch 2/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 2/200:\n", + "Train Loss: 0.6260, Train Accuracy: 0.6503\n", + "Val Loss: 0.5740, Val Accuracy: 0.6807, Val ROC AUC: 0.8549\n", + "✅ New best model saved with Val ROC AUC: 0.8549\n", + "\n", + "===== Epoch 3/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 3/200:\n", + "Train Loss: 0.5810, Train Accuracy: 0.6884\n", + "Val Loss: 0.5053, Val Accuracy: 0.7443, Val ROC AUC: 0.8966\n", + "✅ New best model saved with Val ROC AUC: 0.8966\n", + "\n", + "===== Epoch 4/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 4/200:\n", + "Train Loss: 0.5559, Train Accuracy: 0.7091\n", + "Val Loss: 0.6880, Val Accuracy: 0.6322, Val ROC AUC: 0.8330\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.8966.\n", + "\n", + "===== Epoch 5/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 5/200:\n", + "Train Loss: 0.5240, Train Accuracy: 0.7328\n", + "Val Loss: 0.4144, Val Accuracy: 0.8163, Val ROC AUC: 0.9383\n", + "✅ New best model saved with Val ROC AUC: 0.9383\n", + "\n", + "===== Epoch 6/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 6/200:\n", + "Train Loss: 0.4963, Train Accuracy: 0.7604\n", + "Val Loss: 0.4904, Val Accuracy: 0.7703, Val ROC AUC: 0.9138\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9383.\n", + "\n", + "===== Epoch 7/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 7/200:\n", + "Train Loss: 0.4268, Train Accuracy: 0.8049\n", + "Val Loss: 0.2687, Val Accuracy: 0.8956, Val ROC AUC: 0.9759\n", + "✅ New best model saved with Val ROC AUC: 0.9759\n", + "\n", + "===== Epoch 8/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 8/200:\n", + "Train Loss: 0.3901, Train Accuracy: 0.8346\n", + "Val Loss: 0.4528, Val Accuracy: 0.8038, Val ROC AUC: 0.9345\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9759.\n", + "\n", + "===== Epoch 9/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 9/200:\n", + "Train Loss: 0.3253, Train Accuracy: 0.8665\n", + "Val Loss: 0.1956, Val Accuracy: 0.9268, Val ROC AUC: 0.9869\n", + "✅ New best model saved with Val ROC AUC: 0.9869\n", + "\n", + "===== Epoch 10/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 10/200:\n", + "Train Loss: 0.3056, Train Accuracy: 0.8774\n", + "Val Loss: 0.2845, Val Accuracy: 0.8890, Val ROC AUC: 0.9734\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9869.\n", + "\n", + "===== Epoch 11/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 11/200:\n", + "Train Loss: 0.2788, Train Accuracy: 0.8919\n", + "Val Loss: 0.1745, Val Accuracy: 0.9365, Val ROC AUC: 0.9903\n", + "✅ New best model saved with Val ROC AUC: 0.9903\n", + "\n", + "===== Epoch 12/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 12/200:\n", + "Train Loss: 0.2640, Train Accuracy: 0.8992\n", + "Val Loss: 0.2380, Val Accuracy: 0.9133, Val ROC AUC: 0.9815\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9903.\n", + "\n", + "===== Epoch 13/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 13/200:\n", + "Train Loss: 0.2433, Train Accuracy: 0.9092\n", + "Val Loss: 0.2031, Val Accuracy: 0.9222, Val ROC AUC: 0.9870\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9903.\n", + "\n", + "===== Epoch 14/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 14/200:\n", + "Train Loss: 0.2478, Train Accuracy: 0.9080\n", + "Val Loss: 0.2844, Val Accuracy: 0.8917, Val ROC AUC: 0.9789\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9903.\n", + "\n", + "===== Epoch 15/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 15/200:\n", + "Train Loss: 0.2366, Train Accuracy: 0.9119\n", + "Val Loss: 0.1688, Val Accuracy: 0.9385, Val ROC AUC: 0.9920\n", + "✅ New best model saved with Val ROC AUC: 0.9920\n", + "\n", + "===== Epoch 16/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 16/200:\n", + "Train Loss: 0.2261, Train Accuracy: 0.9153\n", + "Val Loss: 0.2232, Val Accuracy: 0.9133, Val ROC AUC: 0.9848\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 17/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 17/200:\n", + "Train Loss: 0.2157, Train Accuracy: 0.9201\n", + "Val Loss: 0.1766, Val Accuracy: 0.9362, Val ROC AUC: 0.9914\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 18/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 18/200:\n", + "Train Loss: 0.2305, Train Accuracy: 0.9158\n", + "Val Loss: 0.2010, Val Accuracy: 0.9263, Val ROC AUC: 0.9835\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 19/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 19/200:\n", + "Train Loss: 0.2231, Train Accuracy: 0.9194\n", + "Val Loss: 0.1821, Val Accuracy: 0.9344, Val ROC AUC: 0.9900\n", + "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 20/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 20/200:\n", + "Train Loss: 0.2101, Train Accuracy: 0.9231\n", + "Val Loss: 0.1596, Val Accuracy: 0.9476, Val ROC AUC: 0.9910\n", + "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 21/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 21/200:\n", + "Train Loss: 0.1990, Train Accuracy: 0.9277\n", + "Val Loss: 0.1646, Val Accuracy: 0.9391, Val ROC AUC: 0.9903\n", + "⚠️ No improvement in Val ROC AUC for 6 epoch(s). Best is 0.9920.\n", + "\n", + "===== Epoch 22/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 22/200:\n", + "Train Loss: 0.2009, Train Accuracy: 0.9268\n", + "Val Loss: 0.1438, Val Accuracy: 0.9483, Val ROC AUC: 0.9924\n", + "✅ New best model saved with Val ROC AUC: 0.9924\n", + "\n", + "===== Epoch 23/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 23/200:\n", + "Train Loss: 0.2010, Train Accuracy: 0.9278\n", + "Val Loss: 0.2015, Val Accuracy: 0.9256, Val ROC AUC: 0.9855\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9924.\n", + "\n", + "===== Epoch 24/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 24/200:\n", + "Train Loss: 0.2141, Train Accuracy: 0.9235\n", + "Val Loss: 0.1369, Val Accuracy: 0.9529, Val ROC AUC: 0.9928\n", + "✅ New best model saved with Val ROC AUC: 0.9928\n", + "\n", + "===== Epoch 25/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 25/200:\n", + "Train Loss: 0.2007, Train Accuracy: 0.9269\n", + "Val Loss: 0.2793, Val Accuracy: 0.9020, Val ROC AUC: 0.9764\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9928.\n", + "\n", + "===== Epoch 26/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 26/200:\n", + "Train Loss: 0.1993, Train Accuracy: 0.9272\n", + "Val Loss: 0.1412, Val Accuracy: 0.9520, Val ROC AUC: 0.9917\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9928.\n", + "\n", + "===== Epoch 27/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 27/200:\n", + "Train Loss: 0.1817, Train Accuracy: 0.9351\n", + "Val Loss: 0.2009, Val Accuracy: 0.9252, Val ROC AUC: 0.9843\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9928.\n", + "\n", + "===== Epoch 28/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 28/200:\n", + "Train Loss: 0.2001, Train Accuracy: 0.9271\n", + "Val Loss: 0.1242, Val Accuracy: 0.9588, Val ROC AUC: 0.9942\n", + "✅ New best model saved with Val ROC AUC: 0.9942\n", + "\n", + "===== Epoch 29/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 29/200:\n", + "Train Loss: 0.1764, Train Accuracy: 0.9373\n", + "Val Loss: 0.2235, Val Accuracy: 0.9174, Val ROC AUC: 0.9841\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9942.\n", + "\n", + "===== Epoch 30/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 30/200:\n", + "Train Loss: 0.1734, Train Accuracy: 0.9385\n", + "Val Loss: 0.1251, Val Accuracy: 0.9576, Val ROC AUC: 0.9935\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9942.\n", + "\n", + "===== Epoch 31/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 31/200:\n", + "Train Loss: 0.1946, Train Accuracy: 0.9306\n", + "Val Loss: 0.2429, Val Accuracy: 0.8971, Val ROC AUC: 0.9795\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9942.\n", + "\n", + "===== Epoch 32/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 32/200:\n", + "Train Loss: 0.2203, Train Accuracy: 0.9198\n", + "Val Loss: 0.1360, Val Accuracy: 0.9487, Val ROC AUC: 0.9928\n", + "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9942.\n", + "\n", + "===== Epoch 33/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 33/200:\n", + "Train Loss: 0.1714, Train Accuracy: 0.9401\n", + "Val Loss: 0.2352, Val Accuracy: 0.9176, Val ROC AUC: 0.9870\n", + "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9942.\n", + "\n", + "===== Epoch 34/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 34/200:\n", + "Train Loss: 0.1754, Train Accuracy: 0.9386\n", + "Val Loss: 0.1072, Val Accuracy: 0.9616, Val ROC AUC: 0.9961\n", + "✅ New best model saved with Val ROC AUC: 0.9961\n", + "\n", + "===== Epoch 35/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 35/200:\n", + "Train Loss: 0.1649, Train Accuracy: 0.9426\n", + "Val Loss: 0.2433, Val Accuracy: 0.9060, Val ROC AUC: 0.9815\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9961.\n", + "\n", + "===== Epoch 36/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 36/200:\n", + "Train Loss: 0.1713, Train Accuracy: 0.9398\n", + "Val Loss: 0.1205, Val Accuracy: 0.9581, Val ROC AUC: 0.9943\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9961.\n", + "\n", + "===== Epoch 37/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 37/200:\n", + "Train Loss: 0.1671, Train Accuracy: 0.9412\n", + "Val Loss: 0.2016, Val Accuracy: 0.9250, Val ROC AUC: 0.9878\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9961.\n", + "\n", + "===== Epoch 38/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 38/200:\n", + "Train Loss: 0.1550, Train Accuracy: 0.9458\n", + "Val Loss: 0.1049, Val Accuracy: 0.9635, Val ROC AUC: 0.9955\n", + "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9961.\n", + "\n", + "===== Epoch 39/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 39/200:\n", + "Train Loss: 0.1474, Train Accuracy: 0.9490\n", + "Val Loss: 0.2036, Val Accuracy: 0.9350, Val ROC AUC: 0.9849\n", + "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9961.\n", + "\n", + "===== Epoch 40/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 40/200:\n", + "Train Loss: 0.1433, Train Accuracy: 0.9510\n", + "Val Loss: 0.0847, Val Accuracy: 0.9712, Val ROC AUC: 0.9970\n", + "✅ New best model saved with Val ROC AUC: 0.9970\n", + "\n", + "===== Epoch 41/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 41/200:\n", + "Train Loss: 0.1556, Train Accuracy: 0.9459\n", + "Val Loss: 0.1377, Val Accuracy: 0.9508, Val ROC AUC: 0.9931\n", + "⚠️ No improvement in Val ROC AUC for 1 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 42/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 42/200:\n", + "Train Loss: 0.1400, Train Accuracy: 0.9517\n", + "Val Loss: 0.1029, Val Accuracy: 0.9661, Val ROC AUC: 0.9950\n", + "⚠️ No improvement in Val ROC AUC for 2 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 43/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 43/200:\n", + "Train Loss: 0.1454, Train Accuracy: 0.9503\n", + "Val Loss: 0.2245, Val Accuracy: 0.9220, Val ROC AUC: 0.9888\n", + "⚠️ No improvement in Val ROC AUC for 3 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 44/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 44/200:\n", + "Train Loss: 0.1394, Train Accuracy: 0.9523\n", + "Val Loss: 0.0874, Val Accuracy: 0.9701, Val ROC AUC: 0.9968\n", + "⚠️ No improvement in Val ROC AUC for 4 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 45/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 45/200:\n", + "Train Loss: 0.1534, Train Accuracy: 0.9478\n", + "Val Loss: 0.1396, Val Accuracy: 0.9518, Val ROC AUC: 0.9925\n", + "⚠️ No improvement in Val ROC AUC for 5 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 46/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 46/200:\n", + "Train Loss: 0.1505, Train Accuracy: 0.9481\n", + "Val Loss: 0.1128, Val Accuracy: 0.9617, Val ROC AUC: 0.9945\n", + "⚠️ No improvement in Val ROC AUC for 6 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 47/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 47/200:\n", + "Train Loss: 0.1494, Train Accuracy: 0.9485\n", + "Val Loss: 0.1788, Val Accuracy: 0.9294, Val ROC AUC: 0.9901\n", + "⚠️ No improvement in Val ROC AUC for 7 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 48/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 48/200:\n", + "Train Loss: 0.1399, Train Accuracy: 0.9521\n", + "Val Loss: 0.1041, Val Accuracy: 0.9647, Val ROC AUC: 0.9956\n", + "⚠️ No improvement in Val ROC AUC for 8 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 49/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 49/200:\n", + "Train Loss: 0.1363, Train Accuracy: 0.9537\n", + "Val Loss: 0.1726, Val Accuracy: 0.9388, Val ROC AUC: 0.9912\n", + "⚠️ No improvement in Val ROC AUC for 9 epoch(s). Best is 0.9970.\n", + "\n", + "===== Epoch 50/200 =====\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/torch/utils/data/dataloader.py:624: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "[SUMMARY] Epoch 50/200:\n", + "Train Loss: 0.1385, Train Accuracy: 0.9533\n", + "Val Loss: 0.0885, Val Accuracy: 0.9710, Val ROC AUC: 0.9965\n", + "⚠️ No improvement in Val ROC AUC for 10 epoch(s). Best is 0.9970.\n", + "\n", + "🛑 Early stopping triggered after 10 epochs without improvement.\n", + "\n", + "Training Complete!\n" + ] + } + ], + "source": [ + "\"\"\"\n", + "Args:\n", + " image_size (int): Size of the input image (e.g., 224).\n", + " patch_size (int): Size of each patch (e.g., 16).\n", + " in_channels (int): Number of input channels (e.g., 1 for your task).\n", + " num_classes (int): Number of output classes (e.g., 3 for your task).\n", + " embed_dim (int): The main embedding dimension (e.g., 768 for ViT-Base).\n", + " depth (int): Number of Transformer Encoder blocks (e.g., 12 for ViT-Base).\n", + " num_heads (int): Number of attention heads (e.g., 12 for ViT-Base).\n", + " mlp_ratio (float): Ratio to determine MLP hidden dimension (e.g., 4.0).\n", + " dropout (float): Dropout probability.\n", + "\"\"\"\n", + "from torch.optim.lr_scheduler import LambdaLR, CosineAnnealingLR, SequentialLR\n", + "batch_size = 32\n", + "learning_rate = 5e-4\n", + "weight_decay = 0.05\n", + "num_epochs = 200\n", + "warmup_epochs = 10\n", + "model = VisionTransformer(\n", + " image_size=64, patch_size=4, in_channels=1, num_classes=3,\n", + " embed_dim=192, depth=6, num_heads=4, mlp_ratio=4.0, dropout=0.1\n", + " )\n", + "\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=1e-5)\n", + "\n", + "\n", + "#scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs, eta_min=1e-6)\n", + "def warmup_lambda(current_epoch):\n", + " if current_epoch < warmup_epochs:\n", + " return float(current_epoch) / float(max(1, warmup_epochs))\n", + " return 1.0\n", + "warmup_scheduler = LambdaLR(optimizer, lr_lambda=warmup_lambda)\n", + "main_scheduler = CosineAnnealingLR(optimizer, T_max=num_epochs - warmup_epochs, eta_min=1e-6)\n", + "scheduler = SequentialLR(optimizer, schedulers=[warmup_scheduler, main_scheduler], milestones=[warmup_epochs])\n", + "\n", + "\n", + "print(\"Optimizer: Adam\")\n", + "print(f\"Learning Rate: {learning_rate}\")\n", + "\n", + "# Train Model\n", + "model, all_probs, all_labels = train_model(model, train_loader, val_loader, criterion, optimizer, scheduler, num_epochs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "G_-lEQtu_txF", + "outputId": "380b9897-dd4d-40ef-ba22-02663ddea4b9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating ROC Curve\n", + "Class 0 ROC AUC: 0.9985\n", + "Class 1 ROC AUC: 0.9936\n", + "Class 2 ROC AUC: 0.9974\n", + "ROC Curve saved as roc_curve.png\n", + "Training and Evaluation Complete!\n" + ] + } + ], + "source": [ + "\"\"\" ROC Curve Plotting Function\"\"\"\n", + "def plot_roc_curve(all_preds, all_labels):\n", + " print(\"Generating ROC Curve\")\n", + "\n", + " # Convert predictions and labels to numpy arrays\n", + " all_preds = np.array(all_preds)\n", + " all_labels = np.array(all_labels)\n", + "\n", + " fpr = dict()\n", + " tpr = dict()\n", + " roc_auc = dict()\n", + " n_classes = 3\n", + "\n", + " for i in range(n_classes):\n", + " fpr[i], tpr[i], _ = roc_curve((all_labels == i).astype(int), all_preds[:, i])\n", + " roc_auc[i] = auc(fpr[i], tpr[i])\n", + "\n", + " print(f\"Class {i} ROC AUC: {roc_auc[i]:.4f}\")\n", + "\n", + " # Plot ROC curves\n", + " plt.figure(figsize=(10, 8))\n", + " colors = ['blue', 'red', 'green']\n", + " class_names = ['Axion', 'CDM', 'No Substructure']\n", + "\n", + " for i, color in zip(range(n_classes), colors):\n", + " plt.plot(fpr[i], tpr[i], color=color,\n", + " label=f'{class_names[i]} (AUC = {roc_auc[i]:.2f})')\n", + "\n", + " plt.plot([0, 1], [0, 1], 'k--')\n", + " plt.xlim([0.0, 1.0])\n", + " plt.ylim([0.0, 1.05])\n", + " plt.xlabel('False Positive Rate')\n", + " plt.ylabel('True Positive Rate')\n", + " plt.title('Receiver Operating Characteristic (ROC) Curve')\n", + " plt.legend(loc=\"lower right\")\n", + " plt.savefig('/content/drive/MyDrive/Model_III_dataset/roc_curve.png')\n", + " plt.close()\n", + "\n", + " print(\"ROC Curve saved as roc_curve.png\")\n", + "\n", + "\n", + "plot_roc_curve(all_probs, all_labels)\n", + "\n", + "print(\"Training and Evaluation Complete!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "MZ59pFZa_txG" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file + "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.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Transformers_Classification_DeepLense_Kartik_Sachdev/models/swin.py b/Transformers_Classification_DeepLense_Kartik_Sachdev/models/swin.py index cb43777..342a223 100644 --- a/Transformers_Classification_DeepLense_Kartik_Sachdev/models/swin.py +++ b/Transformers_Classification_DeepLense_Kartik_Sachdev/models/swin.py @@ -1,7 +1,7 @@ import torch import torch.nn as nn import torch.utils.checkpoint as checkpoint -from timm.models.layers import DropPath, to_2tuple, trunc_normal_ +from timm.layers import DropPath, to_2tuple, trunc_normal_ ############################################### # file adapted from: https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py