Views
No views yet
| Architecture | GoogLeNet (Inception v1) |
| Dataset | ImageNet100 (130,000 images, 100 classes) |
| Training time | ~45 hours across multiple sessions |
| Hardware | Kaggle T4 x2 (free tier) + Google Colab |
| Framework | PyTorch |
| Parameters | ~6.8M trainable |
1optimizer = Adam(lr=0.001, weight_decay=1e-4)
2scheduler = CosineAnnealingLR(T_max=100, eta_min=1e-6)
3criterion = CrossEntropyLoss(label_smoothing=0.1)
4batch_size = 64
5epochs = 100
6aux_weight = 0.3 # auxiliary classifier loss weight1# Train
2transforms.RandomResizedCrop(224)
3transforms.RandomHorizontalFlip()
4transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2)
5transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
6
7# Val
8transforms.Resize(256)
9transforms.CenterCrop(224)
10transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])train.X1 to train.X4) with ~25 unique classes per folder — not samples of shared classes.ConcatDataset on 4 ImageFolder objects gives each shard independent 0-24 indices, making label 0 mean four different things. Val accuracy stays pinned at ~1% (exact random chance for 100 classes) regardless of training time or LR.1global_classes = sorted(set(cls for ds in train_datasets for cls in ds.classes))
2global_class_to_idx = {cls: i for i, cls in enumerate(global_classes)}
3
4def remap_dataset(ds, mapping):
5 old_idx_to_class = {v: k for k, v in ds.class_to_idx.items()}
6 remap = {old_idx: mapping[cls] for old_idx, cls in old_idx_to_class.items()}
7 ds.samples = [(path, remap[label]) for path, label in ds.samples]
8 ds.targets = [remap[label] for label in ds.targets]
9 ds.class_to_idx = mapping
10 ds.classes = global_classes
11
12for ds in train_datasets:
13 remap_dataset(ds, global_class_to_idx)
14remap_dataset(val_dataset, global_class_to_idx)1import torch
2from model import Inception # your model definition file
3
4device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
5
6model = Inception(num_classes=100)
7ckpt = torch.load('best_model.pth', map_location=device)
8model.load_state_dict(ckpt['model_state_dict'])
9model.eval()
10model.to(device)
11
12# inference
13with torch.no_grad():
14 outputs, _, _ = model(images) # returns (main, aux1, aux2) — aux are None at eval
15 preds = outputs.argmax(dim=1)| Metric | Value |
|---|---|
| Best Val Accuracy | 92.3% |
| Dataset | ImageNet100 |
| Training images | 130,000 |
| Val images | 5,000 |