{"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":"none","dataSources":[{"sourceId":13836,"databundleVersionId":1718836,"sourceType":"competition"}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"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","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torchvision\nfrom torch.utils.data import Dataset,DataLoader\nimport os\nimport torch.optim as optim\nfrom torchvision import transforms\nimport torchvision.transforms as transforms\nfrom torchvision import datasets","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T11:19:37.493869Z","iopub.execute_input":"2025-07-24T11:19:37.494258Z","iopub.status.idle":"2025-07-24T11:19:37.499351Z","shell.execute_reply.started":"2025-07-24T11:19:37.494232Z","shell.execute_reply":"2025-07-24T11:19:37.498296Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"transform=transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T11:19:37.888086Z","iopub.execute_input":"2025-07-24T11:19:37.888365Z","iopub.status.idle":"2025-07-24T11:19:37.893573Z","shell.execute_reply.started":"2025-07-24T11:19:37.888345Z","shell.execute_reply":"2025-07-24T11:19:37.89243Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\ndf=pd.read_csv(\"/kaggle/input/cassava-leaf-disease-classification/train.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T11:43:48.473616Z","iopub.execute_input":"2025-07-24T11:43:48.474623Z","iopub.status.idle":"2025-07-24T11:43:49.174569Z","shell.execute_reply.started":"2025-07-24T11:43:48.474582Z","shell.execute_reply":"2025-07-24T11:43:49.173368Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df.min()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T11:50:07.32272Z","iopub.execute_input":"2025-07-24T11:50:07.323214Z","iopub.status.idle":"2025-07-24T11:50:07.334486Z","shell.execute_reply.started":"2025-07-24T11:50:07.323175Z","shell.execute_reply":"2025-07-24T11:50:07.333482Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image\nclass CassavaDataSet(Dataset):\n    def __init__(self,data,images,transform=transform):\n        self.data=data\n        self.images=images\n        self.transform=transform\n    def __len__(self):\n        return len(self.data)\n    def __getitem__(self,i):\n        image_name=self.data.iloc[i][\"image_id\"]\n        label_name=self.data.iloc[i][\"label\"]\n        img_path=os.path.join(self.images,image_name)\n        image=Image.open(img_path).convert(\"RGB\")\n        if self.transform:\n            image=self.transform(image)\n        return image,label","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T11:42:31.268062Z","iopub.execute_input":"2025-07-24T11:42:31.2685Z","iopub.status.idle":"2025-07-24T11:42:31.275752Z","shell.execute_reply.started":"2025-07-24T11:42:31.268465Z","shell.execute_reply":"2025-07-24T11:42:31.274777Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"x_train1=CassavaDataSet(df,\"/kaggle/input/cassava-leaf-disease-classification/train_images\",transform=transform)\nx_train2=DataLoader(x_train,shuffle=True,batch_size=64)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:09:50.912933Z","iopub.execute_input":"2025-07-24T12:09:50.913805Z","iopub.status.idle":"2025-07-24T12:09:50.918665Z","shell.execute_reply.started":"2025-07-24T12:09:50.913768Z","shell.execute_reply":"2025-07-24T12:09:50.917665Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class CassavaCNN(nn.Module):\n    def __init__(self):\n        super(CassavaCNN,self).__init__()\n        self.conv1=nn.Conv2d(3,32,kernel_size=3,stride=2,padding=1)\n        self.pool1=nn.MaxPool2d(2,2)\n        self.conv2=nn.Conv2d(32,64,kernel_size=3,stride=2,padding=1)\n        self.pool2=nn.MaxPool2d(2,2)\n        self.linear1=nn.Linear(64*50*37,128)\n        self.linear2=nn.Linear(128,5)\n\n    def forward(self,x):\n        x=self.pool1(nn.ReLU(self.conv1(x)))\n        x=self.pool2(nn.ReLU(self.conv2(x)))\n        x=x.view(x.size(0),-1)\n        x=nn.ReLU(self.linear1(x))\n        x=self.linear2(x)\n        return x","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:01:03.313482Z","iopub.execute_input":"2025-07-24T12:01:03.313769Z","iopub.status.idle":"2025-07-24T12:01:03.320717Z","shell.execute_reply.started":"2025-07-24T12:01:03.313749Z","shell.execute_reply":"2025-07-24T12:01:03.319765Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model=CassavaCNN()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:01:05.400334Z","iopub.execute_input":"2025-07-24T12:01:05.400614Z","iopub.status.idle":"2025-07-24T12:01:05.55557Z","shell.execute_reply.started":"2025-07-24T12:01:05.400594Z","shell.execute_reply":"2025-07-24T12:01:05.554711Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"criterion=nn.CrossEntropyLoss()\noptimizer=optim.Adam(model.parameters(),lr=0.001)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:02:18.731125Z","iopub.execute_input":"2025-07-24T12:02:18.731493Z","iopub.status.idle":"2025-07-24T12:02:18.737445Z","shell.execute_reply.started":"2025-07-24T12:02:18.731464Z","shell.execute_reply":"2025-07-24T12:02:18.736329Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train(model, x_train, criterion, optimizer):\n    model.train()  # Eğitim moduna al\n    running_loss = 0.0\n\n    for images in x_train:\n        optimizer.zero_grad()\n        outputs = model(images)             # images zaten CPU'da\n        loss = criterion(outputs)\n        loss.backward()\n        optimizer.step()\n\n        running_loss += loss.item() * images.size(0)\n\n    epoch_loss = running_loss / len(x_train.dataset)\n    return epoch_loss\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:09:26.034967Z","iopub.execute_input":"2025-07-24T12:09:26.035344Z","iopub.status.idle":"2025-07-24T12:09:26.041737Z","shell.execute_reply.started":"2025-07-24T12:09:26.035315Z","shell.execute_reply":"2025-07-24T12:09:26.040796Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for epoch in range(5):\n    loss = train(model, x_train, criterion, optimizer)\n    print(f\"Epoch {epoch+1}, Loss: {loss:.4f}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:09:26.485908Z","iopub.execute_input":"2025-07-24T12:09:26.486265Z","iopub.status.idle":"2025-07-24T12:09:26.547075Z","shell.execute_reply.started":"2025-07-24T12:09:26.486239Z","shell.execute_reply":"2025-07-24T12:09:26.545549Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport torch.nn.functional as F\nfrom torch.utils.data import DataLoader, Dataset\nfrom torchvision import transforms\nimport pandas as pd\nfrom PIL import Image\nimport os\n\n# Transform\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))\n])\n\n# Dataset\ndf = pd.read_csv(\"/kaggle/input/cassava-leaf-disease-classification/train.csv\")\n\nclass CassavaDataSet(Dataset):\n    def __init__(self, data, images, transform=None):\n        self.data = data\n        self.images = images\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        image_name = self.data.iloc[idx][\"image_id\"]\n        label = self.data.iloc[idx][\"label\"]\n        img_path = os.path.join(self.images, image_name)\n        image = Image.open(img_path).convert(\"RGB\")\n        if self.transform:\n            image = self.transform(image)\n        return image, label\n\n# Dataset ve DataLoader oluştur\ntrain_dataset = CassavaDataSet(df, \"/kaggle/input/cassava-leaf-disease-classification/train_images\", transform=transform)\ntrain_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n\n# Model\nclass CassavaCNN(nn.Module):\n    def __init__(self):\n        super(CassavaCNN, self).__init__()\n        self.conv1 = nn.Conv2d(3,32,kernel_size=3,stride=2,padding=1)\n        self.pool1 = nn.MaxPool2d(2,2)\n        self.conv2 = nn.Conv2d(32,64,kernel_size=3,stride=2,padding=1)\n        self.pool2 = nn.MaxPool2d(2,2)\n        self.linear1 = nn.Linear(64*50*37,128)  # Bu boyutu kontrol et, gerekirse değiştir\n        self.linear2 = nn.Linear(128,5)\n\n    def forward(self, x):\n        x = self.pool1(F.relu(self.conv1(x)))\n        x = self.pool2(F.relu(self.conv2(x)))\n        x = x.view(x.size(0), -1)\n        x = F.relu(self.linear1(x))\n        x = self.linear2(x)\n        return x\n\nmodel = CassavaCNN()\n\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n# Eğitim fonksiyonu\ndef train(model, dataloader, criterion, optimizer):\n    model.train()\n    running_loss = 0.0\n\n    for images, labels in dataloader:\n        optimizer.zero_grad()\n        outputs = model(images)\n        loss = criterion(outputs, labels)\n        loss.backward()\n        optimizer.step()\n\n        running_loss += loss.item() * images.size(0)\n\n    epoch_loss = running_loss / len(dataloader.dataset)\n    return epoch_loss\n\n# Eğitim döngüsü\nfor epoch in range(5):\n    loss = train(model, train_loader, criterion, optimizer)\n    print(f\"Epoch {epoch+1}, Loss: {loss:.4f}\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-07-24T12:14:14.505082Z","iopub.execute_input":"2025-07-24T12:14:14.505462Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}