{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.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":30665,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install py7zr","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:39:41.231526Z","iopub.execute_input":"2024-03-15T14:39:41.231868Z","iopub.status.idle":"2024-03-15T14:40:06.554522Z","shell.execute_reply.started":"2024-03-15T14:39:41.231838Z","shell.execute_reply":"2024-03-15T14:40:06.553466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install --upgrade py7zr\n\nimport numpy as np\nimport pandas as pd\nimport torch\n\nfrom py7zr import unpack_7zarchive\nimport shutil\n\nshutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)\nshutil.unpack_archive('/kaggle/input/cifar-10/train.7z', '/kaggle/temp/')","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:40:06.556579Z","iopub.execute_input":"2024-03-15T14:40:06.556876Z","iopub.status.idle":"2024-03-15T14:40:49.075021Z","shell.execute_reply.started":"2024-03-15T14:40:06.556848Z","shell.execute_reply":"2024-03-15T14:40:49.074159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if torch.cuda.is_available():\n    device=torch.device(type='cuda',index=0)\nelse:\n    device=torch.device(type='cpu',index=0)","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:40:49.076341Z","iopub.execute_input":"2024-03-15T14:40:49.076917Z","iopub.status.idle":"2024-03-15T14:40:49.108463Z","shell.execute_reply.started":"2024-03-15T14:40:49.076857Z","shell.execute_reply":"2024-03-15T14:40:49.107463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels=pd.read_csv(\"/kaggle/input/cifar-10/trainLabels.csv\",header='infer')\nclasses=train_labels['label'].unique()\n\nname2num={}\ni=0\nfor i in range(len(classes)):\n    name2num[classes[i]]=i\n    i+=1\n    \nnum2name={}\ni=0\nfor name in classes:\n    num2name[i]=name","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:40:49.112416Z","iopub.execute_input":"2024-03-15T14:40:49.112711Z","iopub.status.idle":"2024-03-15T14:40:49.241762Z","shell.execute_reply.started":"2024-03-15T14:40:49.112685Z","shell.execute_reply":"2024-03-15T14:40:49.240836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install torch torchvision torchaudio","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:40:49.242799Z","iopub.execute_input":"2024-03-15T14:40:49.243084Z","iopub.status.idle":"2024-03-15T14:41:01.507115Z","shell.execute_reply.started":"2024-03-15T14:40:49.243060Z","shell.execute_reply":"2024-03-15T14:41:01.505835Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.utils.data import Dataset, DataLoader\nimport os\nfrom torchvision.io import read_image\nfrom torchvision.transforms import ToTensor, Normalize, Resize, Compose\n\nclass TrainData(Dataset):\n    def __init__(self, imgpath, labelpath):\n        super().__init__()\n        self.imgpath=imgpath\n        self.labelpath=labelpath\n        self.labels=pd.read_csv(\"/kaggle/input/cifar-10/trainLabels.csv\",header=\"infer\")\n        self.transform=Compose([Resize((224,224),antialias=True), Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])\n        \n    def __len__(self):\n        return self.labels.shape[0]\n    \n    def __getitem__(self,idx):\n        finalpath=os.path.join(self.imgpath,str(idx+1))+'.png'\n        img=read_image(finalpath)/255\n        img=self.transform(img)\n        label=self.labels.iloc[idx,1]\n        label=name2num[label]\n        return img,label\n\ntraindataset=TrainData('/kaggle/temp/train','/kaggle/input/cifar-10/trainLabels.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:01.508721Z","iopub.execute_input":"2024-03-15T14:41:01.509061Z","iopub.status.idle":"2024-03-15T14:41:03.989404Z","shell.execute_reply.started":"2024-03-15T14:41:01.509031Z","shell.execute_reply":"2024-03-15T14:41:03.988437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size=64\ntrain=DataLoader(dataset=traindataset,batch_size=batch_size)","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:03.990685Z","iopub.execute_input":"2024-03-15T14:41:03.990983Z","iopub.status.idle":"2024-03-15T14:41:03.995612Z","shell.execute_reply.started":"2024-03-15T14:41:03.990958Z","shell.execute_reply":"2024-03-15T14:41:03.994608Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch.nn as nn\nfrom torchvision.models import mobilenet_v3_large, MobileNet_V3_Large_Weights\n\nclass MobileNet(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.pretrainednet=mobilenet_v3_large(weights=MobileNet_V3_Large_Weights.DEFAULT)\n        self.pretrainednet.classifier=nn.Sequential(\n            nn.Linear(in_features=960,out_features=1280,bias=True),\n            nn.Hardswish(),\n            nn.Dropout(p=0.2,inplace=True),\n            nn.Linear(in_features=1280,out_features=10,bias=True)\n        )\n    \n    def forward(self,x):\n        x=self.pretrainednet(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:03.996650Z","iopub.execute_input":"2024-03-15T14:41:03.996959Z","iopub.status.idle":"2024-03-15T14:41:04.007360Z","shell.execute_reply.started":"2024-03-15T14:41:03.996929Z","shell.execute_reply":"2024-03-15T14:41:04.006484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def train_one_epoch(dataloader,model,loss_fn,optimizer):\n    model.train()\n    track_loss=0\n    num_correct=0\n    num_param=0\n    \n    for i, (imgs,labels) in enumerate(dataloader):\n        imgs=imgs.to(device)\n        labels=labels.to(device)\n        pred=model(imgs)\n        \n        loss=loss_fn(pred,labels)\n        track_loss+=loss.item()\n        num_correct+=(torch.argmax(pred,dim=1)==labels).type(torch.float).sum().item()\n        \n        running_loss=round(track_loss/(i+(imgs.shape[0]/batch_size)),2)\n        running_acc=round((num_correct/((i*batch_size+imgs.shape[0])))*100,2)\n        \n        loss.backward()\n        optimizer.step()\n        optimizer.zero_grad()\n        \n        if i%100==0:\n            print(\"Batch:\", i+1, \"/\",len(dataloader), \"Running Loss:\",running_loss, \"Running Accuracy:\",running_acc)\n\n    epoch_loss=running_loss\n    epoch_acc=running_acc\n    return epoch_loss, epoch_acc","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:04.008562Z","iopub.execute_input":"2024-03-15T14:41:04.008964Z","iopub.status.idle":"2024-03-15T14:41:04.023260Z","shell.execute_reply.started":"2024-03-15T14:41:04.008897Z","shell.execute_reply":"2024-03-15T14:41:04.022345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models_acc={}\nmodels_loss={}","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:04.027174Z","iopub.execute_input":"2024-03-15T14:41:04.027586Z","iopub.status.idle":"2024-03-15T14:41:04.032282Z","shell.execute_reply.started":"2024-03-15T14:41:04.027564Z","shell.execute_reply":"2024-03-15T14:41:04.031312Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=MobileNet().to(device)\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=False\n    \nloss_fn=nn.CrossEntropyLoss()\nlr=0.001\n\noptimizer=torch.optim.Adam(params=model.parameters(), lr=lr)\nn_epochs=10\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['MobileNetV3 Grad=False']=acc\nmodels_loss['MobileNetV3 Grad=False']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:41:04.033351Z","iopub.execute_input":"2024-03-15T14:41:04.033605Z","iopub.status.idle":"2024-03-15T14:55:23.150281Z","shell.execute_reply.started":"2024-03-15T14:41:04.033584Z","shell.execute_reply":"2024-03-15T14:55:23.149330Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=MobileNet().to(device)\n\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=True\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['MobileNetV3 Grad=True']=acc\nmodels_loss['MobileNetV3 Grad=True']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T14:55:23.151698Z","iopub.execute_input":"2024-03-15T14:55:23.152103Z","iopub.status.idle":"2024-03-15T15:12:19.208113Z","shell.execute_reply.started":"2024-03-15T14:55:23.152075Z","shell.execute_reply":"2024-03-15T15:12:19.207091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch.nn as nn\nfrom torchvision.models import vgg16, VGG16_Weights\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.pretrainednet=vgg16(weights=VGG16_Weights.DEFAULT)\n        self.pretrainednet.classifier=nn.Sequential(\n            nn.Linear(in_features=25088,out_features=4096,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=4096,out_features=4096,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=4096,out_features=1000,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=1000,out_features=10,bias=True)\n        )\n    \n    def forward(self,x):\n        x=self.pretrainednet(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2024-03-15T15:12:19.209415Z","iopub.execute_input":"2024-03-15T15:12:19.209709Z","iopub.status.idle":"2024-03-15T15:12:19.217199Z","shell.execute_reply.started":"2024-03-15T15:12:19.209682Z","shell.execute_reply":"2024-03-15T15:12:19.216323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=VGG16().to(device)\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=False\n    \nloss_fn=nn.CrossEntropyLoss()\nlr=0.001\n\noptimizer=torch.optim.Adam(params=model.parameters(), lr=lr)\nn_epochs=10\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['VGG16 Grad=False']=acc\nmodels_loss['VGG16 Grad=False']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T15:12:19.218585Z","iopub.execute_input":"2024-03-15T15:12:19.218859Z","iopub.status.idle":"2024-03-15T15:42:12.887337Z","shell.execute_reply.started":"2024-03-15T15:12:19.218835Z","shell.execute_reply":"2024-03-15T15:42:12.885939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=VGG16().to(device)\n\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=True\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['VGG16 Grad=True']=acc\nmodels_loss['VGG16 Grad=True']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T15:42:12.888884Z","iopub.execute_input":"2024-03-15T15:42:12.889330Z","iopub.status.idle":"2024-03-15T16:41:49.425028Z","shell.execute_reply.started":"2024-03-15T15:42:12.889290Z","shell.execute_reply":"2024-03-15T16:41:49.424019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch.nn as nn\nfrom torchvision.models import vgg19, VGG19_Weights\n\nclass VGG19(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.pretrainednet=vgg19(weights=VGG19_Weights.DEFAULT)\n        self.pretrainednet.classifier=nn.Sequential(\n            nn.Linear(in_features=25088,out_features=4096,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=4096,out_features=4096,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=4096,out_features=1000,bias=True),\n            nn.ReLU(),\n            nn.Linear(in_features=1000,out_features=10,bias=True)\n        )\n    \n    def forward(self,x):\n        x=self.pretrainednet(x)\n        return x","metadata":{"execution":{"iopub.status.busy":"2024-03-15T16:41:49.426282Z","iopub.execute_input":"2024-03-15T16:41:49.426566Z","iopub.status.idle":"2024-03-15T16:41:49.433778Z","shell.execute_reply.started":"2024-03-15T16:41:49.426541Z","shell.execute_reply":"2024-03-15T16:41:49.432940Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=VGG19().to(device)\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=False\n    \nloss_fn=nn.CrossEntropyLoss()\nlr=0.001\n\noptimizer=torch.optim.Adam(params=model.parameters(), lr=lr)\nn_epochs=10\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['VGG19 Grad=False']=acc\nmodels_loss['VGG19 Grad=False']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T16:41:49.434750Z","iopub.execute_input":"2024-03-15T16:41:49.435009Z","iopub.status.idle":"2024-03-15T17:13:45.122576Z","shell.execute_reply.started":"2024-03-15T16:41:49.434987Z","shell.execute_reply":"2024-03-15T17:13:45.121606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=VGG19().to(device)\n\n\nfor param in model.pretrainednet.features.parameters():\n    param.requires_grad=True\n\nacc=[]\nloss=[]\nfor i in range(n_epochs):\n    print(\"Epoch No:\",i+1)\n    train_epoch_loss, train_epoch_acc=train_one_epoch(train,model,loss_fn,optimizer)\n    print(\"Training:\", \"Epoch Loss:\", train_epoch_loss, \"Epoch Accuracy:\", train_epoch_acc)\n    print(\"--------------------------------------------------\")\n    acc.append(train_epoch_acc)\n    loss.append(train_epoch_loss)\n    \nmodels_acc['VGG19 Grad=True']=acc\nmodels_loss['VGG19 Grad=True']=loss","metadata":{"execution":{"iopub.status.busy":"2024-03-15T17:13:45.124235Z","iopub.execute_input":"2024-03-15T17:13:45.124549Z","iopub.status.idle":"2024-03-15T18:22:56.185880Z","shell.execute_reply.started":"2024-03-15T17:13:45.124522Z","shell.execute_reply":"2024-03-15T18:22:56.184959Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nepochs = range(1, 11) \nfor model, acc_values in models_acc.items():\n    plt.plot(epochs, acc_values, label=model)\n\nplt.xlabel('Epochs')\nplt.ylabel('Accuracy')\nplt.title('Accuracy Comparison Across Models')\nplt.legend()\nplt.grid(True)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-03-15T18:22:56.187283Z","iopub.execute_input":"2024-03-15T18:22:56.187584Z","iopub.status.idle":"2024-03-15T18:22:56.530965Z","shell.execute_reply.started":"2024-03-15T18:22:56.187555Z","shell.execute_reply":"2024-03-15T18:22:56.530063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nepochs = range(1, 11) \nfor model, loss_values in models_loss.items():\n    plt.plot(epochs, loss_values, label=model)\n\nplt.xlabel('Epochs')\nplt.ylabel('Loss')\nplt.title('Loss Comparison Across Models')\nplt.legend()\nplt.grid(True)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-03-15T18:22:56.532185Z","iopub.execute_input":"2024-03-15T18:22:56.532506Z","iopub.status.idle":"2024-03-15T18:22:56.851180Z","shell.execute_reply.started":"2024-03-15T18:22:56.532481Z","shell.execute_reply":"2024-03-15T18:22:56.850287Z"},"trusted":true},"execution_count":null,"outputs":[]}]}