Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
deeplearningzerotoall
GitHub Repository: deeplearningzerotoall/PyTorch
Path: blob/master/CNN/lab-07-4-mnist_introduction.py
618 views
1
# Lab 7 Learning rate and Evaluation
2
import torch
3
import torchvision.datasets as dsets
4
import torchvision.transforms as transforms
5
import matplotlib.pyplot as plt
6
import random
7
8
device = 'cuda' if torch.cuda.is_available() else 'cpu'
9
10
# for reproducibility
11
random.seed(777)
12
torch.manual_seed(777)
13
if device == 'cuda':
14
torch.cuda.manual_seed_all(777)
15
16
# parameters
17
training_epochs = 15
18
batch_size = 100
19
20
# MNIST dataset
21
mnist_train = dsets.MNIST(root='MNIST_data/',
22
train=True,
23
transform=transforms.ToTensor(),
24
download=True)
25
26
mnist_test = dsets.MNIST(root='MNIST_data/',
27
train=False,
28
transform=transforms.ToTensor(),
29
download=True)
30
31
# dataset loader
32
data_loader = torch.utils.data.DataLoader(dataset=mnist_train,
33
batch_size=batch_size,
34
shuffle=True,
35
drop_last=True)
36
37
# MNIST data image of shape 28 * 28 = 784
38
linear = torch.nn.Linear(784, 10, bias=True).to(device)
39
40
# define cost/loss & optimizer
41
criterion = torch.nn.CrossEntropyLoss().to(device) # Softmax is internally computed.
42
optimizer = torch.optim.SGD(linear.parameters(), lr=0.1)
43
44
for epoch in range(training_epochs):
45
avg_cost = 0
46
total_batch = len(data_loader)
47
48
for X, Y in data_loader:
49
# reshape input image into [batch_size by 784]
50
# label is not one-hot encoded
51
X = X.view(-1, 28 * 28).to(device)
52
Y = Y.to(device)
53
54
optimizer.zero_grad()
55
hypothesis = linear(X)
56
cost = criterion(hypothesis, Y)
57
cost.backward()
58
optimizer.step()
59
60
avg_cost += cost / total_batch
61
62
print('Epoch:', '%04d' % (epoch + 1), 'cost =', '{:.9f}'.format(avg_cost))
63
64
print('Learning finished')
65
66
# Test the model using test sets
67
with torch.no_grad():
68
X_test = mnist_test.test_data.view(-1, 28 * 28).float().to(device)
69
Y_test = mnist_test.test_labels.to(device)
70
71
prediction = linear(X_test)
72
correct_prediction = torch.argmax(prediction, 1) == Y_test
73
accuracy = correct_prediction.float().mean()
74
print('Accuracy:', accuracy.item())
75
76
# Get one and predict
77
r = random.randint(0, len(mnist_test) - 1)
78
X_single_data = mnist_test.test_data[r:r + 1].view(-1, 28 * 28).float().to(device)
79
Y_single_data = mnist_test.test_labels[r:r + 1].to(device)
80
81
print('Label: ', Y_single_data.item())
82
single_prediction = linear(X_single_data)
83
print('Prediction: ', torch.argmax(single_prediction, 1).item())
84
85
plt.imshow(mnist_test.test_data[r:r + 1].view(28, 28), cmap='Greys', interpolation='nearest')
86
plt.show()
87
88