0% found this document useful (0 votes)
4 views12 pages

Deep Learning Assignment 1

The document outlines a deep learning assignment involving the implementation of AlexNet and a custom CNN using the CIFAR-10 dataset. It includes code for data loading, preprocessing, model training, and evaluation, along with visualizations of class distributions and accuracy curves. Additionally, it highlights the requirement for GitHub users to enable two-factor authentication by September 11, 2025.

Uploaded by

Bhawna Mehbubani
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views12 pages

Deep Learning Assignment 1

The document outlines a deep learning assignment involving the implementation of AlexNet and a custom CNN using the CIFAR-10 dataset. It includes code for data loading, preprocessing, model training, and evaluation, along with visualizations of class distributions and accuracy curves. Additionally, it highlights the requirement for GitHub users to enable two-factor authentication by September 11, 2025.

Uploaded by

Bhawna Mehbubani
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.

ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments

BhawnaMehbubani Deep_Learning_Assignments
Code Issues Pull requests Actions Projects Wiki Security Insights Settings
GitHub users are now required to enable two-factor authentication as an additional security measure. Your activity on GitHub
includes you in this requirement. You will need to enable two-factor authentication on your account before September 11, 2025, or be Enable 2FA
restricted from account actions.

Deep_Learning_Assignments / Deep_Learning_Assignment_1.ipynb
BhawnaMehbubani Created using Colab c0b8ee1 · 2 minutes ago

1161 lines (1161 loc) · 261 KB

[Link] 1/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments

Open in Colab

In [1]:
import os
import random
import time
import copy
from itertools import product

import numpy as np
import [Link] as plt

import torch
import [Link] as nn
import [Link] as F
from [Link] import DataLoader, random_split, Subset
import torchvision
from torchvision import datasets, transforms, models

from [Link] import accuracy_score, precision_recall_fscore_support, f1_score


from tqdm import tqdm

In [2]:
# ----------------------------
# Reproducibility
# ----------------------------
SEED = 42
[Link](SEED)
[Link](SEED)
torch.manual_seed(SEED)
if [Link].is_available():
[Link].manual_seed_all(SEED)

device = [Link]("cuda" if [Link].is_available() else "cpu")


print("Device:", device)

Device: cuda

In [3]:
# ----------------------------
# Config / Paths
# ----------------------------
OUT_DIR = "cifar_experiments"
[Link](OUT_DIR, exist_ok=True)
BEST_MODEL_PATH = [Link](OUT_DIR, "best_model.pth")

In [4]:
# ----------------------------
# Data transforms and loaders
# ----------------------------
# For AlexNet we will resize to 224. For custom CNN we can keep 32 or resize as desired.
transform_train_alex = [Link]([
[Link](224),
[Link](),
[Link](224, padding=4),
[Link](),
[Link]((0.4914, 0.4822, 0.4465),
(0.2470, 0.2435, 0.2616))
])
transform_test_alex = [Link]([
[Link](224),
[Link](),
[Link]((0.4914, 0.4822, 0.4465),
(0.2470, 0.2435, 0.2616))
])

# For custom CNN we use 32x32 baseline transforms


transform_train = [Link]([
[Link](),
[Link](32, padding=4),
[Link](),
[Link]((0.4914, 0.4822, 0.4465),
(0.2470, 0.2435, 0.2616))
])
transform_test = [Link]([
[Link](),
[Link]((0.4914, 0.4822, 0.4465),
(0.2470, 0.2435, 0.2616))
])

# Download CIFAR-10
dataset_train_full = datasets.CIFAR10(root="./data", train=True, download=True, transform=transform_train)
dataset_test = datasets.CIFAR10(root="./data", train=False, download=True, transform=transform_test)

