{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":3649,"databundleVersionId":46718,"sourceType":"competition"}],"dockerImageVersionId":31154,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\n\n# List all main folders in input\nprint(\"Main folders in /kaggle/input/:\", os.listdir('/kaggle/input/'))\n\n# List all files in CIFAR-10 folder (change folder name as per your input folder)\ncifar_dir = '/kaggle/input/cifar-10'\nprint(\"Files in CIFAR-10 folder:\", os.listdir(cifar_dir))\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:04:43.364578Z","iopub.execute_input":"2025-10-08T14:04:43.36527Z","iopub.status.idle":"2025-10-08T14:04:43.37068Z","shell.execute_reply.started":"2025-10-08T14:04:43.365216Z","shell.execute_reply":"2025-10-08T14:04:43.370065Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\n\n# Extract train images\nos.system(\"mkdir -p /kaggle/working/train\")\nos.system(\"7z x /kaggle/input/cifar-10/train.7z -o/kaggle/working/train -y\")\n\n# Extract test images\nos.system(\"mkdir -p /kaggle/working/test\")\nos.system(\"7z x /kaggle/input/cifar-10/test.7z -o/kaggle/working/test -y\")\n\n# Quick check: List kuch files\nprint(\"Sample train images:\", os.listdir('/kaggle/working/train')[:5])\nprint(\"Sample test images:\", os.listdir('/kaggle/working/test')[:5])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:04:47.728961Z","iopub.execute_input":"2025-10-08T14:04:47.729213Z","iopub.status.idle":"2025-10-08T14:04:57.27026Z","shell.execute_reply.started":"2025-10-08T14:04:47.729193Z","shell.execute_reply":"2025-10-08T14:04:57.269411Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nprint(os.listdir('/kaggle/input'))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:05:03.122059Z","iopub.execute_input":"2025-10-08T14:05:03.122622Z","iopub.status.idle":"2025-10-08T14:05:03.126876Z","shell.execute_reply.started":"2025-10-08T14:05:03.122596Z","shell.execute_reply":"2025-10-08T14:05:03.126082Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install py7zr\nimport py7zr\nimport os\n\n# Extract train images\nwith py7zr.SevenZipFile('/kaggle/input/cifar-10/train.7z', mode='r') as z:\n    z.extractall(path='/kaggle/working/train')\n\n# Extract test images\nwith py7zr.SevenZipFile('/kaggle/input/cifar-10/test.7z', mode='r') as z:\n    z.extractall(path='/kaggle/working/test')\n\nprint('Sample train:', os.listdir('/kaggle/working/train')[:5])\nprint('Sample test:', os.listdir('/kaggle/working/test')[:5])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:05:06.10573Z","iopub.execute_input":"2025-10-08T14:05:06.105983Z","iopub.status.idle":"2025-10-08T14:07:31.123514Z","shell.execute_reply.started":"2025-10-08T14:05:06.105963Z","shell.execute_reply":"2025-10-08T14:07:31.122788Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport pandas as pd\n\n# Folders for train/test images (nested folder)\ntrain_img_dir = '/kaggle/working/train/train'\ntest_img_dir = '/kaggle/working/test/test'\n\n# Check kuch images\nprint(\"Sample images in TRAIN folder:\", os.listdir(train_img_dir)[:5])\nprint(\"Sample images in TEST folder:\", os.listdir(test_img_dir)[:5])\n\n# Labels CSV load karo\nlabels_path = '/kaggle/input/cifar-10/trainLabels.csv'\nlabels_df = pd.read_csv(labels_path)\nprint(labels_df.head())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:08:14.647493Z","iopub.execute_input":"2025-10-08T14:08:14.648294Z","iopub.status.idle":"2025-10-08T14:08:15.096014Z","shell.execute_reply.started":"2025-10-08T14:08:14.64827Z","shell.execute_reply":"2025-10-08T14:08:15.095292Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"Total TRAIN images:\", len(os.listdir(train_img_dir)))\nprint(\"Total TEST images:\", len(os.listdir(test_img_dir)))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:08:18.799509Z","iopub.execute_input":"2025-10-08T14:08:18.799777Z","iopub.status.idle":"2025-10-08T14:08:18.960417Z","shell.execute_reply.started":"2025-10-08T14:08:18.799757Z","shell.execute_reply":"2025-10-08T14:08:18.959755Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image\nimport matplotlib.pyplot as plt\n\nimg = Image.open(os.path.join(train_img_dir, os.listdir(train_img_dir)[0]))\nplt.imshow(img)\nplt.axis('off')\nplt.title('Sample Train Image')\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:08:22.064559Z","iopub.execute_input":"2025-10-08T14:08:22.064986Z","iopub.status.idle":"2025-10-08T14:08:22.29043Z","shell.execute_reply.started":"2025-10-08T14:08:22.064955Z","shell.execute_reply":"2025-10-08T14:08:22.28971Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Label encode\nlabel_names = sorted(labels_df['label'].unique())\nlabel_to_idx = {name: i for i, name in enumerate(label_names)}\nidx_to_label = {i: name for name, i in label_to_idx.items()}\n\n# Numeric labels for each image file\ntrain_img_files = sorted(os.listdir(train_img_dir))\ntrain_labels = [\n    label_to_idx[labels_df.set_index('id').loc[img.replace('.png','')]['label']]\n    for img in train_img_files\n]\n\nprint(\"Sample train labels (first 10):\", train_labels[:10])\nprint(\"Total label count:\", len(train_labels))\nprint(\"Label mapping:\", label_to_idx)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:08:27.010917Z","iopub.execute_input":"2025-10-08T14:08:27.011379Z","iopub.status.idle":"2025-10-08T14:08:27.106117Z","shell.execute_reply.started":"2025-10-08T14:08:27.011357Z","shell.execute_reply":"2025-10-08T14:08:27.105146Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 1. Prepare DataFrame for string-based lookup\nlabels_df['id'] = labels_df['id'].astype(str)\nlabels_df = labels_df.set_index('id')\n\n# 2. Prepare label mapping\nlabel_names = sorted(labels_df['label'].unique())\nlabel_to_idx = {name: i for i, name in enumerate(label_names)}\n\n# 3. Prepare list of all train files (sorted for consistent order)\ntrain_img_files = sorted(os.listdir(train_img_dir))\n\n# 4. Map each image filename to its label index\ntrain_labels = [\n    label_to_idx[labels_df.loc[img.replace('.png','')]['label']]\n    for img in train_img_files\n]\n\n# 5. Print quick checks\nprint(\"Sample train labels (first 10):\", train_labels[:10])\nprint(\"Total label count:\", len(train_labels))\nprint(\"Label mapping:\", label_to_idx)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:08:31.128317Z","iopub.execute_input":"2025-10-08T14:08:31.128831Z","iopub.status.idle":"2025-10-08T14:08:32.157892Z","shell.execute_reply.started":"2025-10-08T14:08:31.128808Z","shell.execute_reply":"2025-10-08T14:08:32.157256Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torchvision\nfrom torch.utils.data import Dataset, DataLoader\nfrom torchvision import transforms\n\n# Albumentations install (if needed)\n!pip install -q albumentations\n\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\n# Sample transform (assignment requirement ke hisaab se: Cutout, RandomCrop, etc.)\ntrain_transform = A.Compose([\n    A.RandomCrop(32, 32, p=1.0),\n    A.HorizontalFlip(p=0.5),\n    A.Cutout(num_holes=2, max_h_size=8, max_w_size=8, fill_value=0, p=0.7),\n    A.Normalize((0.5,), (0.5,)),\n    ToTensorV2()\n])\n\ntest_transform = A.Compose([\n    A.Normalize((0.5,), (0.5,)),\n    ToTensorV2()\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:16.178846Z","iopub.execute_input":"2025-10-08T14:09:16.179582Z","iopub.status.idle":"2025-10-08T14:09:19.469281Z","shell.execute_reply.started":"2025-10-08T14:09:16.179558Z","shell.execute_reply":"2025-10-08T14:09:19.468287Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torchvision\nfrom torchvision import transforms\n\ntrain_transform = transforms.Compose([\n    transforms.RandomCrop(32, padding=4),\n    transforms.RandomHorizontalFlip(),\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,)),\n    transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0)  # Cutout-style\n])\n\ntest_transform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:23.471954Z","iopub.execute_input":"2025-10-08T14:09:23.472771Z","iopub.status.idle":"2025-10-08T14:09:23.477731Z","shell.execute_reply.started":"2025-10-08T14:09:23.472745Z","shell.execute_reply":"2025-10-08T14:09:23.4771Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nfrom torch.utils.data import Dataset, DataLoader\nfrom PIL import Image\nimport os\n\nclass CIFAR10Dataset(Dataset):\n    def __init__(self, img_dir, img_files, labels=None, transform=None):\n        self.img_dir = img_dir\n        self.img_files = img_files\n        self.labels = labels\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.img_files)\n\n    def __getitem__(self, idx):\n        img_name = self.img_files[idx]\n        img_path = os.path.join(self.img_dir, img_name)\n        image = Image.open(img_path)\n        if self.transform:\n            image = self.transform(image)\n        if self.labels is not None:\n            label = self.labels[idx]\n            return image, label\n        else:\n            return image\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:28.607534Z","iopub.execute_input":"2025-10-08T14:09:28.608193Z","iopub.status.idle":"2025-10-08T14:09:28.613646Z","shell.execute_reply.started":"2025-10-08T14:09:28.608169Z","shell.execute_reply":"2025-10-08T14:09:28.612746Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Assume: train_img_dir, train_img_files, train_labels, train_transform already defined hain\n\n# 1. Dataset banaao\ntrain_dataset = CIFAR10Dataset(train_img_dir, train_img_files, labels=train_labels, transform=train_transform)\n\n# 2. Pehli image aur label check karo\nimg, label = train_dataset[0]\nprint(f\"Image shape: {img.shape}\")  # Should be torch.Size([3, 32, 32])\nprint(f\"Label: {label}\")\n\n# 3. Visualize karo (reverse normalization for display)\nimport matplotlib.pyplot as plt\nimport numpy as np\n\ndef imshow(img):\n    img = img.numpy()\n    img = np.transpose(img, (1, 2, 0))  # CHW -> HWC\n    img = img * 0.5 + 0.5  # Unnormalize (0.5, 0.5, 0.5)\n    plt.imshow(img)\n    plt.axis('off')\n    plt.show()\n\nimshow(img)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:32.248137Z","iopub.execute_input":"2025-10-08T14:09:32.248845Z","iopub.status.idle":"2025-10-08T14:09:32.319527Z","shell.execute_reply.started":"2025-10-08T14:09:32.248818Z","shell.execute_reply":"2025-10-08T14:09:32.318892Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from torch.utils.data import DataLoader\n\nbatch_size = 128  # ya 64/256 (memory ke hisaab se adjust kar lena)\n\ntrain_loader = DataLoader(\n    train_dataset,\n    batch_size=batch_size,\n    shuffle=True,\n    num_workers=2,   # Kaggle pe 2 sahi hai, agar error aye to 0 kar dena\n    pin_memory=True\n)\n\n# Test dataset ke liye bhi aise hi loader banao (labels=None, transform=test_transform)\ntest_dataset = CIFAR10Dataset(test_img_dir, test_img_files, labels=None, transform=test_transform)\ntest_loader = DataLoader(\n    test_dataset,\n    batch_size=batch_size,\n    shuffle=False,\n    num_workers=2,\n    pin_memory=True\n)\n\n# Quick check: ek batch dekh lo\nimages, labels = next(iter(train_loader))\nprint(f\"Batch shape: {images.shape}, Labels shape: {labels.shape}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:36.782977Z","iopub.execute_input":"2025-10-08T14:09:36.783606Z","iopub.status.idle":"2025-10-08T14:09:36.798178Z","shell.execute_reply.started":"2025-10-08T14:09:36.783581Z","shell.execute_reply":"2025-10-08T14:09:36.797166Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Test dataset ke liye directory aur file list banao\ntest_img_dir = '/kaggle/working/test/test'\ntest_img_files = sorted(os.listdir(test_img_dir))\n\ntest_dataset = CIFAR10Dataset(test_img_dir, test_img_files, labels=None, transform=test_transform)\ntest_loader = DataLoader(\n    test_dataset,\n    batch_size=batch_size,\n    shuffle=False,\n    num_workers=2,\n    pin_memory=True\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:09:59.519759Z","iopub.execute_input":"2025-10-08T14:09:59.520384Z","iopub.status.idle":"2025-10-08T14:09:59.781019Z","shell.execute_reply.started":"2025-10-08T14:09:59.52036Z","shell.execute_reply":"2025-10-08T14:09:59.780432Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Test loader se ek batch nikal ke check karo\ntest_images = next(iter(test_loader))\nprint(\"Test batch shape:\", test_images.shape)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:10:03.775663Z","iopub.execute_input":"2025-10-08T14:10:03.77629Z","iopub.status.idle":"2025-10-08T14:10:04.173767Z","shell.execute_reply.started":"2025-10-08T14:10:03.776263Z","shell.execute_reply":"2025-10-08T14:10:04.172971Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch.nn as nn\nimport torch.optim as optim\n\n# 1. Custom CNN Model (simple but effective for CIFAR-10)\nclass MyCIFAR10Net(nn.Module):\n    def __init__(self, num_classes=10):\n        super(MyCIFAR10Net, self).__init__()\n        self.features = nn.Sequential(\n            nn.Conv2d(3, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True),\n            nn.Conv2d(64, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n\n            nn.Conv2d(64, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n\n            nn.Conv2d(128, 256, 3, padding=1), nn.BatchNorm2d(256), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n        )\n        self.classifier = nn.Sequential(\n            nn.Flatten(),\n            nn.Linear(256 * 4 * 4, 512), nn.ReLU(inplace=True), nn.Dropout(0.5),\n            nn.Linear(512, num_classes)\n        )\n\n    def forward(self, x):\n        x = self.features(x)\n        x = self.classifier(x)\n        return x\n\n# 2. Model Initialization\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel = MyCIFAR10Net().to(device)\n\n# 3. Optimizer (Adam), Loss Function, CosineAnnealingLR Scheduler\noptimizer = optim.Adam(model.parameters(), lr=1e-3)\ncriterion = nn.CrossEntropyLoss()\n\n# Cosine Annealing with warmup (optional: use torch.optim.lr_scheduler for warmup)\nscheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=30)\n\n# 4. Print summary to confirm\nprint(mod\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:10:11.313083Z","iopub.execute_input":"2025-10-08T14:10:11.313875Z","iopub.status.idle":"2025-10-08T14:10:11.335996Z","shell.execute_reply.started":"2025-10-08T14:10:11.313847Z","shell.execute_reply":"2025-10-08T14:10:11.334902Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch.nn as nn\nimport torch.optim as optim\n\n# 1. Custom CNN Model (simple but effective for CIFAR-10)\nclass MyCIFAR10Net(nn.Module):\n    def __init__(self, num_classes=10):\n        super(MyCIFAR10Net, self).__init__()\n        self.features = nn.Sequential(\n            nn.Conv2d(3, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True),\n            nn.Conv2d(64, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n\n            nn.Conv2d(64, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True),\n            nn.Conv2d(128, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n\n            nn.Conv2d(128, 256, 3, padding=1), nn.BatchNorm2d(256), nn.ReLU(inplace=True),\n            nn.MaxPool2d(2, 2),\n        )\n        self.classifier = nn.Sequential(\n            nn.Flatten(),\n            nn.Linear(256 * 4 * 4, 512), nn.ReLU(inplace=True), nn.Dropout(0.5),\n            nn.Linear(512, num_classes)\n        )\n\n    def forward(self, x):\n        x = self.features(x)\n        x = self.classifier(x)\n        return x\n\n# 2. Model Initialization\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel = MyCIFAR10Net().to(device)\n\n# 3. Optimizer (Adam), Loss Function, CosineAnnealingLR Scheduler\noptimizer = optim.Adam(model.parameters(), lr=1e-3)\ncriterion = nn.CrossEntropyLoss()\n\n# Cosine Annealing with warmup (optional: use torch.optim.lr_scheduler for warmup)\nscheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=30)\n\n# 4. Print summary to confirm\nprint(model)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:10:19.336856Z","iopub.execute_input":"2025-10-08T14:10:19.337439Z","iopub.status.idle":"2025-10-08T14:10:19.380841Z","shell.execute_reply.started":"2025-10-08T14:10:19.337416Z","shell.execute_reply":"2025-10-08T14:10:19.380174Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Training and Validation Loop\n\nimport torch\nimport torch.nn as nn\nfrom tqdm import tqdm\n\nepochs = 30\nbest_acc = 0\n\nfor epoch in range(epochs):\n    model.train()\n    running_loss = 0.0\n    correct = 0\n    total = 0\n\n    for images, labels in tqdm(train_loader, desc=f\"Epoch {epoch+1}/{epochs}\"):\n        images, labels = images.to(device), labels.to(device)\n        optimizer.zero_grad()\n        outputs = model(images)\n        loss = criterion(outputs, labels)\n        loss.backward()\n        optimizer.step()\n        scheduler.step()\n\n        running_loss += loss.item() * images.size(0)\n        _, preds = torch.max(outputs, 1)\n        correct += (preds == labels).sum().item()\n        total += labels.size(0)\n\n    train_loss = running_loss / total\n    train_acc = correct / total\n\n    print(f\"Epoch [{epoch+1}/{epochs}] Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.4f}\")\n\n    # OPTIONAL: Save best model (you can implement validation as well if split available)\n    if train_acc > best_acc:\n        best_acc = train_acc\n        torch.save(model.state_dict(), \"best_model.pth\")\n\nprint(\"Training done. Best Train Accuracy:\", best_acc)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:12:13.91361Z","iopub.execute_input":"2025-10-08T14:12:13.913912Z","iopub.status.idle":"2025-10-08T14:21:10.189122Z","shell.execute_reply.started":"2025-10-08T14:12:13.913891Z","shell.execute_reply":"2025-10-08T14:21:10.188295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Load best weights (in case you used torch.save in training)\nmodel.load_state_dict(torch.load(\"best_model.pth\"))\nmodel.eval()\n\nall_preds = []\nwith torch.no_grad():\n    for images in test_loader:\n        images = images.to(device)\n        outputs = model(images)\n        _, preds = torch.max(outputs, 1)\n        all_preds.extend(preds.cpu().numpy())\n\n# Submission ke liye sampleSubmission.csv lo aur uski 'label' column fill karo\nimport pandas as pd\n\nsample_submission = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv')\nsample_submission['label'] = all_preds\nsample_submission.to_csv('submission.csv', index=False)\nprint(\"submission.csv generated!\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:27:22.410779Z","iopub.execute_input":"2025-10-08T14:27:22.411321Z","iopub.status.idle":"2025-10-08T14:28:26.775973Z","shell.execute_reply.started":"2025-10-08T14:27:22.411297Z","shell.execute_reply":"2025-10-08T14:28:26.775199Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Int label se class name me mapping (0->airplane, 1->automobile, ... 9->truck)\nidx_to_label = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n\n# Predict again if not done, otherwise just map\nlabel_names = [idx_to_label[i] for i in all_preds]\n\n# Ab submission.csv banate waqt:\nsample_submission = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv')\nsample_submission['label'] = label_names\nsample_submission.to_csv('submission.csv', index=False)\nprint(\"submission.csv generated (with class names)!\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:32:55.509599Z","iopub.execute_input":"2025-10-08T14:32:55.510339Z","iopub.status.idle":"2025-10-08T14:32:55.805913Z","shell.execute_reply.started":"2025-10-08T14:32:55.510313Z","shell.execute_reply":"2025-10-08T14:32:55.805086Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 1. Class name mapping\nidx_to_label = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n\n# 2. Suppose predictions is a numpy array or list of ints\nlabel_names = [idx_to_label[int(i)] for i in predictions]  # Make sure i is int\n\n# 3. Load sample_submission to keep correct id order\nsample_submission = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv')\n\n# 4. Assign\nsample_submission['label'] = label_names\n\n# 5. Save for submission\nsample_submission.to_csv('submission.csv', index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:35:59.142918Z","iopub.execute_input":"2025-10-08T14:35:59.143537Z","iopub.status.idle":"2025-10-08T14:35:59.167889Z","shell.execute_reply.started":"2025-10-08T14:35:59.143514Z","shell.execute_reply":"2025-10-08T14:35:59.166933Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\n\n# Make sure you have your test_loader ready (already created in previous steps)\nmodel.eval()\npredictions = []\n\nwith torch.no_grad():\n    for batch in test_loader:\n        images = batch  # Agar test_loader sirf images deta hai (labels nahi)\n        images = images.to(device)\n        outputs = model(images)\n        _, predicted = torch.max(outputs, 1)\n        predictions.extend(predicted.cpu().numpy())\n\nprint(len(predictions))  # Should be 30000 for CIFAR-10 test set\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:38:07.091749Z","iopub.execute_input":"2025-10-08T14:38:07.092035Z","iopub.status.idle":"2025-10-08T14:39:09.875599Z","shell.execute_reply.started":"2025-10-08T14:38:07.092015Z","shell.execute_reply":"2025-10-08T14:39:09.874554Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Index to class name mapping (Kaggle CIFAR-10 standard order)\nidx_to_label = ['airplane', 'automobile', 'bird', 'cat', 'deer', \n                'dog', 'frog', 'horse', 'ship', 'truck']\n\nlabel_names = [idx_to_label[int(i)] for i in predictions]\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:41:28.474818Z","iopub.execute_input":"2025-10-08T14:41:28.475465Z","iopub.status.idle":"2025-10-08T14:41:28.504728Z","shell.execute_reply.started":"2025-10-08T14:41:28.475438Z","shell.execute_reply":"2025-10-08T14:41:28.504152Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\n# Load sample submission to maintain correct order\nsample_submission = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv')\n\n# Assign predicted class names\nsample_submission['label'] = label_names\n\n# Save for submission\nsample_submission.to_csv('submission.csv', index=False)\nprint('submission.csv generated (with class names)!')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:41:37.548022Z","iopub.execute_input":"2025-10-08T14:41:37.548418Z","iopub.status.idle":"2025-10-08T14:41:37.834873Z","shell.execute_reply.started":"2025-10-08T14:41:37.548388Z","shell.execute_reply":"2025-10-08T14:41:37.834262Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nprint(\"Unique predictions and their counts:\")\nprint(np.unique(predictions, return_counts=True))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:50:12.745735Z","iopub.execute_input":"2025-10-08T14:50:12.746037Z","iopub.status.idle":"2025-10-08T14:50:12.770328Z","shell.execute_reply.started":"2025-10-08T14:50:12.746018Z","shell.execute_reply":"2025-10-08T14:50:12.769365Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\n\n# Standard CIFAR-10 order for class labels\nclass_names = [\n    'airplane', 'automobile', 'bird', 'cat', 'deer',\n    'dog', 'frog', 'horse', 'ship', 'truck'\n]\n\n# Map predictions (integers) to class names\nlabel_names = [class_names[int(i)] for i in predictions]\n\n# Load sample submission file\nsample_submission = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv')\nsample_submission['label'] = label_names\n\n# Save to file\nsample_submission.to_csv('submission.csv', index=False)\nprint('submission.csv generated (with class names)!')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-08T14:54:14.178484Z","iopub.execute_input":"2025-10-08T14:54:14.178773Z","iopub.status.idle":"2025-10-08T14:54:14.486058Z","shell.execute_reply.started":"2025-10-08T14:54:14.17875Z","shell.execute_reply":"2025-10-08T14:54:14.48528Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}