Skip to content

Commit 0ea4dfa

Browse files
committed
Added examples and README.md
1 parent 7720193 commit 0ea4dfa

2 files changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
### Examples from "Convolutional Neural Networks using PyTorch"
2+
3+
- examples.py
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import torch
2+
import torch.nn as nn
3+
import torchvision.transforms as transforms
4+
from torch.autograd import Variable
5+
from torchvision.datasets import FashionMNIST
6+
7+
transform = transforms.Compose([transforms.ToTensor(),
8+
transforms.Normalize((0.1307,), (0.3081,))])
9+
train_dataset = FashionMNIST(root='./data',
10+
train=True,
11+
transform=transform,
12+
download=True
13+
)
14+
test_dataset = FashionMNIST(root='./data',
15+
train=False,
16+
transform=transform, )
17+
18+
batch_size = 100
19+
n_iters = 5500
20+
num_epochs = n_iters / (len(train_dataset) / batch_size)
21+
num_epochs = int(num_epochs)
22+
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
23+
batch_size=batch_size,
24+
shuffle=True)
25+
test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
26+
batch_size=batch_size,
27+
shuffle=False)
28+
29+
30+
class CNNModel(nn.Module):
31+
32+
def __init__(self):
33+
super(CNNModel, self).__init__()
34+
self.cnn1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5, stride=1, padding=0)
35+
self.relu1 = nn.ReLU()
36+
self.maxpool1 = nn.MaxPool2d(kernel_size=2)
37+
self.cnn2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=5, stride=1, padding=0)
38+
self.relu2 = nn.ReLU()
39+
self.maxpool2 = nn.MaxPool2d(kernel_size=2)
40+
self.dropout = nn.Dropout(p=0.5)
41+
self.fc1 = nn.Linear(32 * 4 * 4, 10)
42+
43+
def forward(self, x):
44+
out = self.cnn1(x)
45+
out = self.relu1(out)
46+
out = self.maxpool1(out)
47+
out = self.cnn2(out)
48+
out = self.relu2(out)
49+
out = self.maxpool2(out)
50+
out = out.view(out.size(0), -1)
51+
out = self.dropout(out)
52+
out = self.fc1(out)
53+
return out
54+
55+
56+
model = CNNModel()
57+
criterion = nn.CrossEntropyLoss()
58+
learning_rate = 0.001
59+
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
60+
61+
iter = 0
62+
losses = []
63+
for epoch in range(num_epochs):
64+
for i, (images, labels) in enumerate(train_loader):
65+
images = Variable(images)
66+
labels = Variable(labels)
67+
68+
optimizer.zero_grad()
69+
70+
outputs = model(images)
71+
72+
loss = criterion(outputs, labels)
73+
losses.append(loss)
74+
75+
loss.backward()
76+
optimizer.step()
77+
78+
iter += 1
79+
80+
if iter % 500 == 0:
81+
correct = 0
82+
total = 0
83+
84+
for images, labels in test_loader:
85+
images = Variable(images)
86+
87+
outputs = model(images)
88+
89+
_, predicted = torch.max(outputs.data, 1)
90+
total += labels.size(0)
91+
correct += (predicted == labels).sum()
92+
93+
accuracy = 100 * correct / total
94+
print('Iteration: {}. Loss: {}. Accuracy: {}'.format(iter, loss.data, accuracy))

0 commit comments

Comments
 (0)