# We'll create a validation split from the train set (e.g., 45k train + 5k val)
val_size = 5000
train_size = len(dataset_train_full) - val_size
dataset_train, dataset_val = random_split(dataset_train_full, [train_size, val_size], generator=[Link]().

# Simpler approach: reload CIFAR10 with alex transforms for alexnet


dataset_train_full_alex = datasets.CIFAR10(root="./data", train=True, download=False, transform=transform_train_al
dataset_test_alex = datasets.CIFAR10(root="./data", train=False, download=False, transform=transform_test_alex)
dataset_train_alex, dataset_val_alex = random_split(dataset_train_full_alex, [train_size, val_size], generator=tor

[Link] 2/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
100%|██████████| 170M/170M [00:03<00:00, 44.0MB/s]

In [5]:
# Class names
classes = dataset_train_full.classes
num_classes = len(classes)
print("Classes:", classes)

# Visualize class distribution (on the full train dataset)


def plot_class_distribution():
labels = [label for _, label in dataset_train_full]
counts = [Link](labels, minlength=num_classes)
# Histogram
[Link](figsize=(8,4))
[Link](range(num_classes), counts, tick_label=classes)
[Link]("CIFAR-10 class distribution (training set)")
[Link](rotation=45)
plt.tight_layout()
[Link]([Link](OUT_DIR, "class_histogram.png"))
[Link]()

# Pie chart
[Link](figsize=(6,6))
[Link](counts, labels=classes, autopct='%1.1f%%')
[Link]("CIFAR-10 class distribution (training set) - Pie")
plt.tight_layout()
[Link]([Link](OUT_DIR, "class_pie.png"))
[Link]()

plot_class_distribution()

Classes: ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

In [6]:
# ----------------------------
# AlexNet implementation (adapted)
# ----------------------------
[Link] 3/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
class AlexNetCIFAR([Link]):
def __init__(self, num_classes=10):
super(AlexNetCIFAR, self).__init__()
# Use the torchvision AlexNet but adjusted final classifier for num_classes,
# or implement a smaller variant:
[Link] = [Link](
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2), # output ~ (64, 54, 54) for 224 input
[Link](inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(64, 192, kernel_size=5, padding=2),
[Link](inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(192, 384, kernel_size=3, padding=1),
[Link](inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
[Link](inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1),
[Link](inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
)
# classifier
[Link] = [Link](
[Link](),
[Link](256 * 6 * 6, 4096), # assumes input 224-> after convs ~6x6
[Link](inplace=True),
[Link](),
[Link](4096, 4096),
[Link](inplace=True),
[Link](4096, num_classes),
)

def forward(self, x):


x = [Link](x)
x = [Link](x, 1)
x = [Link](x)
return x

In [7]:
def train_one_epoch(model, dataloader, criterion, optimizer, device):
[Link]()
running_loss = 0.0
correct = 0
total = 0
for imgs, labels in dataloader:
imgs, labels = [Link](device), [Link](device)
optimizer.zero_grad()
outputs = model(imgs)
loss = criterion(outputs, labels)
[Link]()
[Link]()

running_loss += [Link]() * [Link](0)


preds = [Link](dim=1)
correct += (preds == labels).sum().item()
total += [Link](0)

epoch_loss = running_loss / total


epoch_acc = correct / total
return epoch_loss, epoch_acc

@torch.no_grad()
def evaluate(model, dataloader, criterion, device):
[Link]()
running_loss = 0.0
correct = 0
total = 0
all_preds = []
all_labels = []
for imgs, labels in dataloader:
imgs, labels = [Link](device), [Link](device)
outputs = model(imgs)
loss = criterion(outputs, labels)

running_loss += [Link]() * [Link](0)


preds = [Link](dim=1)
correct += (preds == labels).sum().item()
total += [Link](0)

all_preds.append([Link]().numpy())
all_labels.append([Link]().numpy())

epoch_loss = running_loss / total


epoch_acc = correct / total
all_preds = [Link](all_preds)
all_labels = [Link](all_labels)
return epoch_loss, epoch_acc, all_preds, all_labels

In [8]:
# ----------------------------
# Function to train AlexNet and plot accuracy curves
# ----------------------------
def run_alexnet_experiment(epochs=20, batch_size=128, lr=1e-3, optimizer_name='Adam'):
print("Preparing data loaders for AlexNet...")
train_loader = DataLoader(dataset_train_alex, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=T
val_loader = DataLoader(dataset_val_alex, batch_size=batch_size, shuffle=False, num_workers=4, pin_memory=True
test_loader = DataLoader(dataset_test_alex, batch_size=batch_size, shuffle=False, num_workers=4, pin_memory=Tr

[Link] 4/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments

model = AlexNetCIFAR(num_classes=num_classes).to(device)
criterion = [Link]()

if optimizer_name.lower() == 'adam':
optimizer = [Link]([Link](), lr=lr)
else:
optimizer = [Link]([Link](), lr=lr)

best_val_acc = 0.0
best_model_wts = [Link](model.state_dict())
history = {'train_loss':[], 'train_acc':[], 'val_loss':[], 'val_acc':[], 'test_acc':[]}

for epoch in range(1, epochs+1):


start = [Link]()
train_loss, train_acc = train_one_epoch(model, train_loader, criterion, optimizer, device)
val_loss, val_acc, _, _ = evaluate(model, val_loader, criterion, device)
# Evaluate on test set each epoch (this is optional but the user asked to plot test accuracy)
_, test_acc, _, _ = evaluate(model, test_loader, criterion, device)

history['train_loss'].append(train_loss)
history['train_acc'].append(train_acc)
history['val_loss'].append(val_loss)
history['val_acc'].append(val_acc)
history['test_acc'].append(test_acc)

if val_acc > best_val_acc:


best_val_acc = val_acc
best_model_wts = [Link](model.state_dict())
[Link]({'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'epoch': epoch}, [Link](OUT_DIR, "alexnet_best.pth"))

elapsed = [Link]() - start


print(f"Epoch {epoch}/{epochs} - train_acc: {train_acc:.4f}, val_acc: {val_acc:.4f}, test_acc: {test_acc:.

# restore best
model.load_state_dict(best_model_wts)

# Plot epoch vs train/val/test accuracy


[Link](figsize=(8,5))
[Link](range(1, epochs+1), history['train_acc'], label='train_acc')
[Link](range(1, epochs+1), history['val_acc'], label='val_acc')
[Link](range(1, epochs+1), history['test_acc'], label='test_acc')
[Link]("Epoch")
[Link]("Accuracy")
[Link]("AlexNet - Accuracy curves")
[Link]()
[Link](True)
[Link]([Link](OUT_DIR, "alexnet_accuracy_curves.png"))
[Link]()

return model, history

In [9]:
# ----------------------------
# Build a configurable CNN dynamically
# ----------------------------
class SimpleCNN([Link]):
def __init__(self, in_channels=3, num_classes=10, conv_layers_cfg=[(32,3), (64,3), (128,3)], use_batchnorm=Tru
"""
conv_layers_cfg: list of tuples (num_filters, kernel_size)
pool_every: apply MaxPool after every 'pool_every' conv layers
"""
super(SimpleCNN, self).__init__()
layers = []
channels = in_channels
conv_count = 0
for (out_channels, k) in conv_layers_cfg:
padding = k // 2
[Link](nn.Conv2d(channels, out_channels, kernel_size=k, padding=padding))
if use_batchnorm:
[Link](nn.BatchNorm2d(out_channels))
[Link]([Link](inplace=True))
conv_count += 1
if conv_count % pool_every == 0:
[Link](nn.MaxPool2d(2))
channels = out_channels

self.feature_extractor = [Link](*layers)

# compute flattened feature size for classifier (assumes input 32x32)


# we can forward a dummy tensor to compute final shape dynamically
with torch.no_grad():
dummy = [Link](1, in_channels, 32, 32)
feat = self.feature_extractor(dummy)
flattened = [Link][1] * [Link][2] * [Link][3]

[Link] = [Link](
[Link](0.5),
[Link](flattened, 256),
[Link](inplace=True),
[Link](0.5),
[Link](256, num_classes)
)

def forward(self x):


[Link] 5/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
def forward(self, x):
x = self.feature_extractor(x)
x = [Link](x, 1)
x = [Link](x)
return x

# ----------------------------
# Hyperparameter tuning routine (simple grid search)
# ----------------------------
def tune_and_train(grid, max_epochs=30, early_stop_patience=6, verbose=True):
"""
grid: dict of lists for parameters:
- conv_layers_options: list of lists e.g. [[(32,3),(64,3),(128,3)], ...]
- batch_size_options: [64,128]
- lr_options: [1e-3, 1e-4]
- optimizer_options: ['Adam','RMSprop']
- epochs_options: [20] (we'll still use max_epochs)
We'll run combinations and pick best by validation accuracy.
"""
best_val = 0.0
best_result = {}
# Pre-create test loader (32x32 transforms)
test_loader = DataLoader(dataset_test, batch_size=256, shuffle=False, num_workers=4, pin_memory=True)

combos = list(product(grid['conv_layers_options'], grid['batch_size_options'],


grid['lr_options'], grid['optimizer_options'], grid['epochs_options']))
print(f"{len(combos)} combinations to try.")

for idx, (conv_cfg, batch_size, lr, opt_name, epochs) in enumerate(combos, 1):


print(f"\n--- Running combo {idx}/{len(combos)} ---")
print("conv_cfg:", conv_cfg, "batch:", batch_size, "lr:", lr, "opt:", opt_name, "epochs:", epochs)

# Dataloaders
train_loader = DataLoader(dataset_train, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=Tr
val_loader = DataLoader(dataset_val, batch_size=batch_size, shuffle=False, num_workers=4, pin_memory=True)

model = SimpleCNN(conv_layers_cfg=conv_cfg, num_classes=num_classes).to(device)


criterion = [Link]()
if opt_name.lower() == 'adam':
optimizer = [Link]([Link](), lr=lr)
else:
optimizer = [Link]([Link](), lr=lr)

best_local_val = 0.0
best_local_wts = [Link](model.state_dict())
epochs_no_improve = 0

history = {'train_acc':[], 'val_acc':[]}

for epoch in range(1, epochs+1):


train_loss, train_acc = train_one_epoch(model, train_loader, criterion, optimizer, device)
val_loss, val_acc, _, _ = evaluate(model, val_loader, criterion, device)

history['train_acc'].append(train_acc)
history['val_acc'].append(val_acc)

print(f"[{idx}] Epoch {epoch}/{epochs} - train_acc {train_acc:.4f}, val_acc {val_acc:.4f}")

# early stopping
if val_acc > best_local_val + 1e-6:
best_local_val = val_acc
best_local_wts = [Link](model.state_dict())
epochs_no_improve = 0
else:
epochs_no_improve += 1

if epochs_no_improve >= early_stop_patience:


print("Early stopping")
break

# Evaluate the best local model on validation and test


model.load_state_dict(best_local_wts)
_, val_acc_final, val_preds, val_labels = evaluate(model, val_loader, criterion, device)
_, test_acc_final, test_preds, test_labels = evaluate(model, test_loader, criterion, device)

print(f"Combo {idx} finished. val_acc={val_acc_final:.4f}, test_acc={test_acc_final:.4f}")

# Save if best
if val_acc_final > best_val:
best_val = val_acc_final
best_result = {
'conv_cfg': conv_cfg,
'batch_size': batch_size,
'lr': lr,
'optimizer': opt_name,
'epochs_ran': epoch,
'val_acc': val_acc_final,
'test_acc': test_acc_final,
'model_state_dict': [Link](model.state_dict()),
'history': history
}
[Link]({
'model_state_dict': best_result['model_state_dict'],
'config': {
'conv_cfg': conv_cfg,
'batch_size': batch_size,
'lr': lr,

[Link] 6/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
'optimizer': opt_name
}
}, BEST_MODEL_PATH)
print("New best saved.")

return best_result

In [10]:
# ----------------------------
# Metrics and final evaluation
# ----------------------------
def compute_metrics(y_true, y_pred):
acc = accuracy_score(y_true, y_pred)
precision_macro = precision_recall_fscore_support(y_true, y_pred, average='macro')[0]
recall_macro = precision_recall_fscore_support(y_true, y_pred, average='macro')[1]
f1_macro = f1_score(y_true, y_pred, average='macro')
precision_weighted = precision_recall_fscore_support(y_true, y_pred, average='weighted')[0]
recall_weighted = precision_recall_fscore_support(y_true, y_pred, average='weighted')[1]
f1_weighted = f1_score(y_true, y_pred, average='weighted')

return {
'accuracy': acc,
'precision_macro': precision_macro,
'recall_macro': recall_macro,
'f1_macro': f1_macro,
'precision_weighted': precision_weighted,
'recall_weighted': recall_weighted,
'f1_weighted': f1_weighted
}

In [ ]:
# ----------------------------
# Putting it all together
# ----------------------------
if __name__ == "__main__":
# 1) Run AlexNet baseline
alex_epochs = 12
alex_batch = 128
alex_lr = 1e-3
alex_optimizer = 'Adam'
print("=== Running AlexNet baseline ===")
alex_model, alex_hist = run_alexnet_experiment(epochs=alex_epochs, batch_size=alex_batch, lr=alex_lr, optimize

# Evaluate AlexNet best weights on test and report


test_loader = DataLoader(dataset_test_alex, batch_size=256, shuffle=False, num_workers=4, pin_memory=True)
criterion = [Link]()
_, _, alex_test_preds, alex_test_labels = evaluate(alex_model, test_loader, criterion, device)
alex_metrics = compute_metrics(alex_test_labels, alex_test_preds)
print("AlexNet test metrics:", alex_metrics)

# 2) Hyperparameter tuning for custom CNN


# Define a small grid (expand as you have compute)
grid = {
'conv_layers_options': [
[(32,3), (64,3), (128,3)], # 3 conv layers
[(32,3), (64,3), (128,3), (128,3)], # 4 conv layers
],
'batch_size_options': [128, 256],
'lr_options': [1e-3, 1e-4],
'optimizer_options': ['Adam', 'RMSprop'],
'epochs_options': [20], # maximum epochs for each combo
}

print("=== Starting hyperparameter tuning ===")


best = tune_and_train(grid, max_epochs=25, early_stop_patience=5)

print("Best config found:", [Link]('conv_cfg'), [Link]('batch_size'), [Link]('lr'), [Link]('optimizer'


print("Best val acc:", [Link]('val_acc'), "test acc:", [Link]('test_acc'))

# Load best model and compute test metrics in detail


if best:
model_best = SimpleCNN(conv_layers_cfg=best['conv_cfg'], num_classes=num_classes).to(device)
model_best.load_state_dict(best['model_state_dict'])
test_loader = DataLoader(dataset_test, batch_size=256, shuffle=False, num_workers=4, pin_memory=True)
_, _, test_preds, test_labels = evaluate(model_best, test_loader, [Link](), device)
final_metrics = compute_metrics(test_labels, test_preds)
print("Final tuned model test metrics:")
for k,v in final_metrics.items():
print(f" {k}: {v:.4f}")

# Plot epoch vs training and validation accuracy for best run (if history available)
hist = [Link]('history')
if hist:
epochs_ran = len(hist['train_acc'])
[Link](figsize=(8,5))
[Link](range(1, epochs_ran+1), hist['train_acc'], label='train_acc')
[Link](range(1, epochs_ran+1), hist['val_acc'], label='val_acc')
[Link]("Epoch")
[Link]("Accuracy")
[Link]("Best Tuned CNN - Accuracy curves")
[Link]()
[Link](True)
[Link]([Link](OUT_DIR, "tunedcnn_accuracy_curves.png"))
[Link]()

print("All done. Artifacts (models, plots) saved in:", OUT_DIR)

[Link] 7/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments

=== Running AlexNet baseline ===


Preparing data loaders for AlexNet...
Epoch 1/12 - train_acc: 0.3076, val_acc: 0.4300, test_acc: 0.4423, time: 113.2s
Epoch 2/12 - train_acc: 0.4692, val_acc: 0.5146, test_acc: 0.5155, time: 112.5s
Epoch 3/12 - train_acc: 0.5249, val_acc: 0.5554, test_acc: 0.5553, time: 121.3s
Epoch 4/12 - train_acc: 0.5596, val_acc: 0.5968, test_acc: 0.6054, time: 116.8s
Epoch 5/12 - train_acc: 0.5838, val_acc: 0.6082, test_acc: 0.6008, time: 114.5s
Epoch 6/12 - train_acc: 0.6052, val_acc: 0.6330, test_acc: 0.6363, time: 111.7s
Epoch 7/12 - train_acc: 0.6220, val_acc: 0.6414, test_acc: 0.6433, time: 117.9s
Epoch 8/12 - train_acc: 0.6372, val_acc: 0.6676, test_acc: 0.6707, time: 111.9s
Epoch 9/12 - train_acc: 0.6506, val_acc: 0.6770, test_acc: 0.6652, time: 111.4s
Epoch 10/12 - train_acc: 0.6603, val_acc: 0.6938, test_acc: 0.6890, time: 118.9s
Epoch 11/12 - train_acc: 0.6678, val_acc: 0.6890, test_acc: 0.6711, time: 111.6s
Epoch 12/12 - train_acc: 0.6738, val_acc: 0.6874, test_acc: 0.6826, time: 112.1s

AlexNet test metrics: {'accuracy': 0.689, 'precision_macro': 0.689803756588451, 'recall_macro': 0.6890000000000001,


'f1_macro': 0.6868098931029312, 'precision_weighted': 0.689803756588451, 'recall_weighted': 0.689, 'f1_weighted':
0.6868098931029312}
=== Starting hyperparameter tuning ===
16 combinations to try.

--- Running combo 1/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 128 lr: 0.001 opt: Adam epochs: 20
/usr/local/lib/python3.11/dist-packages/torch/utils/data/[Link]: UserWarning: This DataLoader will creat
e 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than wha
t this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running s
low or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.
[Link](
[1] Epoch 1/20 - train_acc 0.3021, val_acc 0.3714
[1] Epoch 2/20 - train_acc 0.3758, val_acc 0.5262
[1] Epoch 3/20 - train_acc 0.4109, val_acc 0.5156
[1] Epoch 4/20 - train_acc 0.4296, val_acc 0.5578
[1] Epoch 5/20 - train_acc 0.4461, val_acc 0.5824
[1] Epoch 6/20 - train_acc 0.4608, val_acc 0.6042
[1] Epoch 7/20 - train_acc 0.4733, val_acc 0.6130
[1] Epoch 8/20 - train_acc 0.4792, val_acc 0.6368
[1] Epoch 9/20 - train_acc 0.4813, val_acc 0.6196
[1] Epoch 10/20 - train_acc 0.4923, val_acc 0.5876
[1] Epoch 11/20 - train_acc 0.5002, val_acc 0.6482
[1] Epoch 12/20 - train_acc 0.5078, val_acc 0.6556
[1] Epoch 13/20 - train_acc 0.5106, val_acc 0.6096
[1] Epoch 14/20 - train_acc 0.5185, val_acc 0.6628
[1] Epoch 15/20 - train_acc 0.5257, val_acc 0.6546
[1] Epoch 16/20 - train_acc 0.5305, val_acc 0.6726
[1] Epoch 17/20 - train_acc 0.5381, val_acc 0.6714
[1] Epoch 18/20 - train_acc 0.5395, val_acc 0.6706
[1] Epoch 19/20 - train_acc 0.5484, val_acc 0.7014
[1] Epoch 20/20 - train_acc 0.5553, val_acc 0.6980
Combo 1 finished. val_acc=0.6946, test_acc=0.7162
New best saved.

--- Running combo 2/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 128 lr: 0.001 opt: RMSprop epochs: 20
[2] Epoch 1/20 - train_acc 0.1394, val_acc 0.2266
[2] Epoch 2/20 - train_acc 0.1902, val_acc 0.2214
[2] Epoch 3/20 - train_acc 0.2162, val_acc 0.2882
[2] Epoch 4/20 - train_acc 0.2377, val_acc 0.3516
[2] Epoch 5/20 - train_acc 0.2594, val_acc 0.4036
[2] Epoch 6/20 - train_acc 0.2716, val_acc 0.4236
[2] Epoch 7/20 - train_acc 0.2801, val_acc 0.4254
[2] Epoch 8/20 - train_acc 0.2839, val_acc 0.4656
[2] Epoch 9/20 - train_acc 0.2905, val_acc 0.4436
[2] Epoch 10/20 - train_acc 0.3006, val_acc 0.4718
[2] Epoch 11/20 - train_acc 0.3024, val_acc 0.4258
[2] Epoch 12/20 - train_acc 0.3087, val_acc 0.4360
[2] Epoch 13/20 - train_acc 0.3113, val_acc 0.5150
[2] Epoch 14/20 - train_acc 0.3102, val_acc 0.4016
[2] Epoch 15/20 train acc 0 3159 val acc 0 4832
[Link] 8/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
[2] Epoch 15/20 - train_acc 0.3159, val_acc 0.4832
[2] Epoch 16/20 - train_acc 0.3200, val_acc 0.4860
[2] Epoch 17/20 - train_acc 0.3184, val_acc 0.5074
[2] Epoch 18/20 - train_acc 0.3209, val_acc 0.4654
Early stopping
Combo 2 finished. val_acc=0.5082, test_acc=0.5258

--- Running combo 3/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 128 lr: 0.0001 opt: Adam epochs: 20
[3] Epoch 1/20 - train_acc 0.3882, val_acc 0.5150
[3] Epoch 2/20 - train_acc 0.5005, val_acc 0.5620
[3] Epoch 3/20 - train_acc 0.5523, val_acc 0.5852
[3] Epoch 4/20 - train_acc 0.5808, val_acc 0.6188
[3] Epoch 5/20 - train_acc 0.6016, val_acc 0.6248
[3] Epoch 6/20 - train_acc 0.6134, val_acc 0.6572
[3] Epoch 7/20 - train_acc 0.6281, val_acc 0.6580
[3] Epoch 8/20 - train_acc 0.6374, val_acc 0.6646
[3] Epoch 9/20 - train_acc 0.6452, val_acc 0.6788
[3] Epoch 10/20 - train_acc 0.6498, val_acc 0.6764
[3] Epoch 11/20 - train_acc 0.6572, val_acc 0.6834
[3] Epoch 12/20 - train_acc 0.6644, val_acc 0.6812
[3] Epoch 13/20 - train_acc 0.6694, val_acc 0.6910
[3] Epoch 14/20 - train_acc 0.6763, val_acc 0.7126
[3] Epoch 15/20 - train_acc 0.6762, val_acc 0.7028
[3] Epoch 16/20 - train_acc 0.6819, val_acc 0.7046
[3] Epoch 17/20 - train_acc 0.6861, val_acc 0.7064
[3] Epoch 18/20 - train_acc 0.6880, val_acc 0.7132
[3] Epoch 19/20 - train_acc 0.6950, val_acc 0.7096
[3] Epoch 20/20 - train_acc 0.6954, val_acc 0.7246
Combo 3 finished. val_acc=0.7262, test_acc=0.7575
New best saved.

--- Running combo 4/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 128 lr: 0.0001 opt: RMSprop epochs: 20
[4] Epoch 1/20 - train_acc 0.3580, val_acc 0.4834
[4] Epoch 2/20 - train_acc 0.4551, val_acc 0.5150
[4] Epoch 3/20 - train_acc 0.4989, val_acc 0.5194
[4] Epoch 4/20 - train_acc 0.5335, val_acc 0.5954
[4] Epoch 5/20 - train_acc 0.5534, val_acc 0.5992
[4] Epoch 6/20 - train_acc 0.5709, val_acc 0.5904
[4] Epoch 7/20 - train_acc 0.5782, val_acc 0.6046
[4] Epoch 8/20 - train_acc 0.5911, val_acc 0.6180
[4] Epoch 9/20 - train_acc 0.6010, val_acc 0.6538
[4] Epoch 10/20 - train_acc 0.6019, val_acc 0.6512
[4] Epoch 11/20 - train_acc 0.6091, val_acc 0.6606
[4] Epoch 12/20 - train_acc 0.6174, val_acc 0.6720
[4] Epoch 13/20 - train_acc 0.6247, val_acc 0.6350
[4] Epoch 14/20 - train_acc 0.6255, val_acc 0.6530
[4] Epoch 15/20 - train_acc 0.6333, val_acc 0.6792
[4] Epoch 16/20 - train_acc 0.6356, val_acc 0.6596
[4] Epoch 17/20 - train_acc 0.6383, val_acc 0.6692
[4] Epoch 18/20 - train_acc 0.6395, val_acc 0.6912
[4] Epoch 19/20 - train_acc 0.6443, val_acc 0.6762
[4] Epoch 20/20 - train_acc 0.6489, val_acc 0.6824
Combo 4 finished. val_acc=0.6936, test_acc=0.7166

--- Running combo 5/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 256 lr: 0.001 opt: Adam epochs: 20
[5] Epoch 1/20 - train_acc 0.2928, val_acc 0.4260
[5] Epoch 2/20 - train_acc 0.3698, val_acc 0.4934
[5] Epoch 3/20 - train_acc 0.4128, val_acc 0.5410
[5] Epoch 4/20 - train_acc 0.4320, val_acc 0.5578
[5] Epoch 5/20 - train_acc 0.4519, val_acc 0.5074
[5] Epoch 6/20 - train_acc 0.4662, val_acc 0.6070
[5] Epoch 7/20 - train_acc 0.4777, val_acc 0.6042
[5] Epoch 8/20 - train_acc 0.4849, val_acc 0.6032
[5] Epoch 9/20 - train_acc 0.4973, val_acc 0.6294
[5] Epoch 10/20 - train_acc 0.4999, val_acc 0.5952
[5] Epoch 11/20 - train_acc 0.5075, val_acc 0.6332
[5] Epoch 12/20 - train_acc 0.5131, val_acc 0.6372
[5] Epoch 13/20 - train_acc 0.5220, val_acc 0.6360
[5] Epoch 14/20 - train_acc 0.5235, val_acc 0.6324
[5] Epoch 15/20 - train_acc 0.5292, val_acc 0.6506
[5] Epoch 16/20 - train_acc 0.5341, val_acc 0.6332
[5] Epoch 17/20 - train_acc 0.5411, val_acc 0.6554
[5] Epoch 18/20 - train_acc 0.5416, val_acc 0.6630
[5] Epoch 19/20 - train_acc 0.5427, val_acc 0.6524
[5] Epoch 20/20 - train_acc 0.5485, val_acc 0.6386
Combo 5 finished. val_acc=0.6640, test_acc=0.6893

--- Running combo 6/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 256 lr: 0.001 opt: RMSprop epochs: 20
[6] Epoch 1/20 - train_acc 0.1342, val_acc 0.1992
[6] Epoch 2/20 - train_acc 0.2070, val_acc 0.2586
[6] Epoch 3/20 - train_acc 0.2418, val_acc 0.3324
[6] Epoch 4/20 - train_acc 0.2862, val_acc 0.3698
[6] Epoch 5/20 - train_acc 0.3031, val_acc 0.4108
[6] Epoch 6/20 - train_acc 0.3182, val_acc 0.4090
[6] Epoch 7/20 - train_acc 0.3246, val_acc 0.4196
[6] Epoch 8/20 - train_acc 0.3406, val_acc 0.4472
[6] Epoch 9/20 - train_acc 0.3450, val_acc 0.4428
[6] Epoch 10/20 - train_acc 0.3574, val_acc 0.4970
[6] Epoch 11/20 - train_acc 0.3708, val_acc 0.4782
[6] Epoch 12/20 - train_acc 0.3798, val_acc 0.4800
[6] Epoch 13/20 - train_acc 0.3858, val_acc 0.4770
[6] Epoch 14/20 - train_acc 0.3888, val_acc 0.5164
[6] Epoch 15/20 - train_acc 0.3924, val_acc 0.4670

[Link] 9/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
[6] Epoch 16/20 - train_acc 0.3992, val_acc 0.5126
[6] Epoch 17/20 - train_acc 0.4017, val_acc 0.5420
[6] Epoch 18/20 - train_acc 0.4058, val_acc 0.4582
[6] Epoch 19/20 - train_acc 0.4103, val_acc 0.5548
[6] Epoch 20/20 - train_acc 0.4162, val_acc 0.5468
Combo 6 finished. val_acc=0.5472, test_acc=0.5717

--- Running combo 7/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 256 lr: 0.0001 opt: Adam epochs: 20
[7] Epoch 1/20 - train_acc 0.3718, val_acc 0.4720
[7] Epoch 2/20 - train_acc 0.4708, val_acc 0.5296
[7] Epoch 3/20 - train_acc 0.5160, val_acc 0.5568
[7] Epoch 4/20 - train_acc 0.5520, val_acc 0.5952
[7] Epoch 5/20 - train_acc 0.5774, val_acc 0.6062
[7] Epoch 6/20 - train_acc 0.5921, val_acc 0.6250
[7] Epoch 7/20 - train_acc 0.6108, val_acc 0.6404
[7] Epoch 8/20 - train_acc 0.6222, val_acc 0.6576
[7] Epoch 9/20 - train_acc 0.6312, val_acc 0.6576
[7] Epoch 10/20 - train_acc 0.6394, val_acc 0.6560
[7] Epoch 11/20 - train_acc 0.6440, val_acc 0.6704
[7] Epoch 12/20 - train_acc 0.6492, val_acc 0.6716
[7] Epoch 13/20 - train_acc 0.6584, val_acc 0.6850
[7] Epoch 14/20 - train_acc 0.6644, val_acc 0.6876
[7] Epoch 15/20 - train_acc 0.6630, val_acc 0.6978
[7] Epoch 16/20 - train_acc 0.6686, val_acc 0.6940
[7] Epoch 17/20 - train_acc 0.6752, val_acc 0.7060
[7] Epoch 18/20 - train_acc 0.6768, val_acc 0.7136
[7] Epoch 19/20 - train_acc 0.6845, val_acc 0.6980
[7] Epoch 20/20 - train_acc 0.6835, val_acc 0.7128
Combo 7 finished. val_acc=0.7112, test_acc=0.7421

--- Running combo 8/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3)] batch: 256 lr: 0.0001 opt: RMSprop epochs: 20
[8] Epoch 1/20 - train_acc 0.3318, val_acc 0.4660
[8] Epoch 2/20 - train_acc 0.4314, val_acc 0.4718
[8] Epoch 3/20 - train_acc 0.4705, val_acc 0.5352
[8] Epoch 4/20 - train_acc 0.5005, val_acc 0.5528
[8] Epoch 5/20 - train_acc 0.5237, val_acc 0.5736
[8] Epoch 6/20 - train_acc 0.5420, val_acc 0.5918
[8] Epoch 7/20 - train_acc 0.5600, val_acc 0.5960
[8] Epoch 8/20 - train_acc 0.5744, val_acc 0.6122
[8] Epoch 9/20 - train_acc 0.5789, val_acc 0.6296
[8] Epoch 10/20 - train_acc 0.5912, val_acc 0.6282
[8] Epoch 11/20 - train_acc 0.5986, val_acc 0.6274
[8] Epoch 12/20 - train_acc 0.6049, val_acc 0.6496
[8] Epoch 13/20 - train_acc 0.6132, val_acc 0.6404
[8] Epoch 14/20 - train_acc 0.6148, val_acc 0.6362
[8] Epoch 15/20 - train_acc 0.6203, val_acc 0.6532
[8] Epoch 16/20 - train_acc 0.6252, val_acc 0.6646
[8] Epoch 17/20 - train_acc 0.6311, val_acc 0.6560
[8] Epoch 18/20 - train_acc 0.6343, val_acc 0.6686
[8] Epoch 19/20 - train_acc 0.6374, val_acc 0.6934
[8] Epoch 20/20 - train_acc 0.6383, val_acc 0.6740
Combo 8 finished. val_acc=0.6844, test_acc=0.7159

--- Running combo 9/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 128 lr: 0.001 opt: Adam epochs: 20
[9] Epoch 1/20 - train_acc 0.3046, val_acc 0.4304
[9] Epoch 2/20 - train_acc 0.4028, val_acc 0.5222
[9] Epoch 3/20 - train_acc 0.4515, val_acc 0.5322
[9] Epoch 4/20 - train_acc 0.4849, val_acc 0.5754
[9] Epoch 5/20 - train_acc 0.5101, val_acc 0.5308
[9] Epoch 6/20 - train_acc 0.5270, val_acc 0.6192
[9] Epoch 7/20 - train_acc 0.5441, val_acc 0.6402
[9] Epoch 8/20 - train_acc 0.5586, val_acc 0.6824
[9] Epoch 9/20 - train_acc 0.5657, val_acc 0.6924
[9] Epoch 10/20 - train_acc 0.5754, val_acc 0.6794
[9] Epoch 11/20 - train_acc 0.5837, val_acc 0.6880
[9] Epoch 12/20 - train_acc 0.5939, val_acc 0.6980
[9] Epoch 13/20 - train_acc 0.6051, val_acc 0.6904
[9] Epoch 14/20 - train_acc 0.6080, val_acc 0.7334
[9] Epoch 15/20 - train_acc 0.6185, val_acc 0.6852
[9] Epoch 16/20 - train_acc 0.6278, val_acc 0.7372
[9] Epoch 17/20 - train_acc 0.6338, val_acc 0.7286
[9] Epoch 18/20 - train_acc 0.6369, val_acc 0.7254
[9] Epoch 19/20 - train_acc 0.6414, val_acc 0.7236
[9] Epoch 20/20 - train_acc 0.6512, val_acc 0.7436
Combo 9 finished. val_acc=0.7340, test_acc=0.7500
New best saved.

--- Running combo 10/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 128 lr: 0.001 opt: RMSprop epochs: 20
[10] Epoch 1/20 - train_acc 0.2116, val_acc 0.3522
[10] Epoch 2/20 - train_acc 0.3219, val_acc 0.4188
[10] Epoch 3/20 - train_acc 0.3804, val_acc 0.4646
[10] Epoch 4/20 - train_acc 0.4130, val_acc 0.5194
[10] Epoch 5/20 - train_acc 0.4354, val_acc 0.4748
[10] Epoch 6/20 - train_acc 0.4586, val_acc 0.5770
[10] Epoch 7/20 - train_acc 0.4736, val_acc 0.4512
[10] Epoch 8/20 - train_acc 0.4866, val_acc 0.5626
[10] Epoch 9/20 - train_acc 0.4994, val_acc 0.5900
[10] Epoch 10/20 - train_acc 0.5052, val_acc 0.6308
[10] Epoch 11/20 - train_acc 0.5174, val_acc 0.5286
[10] Epoch 12/20 - train_acc 0.5252, val_acc 0.5142
[10] Epoch 13/20 - train_acc 0.5315, val_acc 0.5998
[10] Epoch 14/20 - train_acc 0.5434, val_acc 0.6368
[10] Epoch 15/20 - train acc 0.5536, val acc 0.6294
[Link] 10/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
[ ] p / _ , _
[10] Epoch 16/20 - train_acc 0.5763, val_acc 0.6394
[10] Epoch 17/20 - train_acc 0.5936, val_acc 0.6568
[10] Epoch 18/20 - train_acc 0.6012, val_acc 0.7006
[10] Epoch 19/20 - train_acc 0.6246, val_acc 0.6746
[10] Epoch 20/20 - train_acc 0.6452, val_acc 0.6542
Combo 10 finished. val_acc=0.6958, test_acc=0.7174

--- Running combo 11/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 128 lr: 0.0001 opt: Adam epochs: 20
[11] Epoch 1/20 - train_acc 0.3604, val_acc 0.4868
[11] Epoch 2/20 - train_acc 0.4846, val_acc 0.5442
[11] Epoch 3/20 - train_acc 0.5391, val_acc 0.5984
[11] Epoch 4/20 - train_acc 0.5759, val_acc 0.6148
[11] Epoch 5/20 - train_acc 0.6061, val_acc 0.6520
[11] Epoch 6/20 - train_acc 0.6291, val_acc 0.6550
[11] Epoch 7/20 - train_acc 0.6442, val_acc 0.6726
[11] Epoch 8/20 - train_acc 0.6597, val_acc 0.6828
[11] Epoch 9/20 - train_acc 0.6710, val_acc 0.6952
[11] Epoch 10/20 - train_acc 0.6785, val_acc 0.7034
[11] Epoch 11/20 - train_acc 0.6870, val_acc 0.7042
[11] Epoch 12/20 - train_acc 0.6932, val_acc 0.7218
[11] Epoch 13/20 - train_acc 0.7014, val_acc 0.7148
[11] Epoch 14/20 - train_acc 0.7079, val_acc 0.7156
[11] Epoch 15/20 - train_acc 0.7144, val_acc 0.7446
[11] Epoch 16/20 - train_acc 0.7181, val_acc 0.7210
[11] Epoch 17/20 - train_acc 0.7231, val_acc 0.7528
[11] Epoch 18/20 - train_acc 0.7256, val_acc 0.7272
[11] Epoch 19/20 - train_acc 0.7327, val_acc 0.7400
[11] Epoch 20/20 - train_acc 0.7369, val_acc 0.7462
Combo 11 finished. val_acc=0.7448, test_acc=0.7694
New best saved.

--- Running combo 12/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 128 lr: 0.0001 opt: RMSprop epochs: 20
[12] Epoch 1/20 - train_acc 0.3594, val_acc 0.4688
[12] Epoch 2/20 - train_acc 0.4724, val_acc 0.5230
[12] Epoch 3/20 - train_acc 0.5239, val_acc 0.5746
[12] Epoch 4/20 - train_acc 0.5645, val_acc 0.5998
[12] Epoch 5/20 - train_acc 0.5869, val_acc 0.6208
[12] Epoch 6/20 - train_acc 0.6052, val_acc 0.6220
[12] Epoch 7/20 - train_acc 0.6210, val_acc 0.6568
[12] Epoch 8/20 - train_acc 0.6305, val_acc 0.6460
[12] Epoch 9/20 - train_acc 0.6465, val_acc 0.6668
[12] Epoch 10/20 - train_acc 0.6565, val_acc 0.6660
[12] Epoch 11/20 - train_acc 0.6647, val_acc 0.6638
[12] Epoch 12/20 - train_acc 0.6730, val_acc 0.7050
[12] Epoch 13/20 - train_acc 0.6742, val_acc 0.6168
[12] Epoch 14/20 - train_acc 0.6845, val_acc 0.7094
[12] Epoch 15/20 - train_acc 0.6868, val_acc 0.6958
[12] Epoch 16/20 - train_acc 0.6951, val_acc 0.6738
[12] Epoch 17/20 - train_acc 0.6973, val_acc 0.6658
[12] Epoch 18/20 - train_acc 0.7052, val_acc 0.7296
[12] Epoch 19/20 - train_acc 0.7082, val_acc 0.6678
[12] Epoch 20/20 - train_acc 0.7137, val_acc 0.6670
Combo 12 finished. val_acc=0.7206, test_acc=0.7483

--- Running combo 13/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 256 lr: 0.001 opt: Adam epochs: 20
[13] Epoch 1/20 - train_acc 0.3350, val_acc 0.4314
[13] Epoch 2/20 - train_acc 0.4571, val_acc 0.5274
[13] Epoch 3/20 - train_acc 0.5287, val_acc 0.6090
[13] Epoch 4/20 - train_acc 0.5731, val_acc 0.6208
[13] Epoch 5/20 - train_acc 0.6037, val_acc 0.6552
[13] Epoch 6/20 - train_acc 0.6214, val_acc 0.6574
[13] Epoch 7/20 - train_acc 0.6457, val_acc 0.5964
[13] Epoch 8/20 - train_acc 0.6559, val_acc 0.6502
[13] Epoch 9/20 - train_acc 0.6676, val_acc 0.6786
[13] Epoch 10/20 - train_acc 0.6782, val_acc 0.6640
[13] Epoch 11/20 - train_acc 0.6839, val_acc 0.7196
[13] Epoch 12/20 - train_acc 0.6957, val_acc 0.7284
[13] Epoch 13/20 - train_acc 0.7006, val_acc 0.7180
[13] Epoch 14/20 - train_acc 0.7097, val_acc 0.7278
[13] Epoch 15/20 - train_acc 0.7159, val_acc 0.6998
[13] Epoch 16/20 - train_acc 0.7206, val_acc 0.7146
[13] Epoch 17/20 - train_acc 0.7270, val_acc 0.6978
Early stopping
Combo 13 finished. val_acc=0.7346, test_acc=0.7521

--- Running combo 14/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 256 lr: 0.001 opt: RMSprop epochs: 20
[14] Epoch 1/20 - train_acc 0.2289, val_acc 0.3336
[14] Epoch 2/20 - train_acc 0.3374, val_acc 0.4262
[14] Epoch 3/20 - train_acc 0.4023, val_acc 0.4700
[14] Epoch 4/20 - train_acc 0.4531, val_acc 0.5002
[14] Epoch 5/20 - train_acc 0.4914, val_acc 0.5136
[14] Epoch 6/20 - train_acc 0.5202, val_acc 0.5828
[14] Epoch 7/20 - train_acc 0.5485, val_acc 0.6226
[14] Epoch 8/20 - train_acc 0.5659, val_acc 0.6194
[14] Epoch 9/20 - train_acc 0.5837, val_acc 0.6570
[14] Epoch 10/20 - train_acc 0.5954, val_acc 0.6042
[14] Epoch 11/20 - train_acc 0.6084, val_acc 0.6166
[14] Epoch 12/20 - train_acc 0.6215, val_acc 0.5898
[14] Epoch 13/20 - train_acc 0.6259, val_acc 0.6386
[14] Epoch 14/20 - train_acc 0.6337, val_acc 0.5662
Early stopping
Combo 14 finished. val_acc=0.6502, test_acc=0.6805

[Link] 11/12
14/08/2025, 00:17 Deep_Learning_Assignments/Deep_Learning_Assignment_1.ipynb at main · BhawnaMehbubani/Deep_Learning_Assignments
--- Running combo 15/16 ---
conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 256 lr: 0.0001 opt: Adam epochs: 20
[15] Epoch 1/20 - train_acc 0.3409, val_acc 0.4732
[15] Epoch 2/20 - train_acc 0.4558, val_acc 0.5250
[15] Epoch 3/20 - train_acc 0.5071, val_acc 0.5722
[15] Epoch 4/20 - train_acc 0.5502, val_acc 0.6000
[15] Epoch 5/20 - train_acc 0.5819, val_acc 0.6122
[15] Epoch 6/20 - train_acc 0.6071, val_acc 0.6348
[15] Epoch 7/20 - train_acc 0.6248, val_acc 0.6338
[15] Epoch 8/20 - train_acc 0.6378, val_acc 0.6596
[15] Epoch 9/20 - train_acc 0.6525, val_acc 0.6654
[15] Epoch 10/20 - train_acc 0.6585, val_acc 0.6906
[15] Epoch 11/20 - train_acc 0.6695, val_acc 0.6906
[15] Epoch 12/20 - train_acc 0.6801, val_acc 0.6930
[15] Epoch 13/20 - train_acc 0.6846, val_acc 0.6918
[15] Epoch 14/20 - train_acc 0.6938, val_acc 0.6964
[15] Epoch 15/20 - train_acc 0.6937, val_acc 0.7138
[15] Epoch 16/20 - train_acc 0.7026, val_acc 0.7280
[15] Epoch 17/20 - train_acc 0.7061, val_acc 0.7220
[15] Epoch 18/20 - train_acc 0.7095, val_acc 0.7386
[15] Epoch 19/20 - train_acc 0.7167, val_acc 0.7306
[15] Epoch 20/20 - train_acc 0.7208, val_acc 0.7266
Combo 15 finished. val_acc=0.7274, test_acc=0.7520

--- Running combo 16/16 ---


conv_cfg: [(32, 3), (64, 3), (128, 3), (128, 3)] batch: 256 lr: 0.0001 opt: RMSprop epochs: 20
[16] Epoch 1/20 - train_acc 0.3501, val_acc 0.4446
[16] Epoch 2/20 - train_acc 0.4602, val_acc 0.5194
[16] Epoch 3/20 - train_acc 0.5134, val_acc 0.5316
[16] Epoch 4/20 - train_acc 0.5501, val_acc 0.6018
[16] Epoch 5/20 - train_acc 0.5707, val_acc 0.6008
[16] Epoch 6/20 - train_acc 0.5883, val_acc 0.6312
[16] Epoch 7/20 - train_acc 0.6079, val_acc 0.6274
[16] Epoch 8/20 - train_acc 0.6204, val_acc 0.6336
[16] Epoch 9/20 - train_acc 0.6344, val_acc 0.6268
[16] Epoch 10/20 - train_acc 0.6430, val_acc 0.6724
[16] Epoch 11/20 - train_acc 0.6511, val_acc 0.6480
[16] Epoch 12/20 - train_acc 0.6629, val_acc 0.6436
[16] Epoch 13/20 - train_acc 0.6685, val_acc 0.6776
[16] Epoch 14/20 - train_acc 0.6742, val_acc 0.7022
[16] Epoch 15/20 - train_acc 0.6805, val_acc 0.6948
[16] Epoch 16/20 - train_acc 0.6879, val_acc 0.7040
[16] Epoch 17/20 - train_acc 0.6919, val_acc 0.7186
[16] Epoch 18/20 - train_acc 0.6986, val_acc 0.6980
[16] Epoch 19/20 - train_acc 0.7008, val_acc 0.6978
[16] Epoch 20/20 - train_acc 0.7037, val_acc 0.7144
Combo 16 finished. val_acc=0.7190, test_acc=0.7484
Best config found: [(32, 3), (64, 3), (128, 3), (128, 3)] 128 0.0001 Adam
Best val acc: 0.7448 test acc: 0.7694
Final tuned model test metrics:
accuracy: 0.7694
precision_macro: 0.7735
recall_macro: 0.7694
f1_macro: 0.7683
precision_weighted: 0.7735
recall_weighted: 0.7694
f1_weighted: 0.7683

All done. Artifacts (models, plots) saved in: cifar_experiments

[Link] 12/12

You might also like