{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":5441,"databundleVersionId":38425,"sourceType":"competition"}],"dockerImageVersionId":30762,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-09-12T23:18:06.415509Z","iopub.execute_input":"2024-09-12T23:18:06.415847Z","iopub.status.idle":"2024-09-12T23:18:06.806617Z","shell.execute_reply.started":"2024-09-12T23:18:06.415811Z","shell.execute_reply":"2024-09-12T23:18:06.805553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Importing all the packages\nimport numpy as np\nimport pandas as pd\nimport torch\nimport random\nimport os,shutil\nimport torchvision\nfrom torchvision import datasets\nfrom torch.utils.data import DataLoader,Dataset\nimport torch.nn.functional as F\nfrom torch import optim\nfrom torch import nn\nimport cv2\nfrom glob import glob\nimport matplotlib.pyplot as plt\nfrom torchvision.datasets import DatasetFolder\nfrom torchvision.datasets import ImageFolder\nfrom torchvision import transforms,models,datasets\n\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:06.808602Z","iopub.execute_input":"2024-09-12T23:18:06.809517Z","iopub.status.idle":"2024-09-12T23:18:12.582786Z","shell.execute_reply.started":"2024-09-12T23:18:06.809470Z","shell.execute_reply":"2024-09-12T23:18:12.581956Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = 'cuda' if torch.cuda.is_available() else 'cpu'\nprint(f\"Using device: {device}\")","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:12.583871Z","iopub.execute_input":"2024-09-12T23:18:12.584292Z","iopub.status.idle":"2024-09-12T23:18:12.656206Z","shell.execute_reply.started":"2024-09-12T23:18:12.584257Z","shell.execute_reply":"2024-09-12T23:18:12.655205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimport zipfile\n\nwith zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip\",\"r\") as z:\n    z.extractall(\".\")\n    \nwith zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats-redux-kernels-edition/test.zip\",\"r\") as z:\n    z.extractall(\".\")\n\n!ls /kaggle/working","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:12.658773Z","iopub.execute_input":"2024-09-12T23:18:12.659088Z","iopub.status.idle":"2024-09-12T23:18:29.729107Z","shell.execute_reply.started":"2024-09-12T23:18:12.659054Z","shell.execute_reply":"2024-09-12T23:18:29.727877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":" for file in os.listdir():\n    if os.path.isdir(file):\n        print(file)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:29.731603Z","iopub.execute_input":"2024-09-12T23:18:29.732635Z","iopub.status.idle":"2024-09-12T23:18:29.739090Z","shell.execute_reply.started":"2024-09-12T23:18:29.732594Z","shell.execute_reply":"2024-09-12T23:18:29.737999Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nos.chdir(r'/kaggle/working/train')\n!mkdir train valid\nos.chdir(r'/kaggle/working/train/train')\n!mkdir cats dogs\nos.chdir(r'/kaggle/working/train/valid')\n!mkdir cats dogs\n\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:29.740491Z","iopub.execute_input":"2024-09-12T23:18:29.740846Z","iopub.status.idle":"2024-09-12T23:18:32.834405Z","shell.execute_reply.started":"2024-09-12T23:18:29.740793Z","shell.execute_reply":"2024-09-12T23:18:32.833090Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#directories name\noriginal_dir = '/kaggle/working/train'\ntrain_dir = '/kaggle/working/train/train'\nvalid_dir = '/kaggle/working/train/valid'\ncats_train = '/kaggle/working/train/train/cats'\ndogs_train = '/kaggle/working/train/train/dogs'\ncats_valid = '/kaggle/working/train/valid/cats'\ndogs_valid = '/kaggle/working/train/valid/dogs'\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:32.836030Z","iopub.execute_input":"2024-09-12T23:18:32.836395Z","iopub.status.idle":"2024-09-12T23:18:32.841786Z","shell.execute_reply.started":"2024-09-12T23:18:32.836356Z","shell.execute_reply":"2024-09-12T23:18:32.840772Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Moving folders\nimport shutil\nimport os\ndogs = 0\ncats = 0\nfor file in os.listdir(original_dir):\n    if file.startswith('dog.'):\n        if dogs <=11250:\n            shutil.move(os.path.join(original_dir,file),os.path.join(dogs_train,file))\n        else:\n            shutil.move(os.path.join(original_dir,file),os.path.join(dogs_valid,file))\n        dogs+=1\n    elif file.startswith('cat.'):\n        if cats <= 11250:\n            shutil.move(os.path.join(original_dir,file),os.path.join(cats_train,file))\n        else:\n            shutil.move(os.path.join(original_dir,file),os.path.join(cats_valid,file))\n        cats+=1\n\nprint(dogs,cats)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:32.843520Z","iopub.execute_input":"2024-09-12T23:18:32.843854Z","iopub.status.idle":"2024-09-12T23:18:33.738365Z","shell.execute_reply.started":"2024-09-12T23:18:32.843804Z","shell.execute_reply":"2024-09-12T23:18:33.737402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls /kaggle/working/train/train\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:33.739839Z","iopub.execute_input":"2024-09-12T23:18:33.740233Z","iopub.status.idle":"2024-09-12T23:18:34.774748Z","shell.execute_reply.started":"2024-09-12T23:18:33.740189Z","shell.execute_reply":"2024-09-12T23:18:34.773746Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"transforms = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor()])","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:34.780224Z","iopub.execute_input":"2024-09-12T23:18:34.780612Z","iopub.status.idle":"2024-09-12T23:18:34.786137Z","shell.execute_reply.started":"2024-09-12T23:18:34.780577Z","shell.execute_reply":"2024-09-12T23:18:34.785182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torchvision.datasets import ImageFolder","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:34.787675Z","iopub.execute_input":"2024-09-12T23:18:34.788075Z","iopub.status.idle":"2024-09-12T23:18:34.797282Z","shell.execute_reply.started":"2024-09-12T23:18:34.788028Z","shell.execute_reply":"2024-09-12T23:18:34.796506Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Dataset class\ntrain_dataset = ImageFolder(root = train_dir,transform=transforms)\nvalid_dataset = ImageFolder(root = valid_dir,transform=transforms)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:34.798438Z","iopub.execute_input":"2024-09-12T23:18:34.798739Z","iopub.status.idle":"2024-09-12T23:18:34.922395Z","shell.execute_reply.started":"2024-09-12T23:18:34.798699Z","shell.execute_reply":"2024-09-12T23:18:34.921544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Visualize a random image\nimport random\nindex = random.randint(0,len(train_dataset)-1)\nimage,label = train_dataset[index]\nplt.imshow(image.numpy().transpose(1,2,0))\nplt.title(label)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:34.923546Z","iopub.execute_input":"2024-09-12T23:18:34.923866Z","iopub.status.idle":"2024-09-12T23:18:35.452401Z","shell.execute_reply.started":"2024-09-12T23:18:34.923833Z","shell.execute_reply":"2024-09-12T23:18:35.451336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Dataloader\ntrain_dl = DataLoader(train_dataset,batch_size=32,shuffle=True,num_workers = 4)\nvalid_dl = DataLoader(valid_dataset,batch_size=32,shuffle=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:35.453626Z","iopub.execute_input":"2024-09-12T23:18:35.453941Z","iopub.status.idle":"2024-09-12T23:18:35.460607Z","shell.execute_reply.started":"2024-09-12T23:18:35.453905Z","shell.execute_reply":"2024-09-12T23:18:35.459604Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Defining model\n\nclass mynet(nn.Module):\n    def __init__(self, *args, **kwargs) -> None:\n        super().__init__(*args, **kwargs)\n        self.convnet = nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=32,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.BatchNorm2d(32),\n            nn.MaxPool2d(2),\n            nn.Conv2d(32,64,3,1),\n            nn.ReLU(),\n            nn.BatchNorm2d(64),\n            nn.MaxPool2d(2),\n            nn.Conv2d(64,128,3,1),\n            nn.ReLU(),\n            nn.BatchNorm2d(128),\n            nn.MaxPool2d(2),\n            nn.Conv2d(128,128,3,1),\n            nn.ReLU(),\n            nn.BatchNorm2d(128),\n            nn.MaxPool2d(2),\n            nn.Flatten(),\n            nn.Linear(128 * 12 * 12,2)\n        )\n    \n    def forward(self,x):\n        x = self.convnet(x)\n        return x\n    \n\nmodel = mynet().to(device)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:35.462007Z","iopub.execute_input":"2024-09-12T23:18:35.462366Z","iopub.status.idle":"2024-09-12T23:18:35.686484Z","shell.execute_reply.started":"2024-09-12T23:18:35.462305Z","shell.execute_reply":"2024-09-12T23:18:35.685595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install torchsummary","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:35.687613Z","iopub.execute_input":"2024-09-12T23:18:35.687924Z","iopub.status.idle":"2024-09-12T23:18:50.956377Z","shell.execute_reply.started":"2024-09-12T23:18:35.687888Z","shell.execute_reply":"2024-09-12T23:18:50.955148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torchsummary import summary\n\nsummary(model,input_size=(3,224,224))","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:50.958027Z","iopub.execute_input":"2024-09-12T23:18:50.958395Z","iopub.status.idle":"2024-09-12T23:18:51.738304Z","shell.execute_reply.started":"2024-09-12T23:18:50.958357Z","shell.execute_reply":"2024-09-12T23:18:51.737369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.optim import SGD,Adam\nopt = SGD(model.parameters(),lr = 1e-03)\nloss_fn = nn.CrossEntropyLoss()","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.739860Z","iopub.execute_input":"2024-09-12T23:18:51.740652Z","iopub.status.idle":"2024-09-12T23:18:51.745548Z","shell.execute_reply.started":"2024-09-12T23:18:51.740599Z","shell.execute_reply":"2024-09-12T23:18:51.744703Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# #The Main Loop\n# epochs = 2\n# train_losses,test_losses = [],[]\n# train_accs,test_accs = [],[]\n# for epoch in range(epochs):\n#     train_loss = 0.0\n#     correct = 0\n#     train_acc = 0.0\n#     #training loop\n\n#     for batch,(x,y) in enumerate(train_dl):\n#         model.train()\n#         x,y = x.to(device),y.to(device)\n#         pred = model(x)\n#         loss = loss_fn(pred,y)\n#         loss.backward()\n#         opt.step()\n#         opt.zero_grad()\n#         train_loss+=loss.item()\n#         y_pred_class = torch.argmax(torch.softmax(pred,dim=1),dim=1)\n#         train_acc += (y_pred_class == y).sum().item()/len(pred)\n#     avg_train_loss = train_loss/len(train_dl)\n#     avg_train_acc = train_acc/len(train_dl)\n#     train_losses.append(avg_train_loss)\n#     train_accs.append(avg_train_acc)\n#     print(f'Epoch: {epoch} train loss: {avg_train_loss} train acc: {avg_train_acc}')\n    \n#     #Test loop\n#     model.eval()\n#     test_loss = 0.0 \n#     test_correct = 0\n#     test_acc = 0.0\n#     with torch.no_grad():\n#         for batch,(x,y) in enumerate(valid_dl):\n#             x,y = x.to(device),y.to(device)\n#             pred = model(x)\n#             loss = loss_fn(pred.squeeze(0),y)\n#             test_loss += loss.item()\n#             y_pred_class_test = torch.argmax(torch.softmax(pred, dim=1), dim=1)\n#             test_acc += (y_pred_class_test == y).sum().item()/len(pred)\n#         avg_test_loss = test_loss/len(valid_dl)\n#         avg_test_acc = test_acc/len(valid_dl)\n#         test_accs.append(avg_test_acc)\n#         test_losses.append(avg_test_loss)\n#         print(f'Epoch: {epoch} test loss: {avg_test_loss} test acc: {avg_test_acc}')","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.746682Z","iopub.execute_input":"2024-09-12T23:18:51.746963Z","iopub.status.idle":"2024-09-12T23:18:51.757407Z","shell.execute_reply.started":"2024-09-12T23:18:51.746931Z","shell.execute_reply":"2024-09-12T23:18:51.756526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test_dir = r'/kaggle/working/test'\n# from torchvision import transforms,models,datasets\n# def transform_image(image):\n#     image_path = r'{}'.format(image)\n#     custom_image = torchvision.io.read_image(str(image_path)).type(torch.float32)\n#     custom_image /= 255\n#     custom_trans = transforms.Compose([transforms.Resize((224,224))])\n#     custom_image_transformed = custom_trans(custom_image) \n\n#     return custom_image_transformed\n\n# def predict_image(image,model):\n#     model.eval()\n#     with torch.no_grad():\n#         custom_pred = model(image.unsqueeze(dim=0).to(device))\n#         probs = torch.nn.functional.softmax(custom_pred[0],dim=0)\n#         predicted_class = torch.argmax(probs).item()\n#     return predicted_class\n\n# predictions = []\n# image_names = []\n# ids = []\n# for image in os.listdir(test_dir):\n#     image_path = os.path.join(test_dir,image) #Full path\n#     #adding name \n#     ids.append(image.split(\".\")[0])\n#     image_names.append(image)\n#     prediction = predict_image(transform_image(image_path),model)\n#     predictions.append(prediction)\n# os.chdir(r'/kaggle/working/')\n# import pandas as pd    \n# df = pd.DataFrame({\"id\":ids,\"label\":predictions})\n# df.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.758661Z","iopub.execute_input":"2024-09-12T23:18:51.759051Z","iopub.status.idle":"2024-09-12T23:18:51.772020Z","shell.execute_reply.started":"2024-09-12T23:18:51.759006Z","shell.execute_reply":"2024-09-12T23:18:51.771050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import sys\n# sys.exit()\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.773102Z","iopub.execute_input":"2024-09-12T23:18:51.773450Z","iopub.status.idle":"2024-09-12T23:18:51.787347Z","shell.execute_reply.started":"2024-09-12T23:18:51.773402Z","shell.execute_reply":"2024-09-12T23:18:51.786302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# tl_model = models.resnet18(pretrained = True)\n# #Freeze the parameters\n# for param in tl_model.parameters():\n#     param.requires_grad = False\n    \n# #Modify the last FCN\n# num_classes = 2\n# # modify the output size of pooling\n# tl_model.avgpool = nn.AdaptiveAvgPool2d(output_size=(1,1))\n# input_tolinear = tl_model.fc.in_features\n# tl_model.fc =nn.Linear(input_tolinear,num_classes)\n# tl_model.to(device='cuda')\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.788610Z","iopub.execute_input":"2024-09-12T23:18:51.788900Z","iopub.status.idle":"2024-09-12T23:18:51.798368Z","shell.execute_reply.started":"2024-09-12T23:18:51.788868Z","shell.execute_reply":"2024-09-12T23:18:51.797363Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from torchsummary import summary\n\n# summary(tl_model,input_size=(3,224,224))","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.799697Z","iopub.execute_input":"2024-09-12T23:18:51.800000Z","iopub.status.idle":"2024-09-12T23:18:51.808346Z","shell.execute_reply.started":"2024-09-12T23:18:51.799967Z","shell.execute_reply":"2024-09-12T23:18:51.807572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # %%\n# from torch.optim import Adam,SGD\n\n# loss_fn = nn.CrossEntropyLoss()\n\n# opt = SGD(tl_model.parameters(),lr = 1e-03)\n\n# # %%\n# epochs = 10\n# train_losses,test_losses = [],[]\n# train_accs,test_accs = [],[]\n# for epoch in range(epochs):\n#     train_loss = 0.0\n#     correct = 0\n#     train_acc = 0.0\n#     for batch,(x,y) in enumerate(train_dl):\n\n#         tl_model.train()\n#         x,y = x.to(device),y.to(device)\n#         pred = tl_model(x)\n#         loss = loss_fn(pred,y)\n#         loss.backward()\n#         opt.step()\n#         opt.zero_grad()\n#         train_loss += loss.item()\n#         # correct += (pred.argmax(1)== y).float().sum()\n#         y_pred_class = torch.argmax(torch.softmax(pred, dim=1), dim=1)\n#         train_acc += (y_pred_class == y).sum().item()/len(pred)\n#     avg_train_loss = train_loss/len(train_dl)\n#     avg_train_acc = train_acc/len(train_dl)\n#     train_losses.append(avg_train_loss)\n#     train_accs.append(avg_train_acc)\n#     print(f'Epoch: {epoch} train loss: {avg_train_loss} train acc: {avg_train_acc}')\n\n#     #testloop\n#     tl_model.eval()\n#     test_loss = 0.0\n#     test_correct = 0\n#     test_acc = 0.0\n#     with torch.no_grad():\n#         for batch,(x,y) in enumerate(valid_dl):\n#             x,y = x.to(device),y.to(device)\n#             pred = tl_model(x)\n#             loss = loss_fn(pred.squeeze(0),y)\n#             test_loss += loss.item()\n#             y_pred_class_test = torch.argmax(torch.softmax(pred, dim=1), dim=1)\n#             # print(y_pred_class_test,y)\n#             test_acc += (y_pred_class_test == y).sum().item()/len(pred)\n\n#         avg_test_loss = test_loss/len(valid_dl)\n#         avg_test_acc = test_acc/len(valid_dl)\n#         test_accs.append(avg_test_acc)\n#         test_losses.append(avg_test_loss)\n#         print(f'Epoch: {epoch} test loss: {avg_test_loss} test acc: {avg_test_acc}')","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.809594Z","iopub.execute_input":"2024-09-12T23:18:51.809905Z","iopub.status.idle":"2024-09-12T23:18:51.819711Z","shell.execute_reply.started":"2024-09-12T23:18:51.809873Z","shell.execute_reply":"2024-09-12T23:18:51.818800Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# plt.plot(train_losses,label='train_loss')\n# plt.plot(test_losses,label='test_loss')\n# plt.legend()","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.821028Z","iopub.execute_input":"2024-09-12T23:18:51.821371Z","iopub.status.idle":"2024-09-12T23:18:51.834108Z","shell.execute_reply.started":"2024-09-12T23:18:51.821314Z","shell.execute_reply":"2024-09-12T23:18:51.833100Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"RESNET50","metadata":{}},{"cell_type":"code","source":"tl_model2 = models.resnet50(pretrained = True)\n#Freeze the parameters\nfor param in tl_model2.parameters():\n    param.requires_grad = False\n    \n#Modify the last FCN\nnum_classes = 2\n# modify the output size of pooling\ntl_model2.avgpool = nn.AdaptiveAvgPool2d(output_size=(1,1))\ninput_tolinear = tl_model2.fc.in_features\ntl_model2.fc =nn.Linear(input_tolinear,num_classes)\ntl_model2.to(device='cuda')\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:51.835337Z","iopub.execute_input":"2024-09-12T23:18:51.835638Z","iopub.status.idle":"2024-09-12T23:18:53.115563Z","shell.execute_reply.started":"2024-09-12T23:18:51.835606Z","shell.execute_reply":"2024-09-12T23:18:53.114544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install torchsummary","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:18:53.116917Z","iopub.execute_input":"2024-09-12T23:18:53.117338Z","iopub.status.idle":"2024-09-12T23:19:06.277923Z","shell.execute_reply.started":"2024-09-12T23:18:53.117289Z","shell.execute_reply":"2024-09-12T23:19:06.276760Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torchsummary import summary\n\nsummary(tl_model2,input_size=(3,224,224))","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:19:06.283887Z","iopub.execute_input":"2024-09-12T23:19:06.284257Z","iopub.status.idle":"2024-09-12T23:19:06.448340Z","shell.execute_reply.started":"2024-09-12T23:19:06.284208Z","shell.execute_reply":"2024-09-12T23:19:06.447360Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# %%\nfrom torch.optim import Adam,SGD\n\nloss_fn = nn.CrossEntropyLoss()\n\nopt = SGD(tl_model2.parameters(),lr = 1e-03)\n\n# %%\nepochs = 20\ntrain_losses,test_losses = [],[]\ntrain_accs,test_accs = [],[]\nfor epoch in range(epochs):\n    train_loss = 0.0\n    correct = 0\n    train_acc = 0.0\n    for batch,(x,y) in enumerate(train_dl):\n\n        tl_model2.train()\n        x,y = x.to(device),y.to(device)\n        pred = tl_model2(x)\n        loss = loss_fn(pred,y)\n        loss.backward()\n        opt.step()\n        opt.zero_grad()\n        train_loss += loss.item()\n        # correct += (pred.argmax(1)== y).float().sum()\n        y_pred_class = torch.argmax(torch.softmax(pred, dim=1), dim=1)\n        train_acc += (y_pred_class == y).sum().item()/len(pred)\n    avg_train_loss = train_loss/len(train_dl)\n    avg_train_acc = train_acc/len(train_dl)\n    train_losses.append(avg_train_loss)\n    train_accs.append(avg_train_acc)\n    print(f'Epoch: {epoch} train loss: {avg_train_loss} train acc: {avg_train_acc}')\n\n    #testloop\n    tl_model2.eval()\n    test_loss = 0.0\n    test_correct = 0\n    test_acc = 0.0\n    with torch.no_grad():\n        for batch,(x,y) in enumerate(valid_dl):\n            x,y = x.to(device),y.to(device)\n            pred = tl_model2(x)\n            loss = loss_fn(pred.squeeze(0),y)\n            test_loss += loss.item()\n            y_pred_class_test = torch.argmax(torch.softmax(pred, dim=1), dim=1)\n            # print(y_pred_class_test,y)\n            test_acc += (y_pred_class_test == y).sum().item()/len(pred)\n\n        avg_test_loss = test_loss/len(valid_dl)\n        avg_test_acc = test_acc/len(valid_dl)\n        test_accs.append(avg_test_acc)\n        test_losses.append(avg_test_loss)\n        print(f'Epoch: {epoch} test loss: {avg_test_loss} test acc: {avg_test_acc}')","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:19:06.449695Z","iopub.execute_input":"2024-09-12T23:19:06.450444Z","iopub.status.idle":"2024-09-12T23:21:59.856793Z","shell.execute_reply.started":"2024-09-12T23:19:06.450398Z","shell.execute_reply":"2024-09-12T23:21:59.855619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(train_losses,label='train_loss')\nplt.plot(test_losses,label='test_loss')\nplt.legend()","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:21:59.858326Z","iopub.execute_input":"2024-09-12T23:21:59.858668Z","iopub.status.idle":"2024-09-12T23:22:00.176324Z","shell.execute_reply.started":"2024-09-12T23:21:59.858632Z","shell.execute_reply":"2024-09-12T23:22:00.175375Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Prediction","metadata":{}},{"cell_type":"code","source":"# test_dir = r'/kaggle/working/test'\n# from torchvision import transforms,models,datasets\n# def transform_image(image):\n#     image_path = r'{}'.format(image)\n#     custom_image = torchvision.io.read_image(str(image_path)).type(torch.float32)\n#     custom_image /= 255\n#     custom_trans = transforms.Compose([transforms.Resize((224,224))])\n#     custom_image_transformed = custom_trans(custom_image) \n\n#     return custom_image_transformed\n\n# def predict_image(image,model):\n#     model.eval()\n#     with torch.no_grad():\n#         custom_pred = model(image.unsqueeze(dim=0).to(device))\n#         probs = torch.nn.functional.softmax(custom_pred[0],dim=0)\n#         predicted_class = torch.argmax(probs).item()\n#     return predicted_class\n\n# predictions = []\n# image_names = []\n# ids = []\n# for image in os.listdir(test_dir):\n#     image_path = os.path.join(test_dir,image) #Full path\n#     #adding name \n#     ids.append(image.split(\".\")[0])\n#     image_names.append(image)\n#     prediction = predict_image(transform_image(image_path),tl_model)\n#     predictions.append(prediction)\n\n    \n# df = pd.DataFrame({\"id\":ids,\"label\":predictions})\n# df.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:22:00.177545Z","iopub.execute_input":"2024-09-12T23:22:00.177827Z","iopub.status.idle":"2024-09-12T23:22:00.183035Z","shell.execute_reply.started":"2024-09-12T23:22:00.177796Z","shell.execute_reply":"2024-09-12T23:22:00.182087Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_dir = r'/kaggle/working/test'","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:22:00.184341Z","iopub.execute_input":"2024-09-12T23:22:00.184757Z","iopub.status.idle":"2024-09-12T23:22:00.197362Z","shell.execute_reply.started":"2024-09-12T23:22:00.184710Z","shell.execute_reply":"2024-09-12T23:22:00.196560Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torchvision import transforms,models,datasets","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:22:00.198344Z","iopub.execute_input":"2024-09-12T23:22:00.198639Z","iopub.status.idle":"2024-09-12T23:22:00.207464Z","shell.execute_reply.started":"2024-09-12T23:22:00.198609Z","shell.execute_reply":"2024-09-12T23:22:00.206654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def transform_image(image):\n    image_path = r'{}'.format(image)\n    custom_image = torchvision.io.read_image(str(image_path)).type(torch.float32)\n    custom_image /= 255\n    custom_trans = transforms.Compose([transforms.Resize((224,224))])\n    custom_image_transformed = custom_trans(custom_image) \n\n    return custom_image_transformed\n\ndef predict_image(image,model):\n    model.eval()\n    with torch.no_grad():\n        custom_pred = model(image.unsqueeze(dim=0).to(device))\n        probs = torch.nn.functional.softmax(custom_pred[0],dim=0)\n        predicted_class = torch.argmax(probs).item()\n    return predicted_class\n\n\n","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:22:00.208732Z","iopub.execute_input":"2024-09-12T23:22:00.209352Z","iopub.status.idle":"2024-09-12T23:22:00.218166Z","shell.execute_reply.started":"2024-09-12T23:22:00.209289Z","shell.execute_reply":"2024-09-12T23:22:00.217323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = []\nimage_names = []\nids = []\nfor image in os.listdir(test_dir):\n    image_path = os.path.join(test_dir,image) #Full path\n    #adding name \n    ids.append(image.split(\".\")[0])\n    image_names.append(image)\n    prediction = predict_image(transform_image(image_path),tl_model2)\n    predictions.append(prediction)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:22:00.219105Z","iopub.execute_input":"2024-09-12T23:22:00.219404Z","iopub.status.idle":"2024-09-12T23:24:12.778541Z","shell.execute_reply.started":"2024-09-12T23:22:00.219369Z","shell.execute_reply":"2024-09-12T23:24:12.777480Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(predictions),len(image_names)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:24:12.779817Z","iopub.execute_input":"2024-09-12T23:24:12.780143Z","iopub.status.idle":"2024-09-12T23:24:12.786353Z","shell.execute_reply.started":"2024-09-12T23:24:12.780108Z","shell.execute_reply":"2024-09-12T23:24:12.785381Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:24:12.787733Z","iopub.execute_input":"2024-09-12T23:24:12.788112Z","iopub.status.idle":"2024-09-12T23:24:12.794876Z","shell.execute_reply.started":"2024-09-12T23:24:12.788055Z","shell.execute_reply":"2024-09-12T23:24:12.794026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.chdir(r'/kaggle/working/')","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:24:12.795908Z","iopub.execute_input":"2024-09-12T23:24:12.796207Z","iopub.status.idle":"2024-09-12T23:24:12.804355Z","shell.execute_reply.started":"2024-09-12T23:24:12.796161Z","shell.execute_reply":"2024-09-12T23:24:12.803491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.DataFrame({\"id\":ids,\"label\":predictions})","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:24:12.805733Z","iopub.execute_input":"2024-09-12T23:24:12.806013Z","iopub.status.idle":"2024-09-12T23:24:12.823532Z","shell.execute_reply.started":"2024-09-12T23:24:12.805982Z","shell.execute_reply":"2024-09-12T23:24:12.822666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2024-09-12T23:24:12.824615Z","iopub.execute_input":"2024-09-12T23:24:12.824948Z","iopub.status.idle":"2024-09-12T23:24:12.855453Z","shell.execute_reply.started":"2024-09-12T23:24:12.824908Z","shell.execute_reply":"2024-09-12T23:24:12.854635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}