neelimapreeti297 commited on
Commit
0768d0a
·
verified ·
1 Parent(s): e56454b

Upload main.py

Browse files
Files changed (1) hide show
  1. main.py +96 -0
main.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """main.ipynb
3
+
4
+ Automatically generated by Colab.
5
+
6
+ Original file is located at
7
+ https://colab.research.google.com/#fileId=https%3A//huggingface.co/spaces/neelimapreeti297/panda_cat_dog_classification/blob/main/main.ipynb
8
+ """
9
+
10
+ #import libraries
11
+ import torch
12
+ from torchvision import datasets, transforms
13
+ import torch.nn as nn
14
+ import torch.optim as optim
15
+ from torch.utils.data import DataLoader
16
+ from torchvision.datasets import ImageFolder
17
+
18
+ #define the data transforms
19
+
20
+ transform = transforms.Compose([
21
+ transforms.Resize((224,224)),
22
+ transforms.ToTensor(),
23
+ transforms.Normalize((0.485,0.456,0.406),(0.229,0.224,0.225))
24
+ ])
25
+
26
+ #insert the datasets
27
+
28
+ train_dataset = ImageFolder('./data/train', transform=transform)
29
+ test_dataset =ImageFolder('./data/test', transform=transform)
30
+
31
+ # make cnn model
32
+
33
+ class CNN(nn.Module):
34
+ def __init__(self):
35
+ super(CNN, self).__init__()
36
+ self.conv1 = nn.Conv2d(3, 6, 5)
37
+ self.conv2 = nn.Conv2d(6, 16, 5)
38
+ self.pool = nn.MaxPool2d(2, 2)
39
+ self.fc1 = nn.Linear(16 * 53 * 53, 120)
40
+ self.fc2 = nn.Linear(120, 84)
41
+ self.fc3 = nn.Linear(84, 3)
42
+
43
+ def forward(self, x):
44
+ x = self.conv1(x)
45
+ x = self.pool(x)
46
+ x = self.conv2(x)
47
+ x = self.pool(x)
48
+ x = x.view(-1, 16 * 53 * 53)
49
+ x = self.fc1(x)
50
+ x = self.fc2(x)
51
+ x = self.fc3(x)
52
+ return x
53
+
54
+ batch_size = 8
55
+
56
+ train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
57
+ test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=True)
58
+
59
+ model = CNN()
60
+ loss_function = nn.CrossEntropyLoss()
61
+ optimizer = optim.Adam(model.parameters(), lr=0.001)
62
+
63
+ #Train the model
64
+
65
+ for epoch in range(10):
66
+ for i, (images, labels) in enumerate(train_loader):
67
+
68
+ outputs = model(images)
69
+
70
+ loss = loss_function(outputs, labels)
71
+
72
+ optimizer.zero_grad()
73
+ loss.backward()
74
+ optimizer.step()
75
+
76
+ if i % 200 == 0:
77
+ print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch + 1, 10, i + 1, len(train_loader), loss.item()))
78
+
79
+ #iterate over the test data
80
+
81
+ correct = 0
82
+ total = 0
83
+ for i, (images, labels) in enumerate(test_loader):
84
+ outputs = model(images)
85
+
86
+ _, predicted = torch.max(outputs.data, 1)
87
+ correct += (predicted == labels).sum().item()
88
+ total += labels.size(0)
89
+
90
+ #calculate the accuracy
91
+ accuracy = 100 * correct / total
92
+ print('Accuracy: {}%' .format(accuracy))
93
+
94
+ model_scripted = torch.jit.script(model)
95
+ model_scripted.save('./models/cat_dog_cnn.pt')
96
+