In [2]:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader, SubsetRandomSampler
from tqdm import tqdm
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
In [3]:
CIFAR10_MEAN = [0.4914, 0.4822, 0.4465]
CIFAR10_STD = [0.2470, 0.2435, 0.2616]
train_transform = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(
brightness=0.2,
contrast=0.2,
saturation=0.2,
hue=0.1
),
transforms.ToTensor(),
transforms.Normalize(CIFAR10_MEAN, CIFAR10_STD),
transforms.RandomErasing(p=0.5, scale=(0.02, 0.2), ratio=(0.3, 3.3))
])
test_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(CIFAR10_MEAN, CIFAR10_STD)
])
train_dataset = datasets.CIFAR10(
root='./data',
train=True,
transform=train_transform,
download=True
)
test_dataset = datasets.CIFAR10(
root='./data',
train=False,
transform=test_transform,
download=True
)
train_loader = DataLoader(
dataset=train_dataset,
batch_size=128,
shuffle=True,
num_workers=4,
pin_memory=True,
persistent_workers=True
)
val_loader = DataLoader(
dataset=test_dataset,
batch_size=128,
shuffle=False,
num_workers=4,
pin_memory=True,
persistent_workers=True
)
100%|██████████| 170M/170M [00:04<00:00, 36.6MB/s]
In [4]:
class VggCIFAR(nn.Module):
def __init__(self, num_classes=10, width_multiplier=1.2):
super().__init__()
c1 = int(64 * width_multiplier) # 96
c2 = int(128 * width_multiplier) # 192
c3 = int(256 * width_multiplier) # 384
c4 = int(512 * width_multiplier) # 768
self.features = nn.Sequential(
# Block 1
nn.Conv2d(3, c1, 3, padding=1),
nn.BatchNorm2d(c1),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2),
# Block 2
nn.Conv2d(c1, c2, 3, padding=1),
nn.BatchNorm2d(c2),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2),
# Block 3
nn.Conv2d(c2, c3, 3, padding=1),
nn.BatchNorm2d(c3),
nn.ReLU(inplace=True),
nn.Conv2d(c3, c3, 3, padding=1),
nn.BatchNorm2d(c3),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2),
# Block 4
nn.Conv2d(c3, c4, 3, padding=1),
nn.BatchNorm2d(c4),
nn.ReLU(inplace=True),
nn.Conv2d(c4, c4, 3, padding=1),
nn.BatchNorm2d(c4),
nn.ReLU(inplace=True),
nn.MaxPool2d(2, 2)
)
self.classifier = nn.Sequential(
nn.Dropout(0.5),
nn.Linear(c4 * 2 * 2, 1024),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(1024, num_classes)
)
self._initialize_weights()
def forward(self, x):
x = self.features(x)
x = torch.flatten(x, 1)
x = self.classifier(x)
return x
def _initialize_weights(self):
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.Linear):
nn.init.normal_(m.weight, 0, 0.01)
nn.init.constant_(m.bias, 0)
In [5]:
model = VggCIFAR().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=5e-4)
scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30, 60, 80], gamma=0.2)
best_acc = 0
epochs = 100
for epoch in range(epochs):
model.train()
running_loss = 0.0
correct = 0
total = 0
train_pbar = tqdm(train_loader, desc=f"Epoch {epoch+1}/{epochs} [Train]")
for inputs, targets in train_pbar:
inputs, targets = inputs.to(device), targets.to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
running_loss += loss.item()
_, predicted = outputs.max(1)
total += targets.size(0)
correct += predicted.eq(targets).sum().item()
train_pbar.set_postfix(loss=running_loss/(total/targets.size(0)), acc=100.*correct/total)
train_loss = running_loss / len(train_loader)
train_acc = 100. * correct / total
model.eval()
val_loss = 0.0
val_correct = 0
val_total = 0
with torch.no_grad():
val_pbar = tqdm(val_loader, desc=f"Epoch {epoch+1}/{epochs} [Val]")
for inputs, targets in val_pbar:
inputs, targets = inputs.to(device), targets.to(device)
outputs = model(inputs)
loss = criterion(outputs, targets)
val_loss += loss.item()
_, predicted = outputs.max(1)
val_total += targets.size(0)
val_correct += predicted.eq(targets).sum().item()
val_pbar.set_postfix(loss=val_loss/(val_total/targets.size(0)), acc=100.*val_correct/val_total)
validation_loss = val_loss / len(val_loader)
validation_acc = 100. * val_correct / val_total
print(f"Epoch {epoch+1}/{epochs} | Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.2f}% | Val Loss: {validation_loss:.4f}, Val Acc: {validation_acc:.2f}%")
scheduler.step()
if validation_acc > best_acc:
best_acc = validation_acc
torch.save(model.state_dict(), 'best_lenet_classic_model.pth')
print(f"New best model found! Accuracy: {best_acc:.2f}%. Saving model...")
print("\nTraining finished.")
print(f"Best validation accuracy: {best_acc:.2f}%")
Epoch 1/100 [Train]: 100%|██████████| 391/391 [00:14<00:00, 26.62it/s, acc=13.9, loss=1.4] Epoch 1/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 96.96it/s, acc=16.5, loss=0.27]
Epoch 1/100 | Train Loss: 2.2451, Train Acc: 13.91% | Val Loss: 2.1343, Val Acc: 16.49% New best model found! Accuracy: 16.49%. Saving model...
Epoch 2/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.09it/s, acc=21.1, loss=1.26] Epoch 2/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.65it/s, acc=30.6, loss=0.225]
Epoch 2/100 | Train Loss: 2.0116, Train Acc: 21.10% | Val Loss: 1.7839, Val Acc: 30.64% New best model found! Accuracy: 30.64%. Saving model...
Epoch 3/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.84it/s, acc=33.3, loss=1.09] Epoch 3/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.99it/s, acc=41.3, loss=0.199]
Epoch 3/100 | Train Loss: 1.7362, Train Acc: 33.30% | Val Loss: 1.5765, Val Acc: 41.26% New best model found! Accuracy: 41.26%. Saving model...
Epoch 4/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.75it/s, acc=46.3, loss=0.937] Epoch 4/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.76it/s, acc=53.7, loss=0.166]
Epoch 4/100 | Train Loss: 1.4973, Train Acc: 46.30% | Val Loss: 1.3144, Val Acc: 53.70% New best model found! Accuracy: 53.70%. Saving model...
Epoch 5/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.88it/s, acc=56.2, loss=0.779] Epoch 5/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 100.80it/s, acc=58.6, loss=0.148]
Epoch 5/100 | Train Loss: 1.2455, Train Acc: 56.17% | Val Loss: 1.1747, Val Acc: 58.63% New best model found! Accuracy: 58.63%. Saving model...
Epoch 6/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.71it/s, acc=61.6, loss=0.693] Epoch 6/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.03it/s, acc=64.3, loss=0.133]
Epoch 6/100 | Train Loss: 1.1084, Train Acc: 61.62% | Val Loss: 1.0488, Val Acc: 64.29% New best model found! Accuracy: 64.29%. Saving model...
Epoch 7/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.07it/s, acc=65.3, loss=0.634] Epoch 7/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.84it/s, acc=68.8, loss=0.119]
Epoch 7/100 | Train Loss: 1.0142, Train Acc: 65.26% | Val Loss: 0.9389, Val Acc: 68.78% New best model found! Accuracy: 68.78%. Saving model...
Epoch 8/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.90it/s, acc=67.6, loss=0.605] Epoch 8/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.79it/s, acc=65.6, loss=0.133]
Epoch 8/100 | Train Loss: 0.9665, Train Acc: 67.59% | Val Loss: 1.0534, Val Acc: 65.58%
Epoch 9/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.22it/s, acc=69.2, loss=0.571] Epoch 9/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 105.65it/s, acc=72.6, loss=0.104]
Epoch 9/100 | Train Loss: 0.9134, Train Acc: 69.22% | Val Loss: 0.8219, Val Acc: 72.64% New best model found! Accuracy: 72.64%. Saving model...
Epoch 10/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.89it/s, acc=70.6, loss=0.55] Epoch 10/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 102.24it/s, acc=70.4, loss=0.115]
Epoch 10/100 | Train Loss: 0.8788, Train Acc: 70.58% | Val Loss: 0.9067, Val Acc: 70.36%
Epoch 11/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.27it/s, acc=71.5, loss=0.533] Epoch 11/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.94it/s, acc=75.6, loss=0.0901]
Epoch 11/100 | Train Loss: 0.8521, Train Acc: 71.53% | Val Loss: 0.7130, Val Acc: 75.60% New best model found! Accuracy: 75.60%. Saving model...
Epoch 12/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.33it/s, acc=72.4, loss=0.521] Epoch 12/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.53it/s, acc=76, loss=0.0919]
Epoch 12/100 | Train Loss: 0.8325, Train Acc: 72.40% | Val Loss: 0.7268, Val Acc: 76.04% New best model found! Accuracy: 76.04%. Saving model...
Epoch 13/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.35it/s, acc=72.7, loss=0.512] Epoch 13/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.42it/s, acc=69.8, loss=0.115]
Epoch 13/100 | Train Loss: 0.8184, Train Acc: 72.74% | Val Loss: 0.9130, Val Acc: 69.84%
Epoch 14/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.04it/s, acc=73.5, loss=0.5] Epoch 14/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.45it/s, acc=76.6, loss=0.0868]
Epoch 14/100 | Train Loss: 0.8000, Train Acc: 73.52% | Val Loss: 0.6870, Val Acc: 76.62% New best model found! Accuracy: 76.62%. Saving model...
Epoch 15/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.14it/s, acc=73.8, loss=0.495] Epoch 15/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.17it/s, acc=70.7, loss=0.116]
Epoch 15/100 | Train Loss: 0.7910, Train Acc: 73.85% | Val Loss: 0.9207, Val Acc: 70.68%
Epoch 16/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.09it/s, acc=74.4, loss=0.483] Epoch 16/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.96it/s, acc=76.5, loss=0.0882]
Epoch 16/100 | Train Loss: 0.7721, Train Acc: 74.37% | Val Loss: 0.6981, Val Acc: 76.49%
Epoch 17/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.11it/s, acc=75, loss=0.476] Epoch 17/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.32it/s, acc=71.2, loss=0.111]
Epoch 17/100 | Train Loss: 0.7610, Train Acc: 74.97% | Val Loss: 0.8767, Val Acc: 71.17%
Epoch 18/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.39it/s, acc=75.2, loss=0.469] Epoch 18/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.31it/s, acc=75.3, loss=0.0995]
Epoch 18/100 | Train Loss: 0.7496, Train Acc: 75.24% | Val Loss: 0.7876, Val Acc: 75.32%
Epoch 19/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.26it/s, acc=75.5, loss=0.465] Epoch 19/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 115.26it/s, acc=77.3, loss=0.0864]
Epoch 19/100 | Train Loss: 0.7430, Train Acc: 75.53% | Val Loss: 0.6832, Val Acc: 77.30% New best model found! Accuracy: 77.30%. Saving model...
Epoch 20/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.13it/s, acc=75.1, loss=0.471] Epoch 20/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 116.90it/s, acc=70.2, loss=0.121]
Epoch 20/100 | Train Loss: 0.7529, Train Acc: 75.12% | Val Loss: 0.9568, Val Acc: 70.17%
Epoch 21/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.68it/s, acc=75.8, loss=0.457] Epoch 21/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 104.77it/s, acc=64.8, loss=0.147]
Epoch 21/100 | Train Loss: 0.7297, Train Acc: 75.85% | Val Loss: 1.1618, Val Acc: 64.80%
Epoch 22/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.97it/s, acc=76.3, loss=0.454] Epoch 22/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 114.74it/s, acc=74.9, loss=0.104]
Epoch 22/100 | Train Loss: 0.7255, Train Acc: 76.30% | Val Loss: 0.8197, Val Acc: 74.93%
Epoch 23/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.15it/s, acc=76.2, loss=0.454] Epoch 23/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.39it/s, acc=77, loss=0.0912]
Epoch 23/100 | Train Loss: 0.7253, Train Acc: 76.21% | Val Loss: 0.7212, Val Acc: 77.00%
Epoch 24/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.10it/s, acc=76.2, loss=0.448] Epoch 24/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 115.06it/s, acc=78.3, loss=0.0872]
Epoch 24/100 | Train Loss: 0.7160, Train Acc: 76.23% | Val Loss: 0.6901, Val Acc: 78.32% New best model found! Accuracy: 78.32%. Saving model...
Epoch 25/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.82it/s, acc=76.4, loss=0.447] Epoch 25/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.65it/s, acc=74.2, loss=0.106]
Epoch 25/100 | Train Loss: 0.7140, Train Acc: 76.41% | Val Loss: 0.8353, Val Acc: 74.16%
Epoch 26/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.98it/s, acc=76.3, loss=0.448] Epoch 26/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.20it/s, acc=76.5, loss=0.0855]
Epoch 26/100 | Train Loss: 0.7169, Train Acc: 76.31% | Val Loss: 0.6762, Val Acc: 76.48%
Epoch 27/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.24it/s, acc=76.6, loss=0.444] Epoch 27/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.33it/s, acc=79, loss=0.0792]
Epoch 27/100 | Train Loss: 0.7099, Train Acc: 76.59% | Val Loss: 0.6264, Val Acc: 78.98% New best model found! Accuracy: 78.98%. Saving model...
Epoch 28/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.10it/s, acc=76.4, loss=0.447] Epoch 28/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 114.08it/s, acc=74.4, loss=0.0991]
Epoch 28/100 | Train Loss: 0.7146, Train Acc: 76.42% | Val Loss: 0.7841, Val Acc: 74.43%
Epoch 29/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.93it/s, acc=77.1, loss=0.438] Epoch 29/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.44it/s, acc=74.1, loss=0.0954]
Epoch 29/100 | Train Loss: 0.6999, Train Acc: 77.07% | Val Loss: 0.7550, Val Acc: 74.13%
Epoch 30/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.91it/s, acc=77, loss=0.438] Epoch 30/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 116.41it/s, acc=74.1, loss=0.0991]
Epoch 30/100 | Train Loss: 0.6994, Train Acc: 77.05% | Val Loss: 0.7841, Val Acc: 74.14%
Epoch 31/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.82it/s, acc=83.9, loss=0.301] Epoch 31/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.00it/s, acc=86.7, loss=0.0494]
Epoch 31/100 | Train Loss: 0.4819, Train Acc: 83.90% | Val Loss: 0.3908, Val Acc: 86.71% New best model found! Accuracy: 86.71%. Saving model...
Epoch 32/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.07it/s, acc=85.8, loss=0.265] Epoch 32/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.55it/s, acc=87.3, loss=0.047]
Epoch 32/100 | Train Loss: 0.4244, Train Acc: 85.84% | Val Loss: 0.3717, Val Acc: 87.26% New best model found! Accuracy: 87.26%. Saving model...
Epoch 33/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.12it/s, acc=86.7, loss=0.251] Epoch 33/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.25it/s, acc=87.3, loss=0.0471]
Epoch 33/100 | Train Loss: 0.4009, Train Acc: 86.74% | Val Loss: 0.3722, Val Acc: 87.33% New best model found! Accuracy: 87.33%. Saving model...
Epoch 34/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.06it/s, acc=87, loss=0.241] Epoch 34/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 104.29it/s, acc=87.2, loss=0.0481]
Epoch 34/100 | Train Loss: 0.3845, Train Acc: 87.02% | Val Loss: 0.3805, Val Acc: 87.25%
Epoch 35/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.94it/s, acc=87.6, loss=0.233] Epoch 35/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.51it/s, acc=88, loss=0.0444]
Epoch 35/100 | Train Loss: 0.3716, Train Acc: 87.58% | Val Loss: 0.3514, Val Acc: 88.04% New best model found! Accuracy: 88.04%. Saving model...
Epoch 36/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.80it/s, acc=87.6, loss=0.23] Epoch 36/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.36it/s, acc=87, loss=0.0495]
Epoch 36/100 | Train Loss: 0.3681, Train Acc: 87.59% | Val Loss: 0.3918, Val Acc: 86.95%
Epoch 37/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.00it/s, acc=87.9, loss=0.225] Epoch 37/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.31it/s, acc=86.9, loss=0.0498]
Epoch 37/100 | Train Loss: 0.3590, Train Acc: 87.92% | Val Loss: 0.3937, Val Acc: 86.94%
Epoch 38/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.09it/s, acc=87.9, loss=0.225] Epoch 38/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.11it/s, acc=88.4, loss=0.0444]
Epoch 38/100 | Train Loss: 0.3596, Train Acc: 87.92% | Val Loss: 0.3510, Val Acc: 88.42% New best model found! Accuracy: 88.42%. Saving model...
Epoch 39/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.14it/s, acc=88, loss=0.219] Epoch 39/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.78it/s, acc=87.4, loss=0.0466]
Epoch 39/100 | Train Loss: 0.3503, Train Acc: 88.00% | Val Loss: 0.3683, Val Acc: 87.43%
Epoch 40/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.90it/s, acc=88.2, loss=0.22] Epoch 40/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.91it/s, acc=87.2, loss=0.0491]
Epoch 40/100 | Train Loss: 0.3521, Train Acc: 88.15% | Val Loss: 0.3884, Val Acc: 87.25%
Epoch 41/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.94it/s, acc=88, loss=0.22] Epoch 41/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.22it/s, acc=88.1, loss=0.0467]
Epoch 41/100 | Train Loss: 0.3519, Train Acc: 88.05% | Val Loss: 0.3694, Val Acc: 88.09%
Epoch 42/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.04it/s, acc=88.4, loss=0.215] Epoch 42/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.13it/s, acc=86.6, loss=0.0503]
Epoch 42/100 | Train Loss: 0.3432, Train Acc: 88.36% | Val Loss: 0.3977, Val Acc: 86.62%
Epoch 43/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.11it/s, acc=88.4, loss=0.214] Epoch 43/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.75it/s, acc=87.1, loss=0.0496]
Epoch 43/100 | Train Loss: 0.3425, Train Acc: 88.43% | Val Loss: 0.3928, Val Acc: 87.12%
Epoch 44/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.98it/s, acc=88.3, loss=0.217] Epoch 44/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.49it/s, acc=87.6, loss=0.045]
Epoch 44/100 | Train Loss: 0.3464, Train Acc: 88.31% | Val Loss: 0.3557, Val Acc: 87.64%
Epoch 45/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.12it/s, acc=88.3, loss=0.214] Epoch 45/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.98it/s, acc=88, loss=0.0478]
Epoch 45/100 | Train Loss: 0.3427, Train Acc: 88.30% | Val Loss: 0.3784, Val Acc: 87.97%
Epoch 46/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.14it/s, acc=88.3, loss=0.215] Epoch 46/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.68it/s, acc=83.7, loss=0.0685]
Epoch 46/100 | Train Loss: 0.3436, Train Acc: 88.30% | Val Loss: 0.5419, Val Acc: 83.66%
Epoch 47/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.11it/s, acc=88.3, loss=0.215] Epoch 47/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.44it/s, acc=86.7, loss=0.0519]
Epoch 47/100 | Train Loss: 0.3441, Train Acc: 88.26% | Val Loss: 0.4108, Val Acc: 86.72%
Epoch 48/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.03it/s, acc=88.4, loss=0.213] Epoch 48/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 104.99it/s, acc=87.5, loss=0.0465]
Epoch 48/100 | Train Loss: 0.3398, Train Acc: 88.43% | Val Loss: 0.3678, Val Acc: 87.49%
Epoch 49/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.96it/s, acc=88.3, loss=0.215] Epoch 49/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.81it/s, acc=85.8, loss=0.055]
Epoch 49/100 | Train Loss: 0.3430, Train Acc: 88.34% | Val Loss: 0.4354, Val Acc: 85.85%
Epoch 50/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.92it/s, acc=88.6, loss=0.209] Epoch 50/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 103.45it/s, acc=86.1, loss=0.0536]
Epoch 50/100 | Train Loss: 0.3346, Train Acc: 88.56% | Val Loss: 0.4242, Val Acc: 86.13%
Epoch 51/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.84it/s, acc=88.5, loss=0.212] Epoch 51/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 105.60it/s, acc=88, loss=0.046]
Epoch 51/100 | Train Loss: 0.3394, Train Acc: 88.49% | Val Loss: 0.3642, Val Acc: 88.00%
Epoch 52/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.92it/s, acc=88.7, loss=0.209] Epoch 52/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.52it/s, acc=86.7, loss=0.0536]
Epoch 52/100 | Train Loss: 0.3345, Train Acc: 88.67% | Val Loss: 0.4243, Val Acc: 86.66%
Epoch 53/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.12it/s, acc=88.8, loss=0.208] Epoch 53/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 116.03it/s, acc=86.6, loss=0.0509]
Epoch 53/100 | Train Loss: 0.3320, Train Acc: 88.79% | Val Loss: 0.4027, Val Acc: 86.61%
Epoch 54/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.96it/s, acc=88.9, loss=0.203] Epoch 54/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 114.37it/s, acc=88.1, loss=0.0457]
Epoch 54/100 | Train Loss: 0.3252, Train Acc: 88.93% | Val Loss: 0.3616, Val Acc: 88.10%
Epoch 55/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.01it/s, acc=88.9, loss=0.206] Epoch 55/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.06it/s, acc=87.7, loss=0.0498]
Epoch 55/100 | Train Loss: 0.3288, Train Acc: 88.89% | Val Loss: 0.3940, Val Acc: 87.67%
Epoch 56/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.23it/s, acc=89.2, loss=0.199] Epoch 56/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.79it/s, acc=87.6, loss=0.0488]
Epoch 56/100 | Train Loss: 0.3188, Train Acc: 89.23% | Val Loss: 0.3863, Val Acc: 87.62%
Epoch 57/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.05it/s, acc=89.2, loss=0.201] Epoch 57/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.58it/s, acc=87, loss=0.0505]
Epoch 57/100 | Train Loss: 0.3220, Train Acc: 89.21% | Val Loss: 0.3994, Val Acc: 87.04%
Epoch 58/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.85it/s, acc=89, loss=0.201] Epoch 58/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 105.22it/s, acc=88, loss=0.0479]
Epoch 58/100 | Train Loss: 0.3221, Train Acc: 89.03% | Val Loss: 0.3789, Val Acc: 87.97%
Epoch 59/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.99it/s, acc=89.1, loss=0.202] Epoch 59/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.63it/s, acc=88.9, loss=0.0433]
Epoch 59/100 | Train Loss: 0.3236, Train Acc: 89.08% | Val Loss: 0.3422, Val Acc: 88.87% New best model found! Accuracy: 88.87%. Saving model...
Epoch 60/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.27it/s, acc=89.2, loss=0.198] Epoch 60/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.47it/s, acc=84.2, loss=0.0626]
Epoch 60/100 | Train Loss: 0.3169, Train Acc: 89.24% | Val Loss: 0.4950, Val Acc: 84.21%
Epoch 61/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.01it/s, acc=92.7, loss=0.138] Epoch 61/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.42it/s, acc=91.1, loss=0.0368]
Epoch 61/100 | Train Loss: 0.2211, Train Acc: 92.71% | Val Loss: 0.2910, Val Acc: 91.12% New best model found! Accuracy: 91.12%. Saving model...
Epoch 62/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.98it/s, acc=93.6, loss=0.118] Epoch 62/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.14it/s, acc=91, loss=0.0358]
Epoch 62/100 | Train Loss: 0.1887, Train Acc: 93.60% | Val Loss: 0.2835, Val Acc: 91.01%
Epoch 63/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.00it/s, acc=94.1, loss=0.112] Epoch 63/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.39it/s, acc=91.3, loss=0.0364]
Epoch 63/100 | Train Loss: 0.1785, Train Acc: 94.07% | Val Loss: 0.2883, Val Acc: 91.35% New best model found! Accuracy: 91.35%. Saving model...
Epoch 64/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.86it/s, acc=94.4, loss=0.105] Epoch 64/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.92it/s, acc=91.3, loss=0.0368]
Epoch 64/100 | Train Loss: 0.1684, Train Acc: 94.39% | Val Loss: 0.2913, Val Acc: 91.30%
Epoch 65/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.17it/s, acc=94.7, loss=0.099] Epoch 65/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.65it/s, acc=91.2, loss=0.0372]
Epoch 65/100 | Train Loss: 0.1583, Train Acc: 94.70% | Val Loss: 0.2940, Val Acc: 91.18%
Epoch 66/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.94it/s, acc=94.8, loss=0.0973] Epoch 66/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.62it/s, acc=91.3, loss=0.0359]
Epoch 66/100 | Train Loss: 0.1556, Train Acc: 94.78% | Val Loss: 0.2840, Val Acc: 91.29%
Epoch 67/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.01it/s, acc=94.8, loss=0.0951] Epoch 67/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.81it/s, acc=91.2, loss=0.0384]
Epoch 67/100 | Train Loss: 0.1521, Train Acc: 94.75% | Val Loss: 0.3035, Val Acc: 91.15%
Epoch 68/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.23it/s, acc=94.8, loss=0.0946] Epoch 68/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.17it/s, acc=91.7, loss=0.0351]
Epoch 68/100 | Train Loss: 0.1512, Train Acc: 94.82% | Val Loss: 0.2779, Val Acc: 91.72% New best model found! Accuracy: 91.72%. Saving model...
Epoch 69/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.92it/s, acc=95.1, loss=0.0914] Epoch 69/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.23it/s, acc=91.6, loss=0.0366]
Epoch 69/100 | Train Loss: 0.1461, Train Acc: 95.06% | Val Loss: 0.2898, Val Acc: 91.57%
Epoch 70/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.20it/s, acc=95.2, loss=0.0904] Epoch 70/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.66it/s, acc=91.6, loss=0.0369]
Epoch 70/100 | Train Loss: 0.1445, Train Acc: 95.19% | Val Loss: 0.2916, Val Acc: 91.56%
Epoch 71/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.89it/s, acc=95.2, loss=0.0885] Epoch 71/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.53it/s, acc=91.3, loss=0.0376]
Epoch 71/100 | Train Loss: 0.1415, Train Acc: 95.22% | Val Loss: 0.2974, Val Acc: 91.33%
Epoch 72/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.20it/s, acc=95.3, loss=0.0878] Epoch 72/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.95it/s, acc=91.5, loss=0.0371]
Epoch 72/100 | Train Loss: 0.1403, Train Acc: 95.30% | Val Loss: 0.2935, Val Acc: 91.45%
Epoch 73/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.79it/s, acc=95.4, loss=0.0852] Epoch 73/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.00it/s, acc=91.6, loss=0.0374]
Epoch 73/100 | Train Loss: 0.1362, Train Acc: 95.44% | Val Loss: 0.2963, Val Acc: 91.60%
Epoch 74/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.97it/s, acc=95.5, loss=0.0816] Epoch 74/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 112.71it/s, acc=91.5, loss=0.0366]
Epoch 74/100 | Train Loss: 0.1304, Train Acc: 95.50% | Val Loss: 0.2893, Val Acc: 91.45%
Epoch 75/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.87it/s, acc=95.4, loss=0.0842] Epoch 75/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 105.24it/s, acc=91.3, loss=0.0369]
Epoch 75/100 | Train Loss: 0.1346, Train Acc: 95.38% | Val Loss: 0.2919, Val Acc: 91.33%
Epoch 76/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.04it/s, acc=95.6, loss=0.0825] Epoch 76/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.74it/s, acc=91.5, loss=0.0372]
Epoch 76/100 | Train Loss: 0.1319, Train Acc: 95.57% | Val Loss: 0.2946, Val Acc: 91.55%
Epoch 77/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.15it/s, acc=95.6, loss=0.0809] Epoch 77/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.85it/s, acc=91.6, loss=0.0378]
Epoch 77/100 | Train Loss: 0.1294, Train Acc: 95.61% | Val Loss: 0.2989, Val Acc: 91.60%
Epoch 78/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.18it/s, acc=95.6, loss=0.0827] Epoch 78/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.98it/s, acc=91.4, loss=0.0381]
Epoch 78/100 | Train Loss: 0.1322, Train Acc: 95.57% | Val Loss: 0.3017, Val Acc: 91.38%
Epoch 79/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.94it/s, acc=95.8, loss=0.0784] Epoch 79/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.29it/s, acc=91.1, loss=0.0392]
Epoch 79/100 | Train Loss: 0.1253, Train Acc: 95.77% | Val Loss: 0.3101, Val Acc: 91.14%
Epoch 80/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.95it/s, acc=95.7, loss=0.0795] Epoch 80/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.77it/s, acc=91.6, loss=0.0373]
Epoch 80/100 | Train Loss: 0.1271, Train Acc: 95.71% | Val Loss: 0.2954, Val Acc: 91.58%
Epoch 81/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.95it/s, acc=96.4, loss=0.0673] Epoch 81/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.48it/s, acc=92.3, loss=0.0347]
Epoch 81/100 | Train Loss: 0.1076, Train Acc: 96.38% | Val Loss: 0.2747, Val Acc: 92.29% New best model found! Accuracy: 92.29%. Saving model...
Epoch 82/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 30.08it/s, acc=96.7, loss=0.0631] Epoch 82/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.51it/s, acc=92.2, loss=0.0351]
Epoch 82/100 | Train Loss: 0.1009, Train Acc: 96.69% | Val Loss: 0.2774, Val Acc: 92.16%
Epoch 83/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.14it/s, acc=96.8, loss=0.0597] Epoch 83/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.85it/s, acc=92.3, loss=0.0348]
Epoch 83/100 | Train Loss: 0.0955, Train Acc: 96.76% | Val Loss: 0.2750, Val Acc: 92.29%
Epoch 84/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.97it/s, acc=96.9, loss=0.0577] Epoch 84/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.74it/s, acc=92.4, loss=0.0351]
Epoch 84/100 | Train Loss: 0.0922, Train Acc: 96.93% | Val Loss: 0.2781, Val Acc: 92.39% New best model found! Accuracy: 92.39%. Saving model...
Epoch 85/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.80it/s, acc=97, loss=0.056] Epoch 85/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 103.76it/s, acc=92.3, loss=0.0355]
Epoch 85/100 | Train Loss: 0.0896, Train Acc: 96.99% | Val Loss: 0.2806, Val Acc: 92.31%
Epoch 86/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.73it/s, acc=97.1, loss=0.0542] Epoch 86/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 103.58it/s, acc=92.5, loss=0.0353]
Epoch 86/100 | Train Loss: 0.0866, Train Acc: 97.10% | Val Loss: 0.2792, Val Acc: 92.46% New best model found! Accuracy: 92.46%. Saving model...
Epoch 87/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.81it/s, acc=97.1, loss=0.056] Epoch 87/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.19it/s, acc=92.5, loss=0.0355]
Epoch 87/100 | Train Loss: 0.0895, Train Acc: 97.05% | Val Loss: 0.2810, Val Acc: 92.52% New best model found! Accuracy: 92.52%. Saving model...
Epoch 88/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.83it/s, acc=97.1, loss=0.054] Epoch 88/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 103.88it/s, acc=92.4, loss=0.0358]
Epoch 88/100 | Train Loss: 0.0863, Train Acc: 97.11% | Val Loss: 0.2829, Val Acc: 92.44%
Epoch 89/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.85it/s, acc=97.3, loss=0.0512] Epoch 89/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.77it/s, acc=92.5, loss=0.036]
Epoch 89/100 | Train Loss: 0.0818, Train Acc: 97.25% | Val Loss: 0.2849, Val Acc: 92.47%
Epoch 90/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.94it/s, acc=97.3, loss=0.0525] Epoch 90/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 103.60it/s, acc=92.3, loss=0.0362]
Epoch 90/100 | Train Loss: 0.0839, Train Acc: 97.30% | Val Loss: 0.2862, Val Acc: 92.26%
Epoch 91/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.70it/s, acc=97.3, loss=0.0518] Epoch 91/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 107.60it/s, acc=92.4, loss=0.0365]
Epoch 91/100 | Train Loss: 0.0829, Train Acc: 97.28% | Val Loss: 0.2889, Val Acc: 92.37%
Epoch 92/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.87it/s, acc=97.2, loss=0.052] Epoch 92/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.32it/s, acc=92.4, loss=0.036]
Epoch 92/100 | Train Loss: 0.0832, Train Acc: 97.23% | Val Loss: 0.2852, Val Acc: 92.44%
Epoch 93/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.76it/s, acc=97.3, loss=0.0513] Epoch 93/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 111.92it/s, acc=92.4, loss=0.0364]
Epoch 93/100 | Train Loss: 0.0819, Train Acc: 97.28% | Val Loss: 0.2879, Val Acc: 92.41%
Epoch 94/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.80it/s, acc=97.3, loss=0.0505] Epoch 94/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 113.89it/s, acc=92.3, loss=0.0366]
Epoch 94/100 | Train Loss: 0.0807, Train Acc: 97.30% | Val Loss: 0.2893, Val Acc: 92.34%
Epoch 95/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.75it/s, acc=97.3, loss=0.0501] Epoch 95/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 101.79it/s, acc=92.4, loss=0.0362]
Epoch 95/100 | Train Loss: 0.0801, Train Acc: 97.33% | Val Loss: 0.2862, Val Acc: 92.42%
Epoch 96/100 [Train]: 100%|██████████| 391/391 [00:12<00:00, 30.12it/s, acc=97.4, loss=0.0498] Epoch 96/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 108.56it/s, acc=92.4, loss=0.0367]
Epoch 96/100 | Train Loss: 0.0797, Train Acc: 97.39% | Val Loss: 0.2901, Val Acc: 92.39%
Epoch 97/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.39it/s, acc=97.3, loss=0.0498] Epoch 97/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 102.87it/s, acc=92.4, loss=0.0361]
Epoch 97/100 | Train Loss: 0.0796, Train Acc: 97.31% | Val Loss: 0.2852, Val Acc: 92.42%
Epoch 98/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.88it/s, acc=97.5, loss=0.0475] Epoch 98/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 106.08it/s, acc=92.3, loss=0.0363]
Epoch 98/100 | Train Loss: 0.0760, Train Acc: 97.49% | Val Loss: 0.2868, Val Acc: 92.32%
Epoch 99/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.86it/s, acc=97.4, loss=0.0495] Epoch 99/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 109.80it/s, acc=92.5, loss=0.0358]
Epoch 99/100 | Train Loss: 0.0790, Train Acc: 97.43% | Val Loss: 0.2833, Val Acc: 92.49%
Epoch 100/100 [Train]: 100%|██████████| 391/391 [00:13<00:00, 29.89it/s, acc=97.6, loss=0.0466] Epoch 100/100 [Val]: 100%|██████████| 79/79 [00:00<00:00, 110.30it/s, acc=92.4, loss=0.0362]
Epoch 100/100 | Train Loss: 0.0745, Train Acc: 97.58% | Val Loss: 0.2863, Val Acc: 92.44% Training finished. Best validation accuracy: 92.52%