Skip to content

Commit 67de326

Browse files
authored
Merge branch 'master' into patch-2
2 parents 43f318e + ef9af81 commit 67de326

File tree

5 files changed

+105
-112
lines changed

5 files changed

+105
-112
lines changed

01-Linear Regression/Linear_Regression.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
__author__ = 'SherlockLiao'
1+
# encoding: utf-8
2+
"""
3+
@author: liaoxingyu
4+
@contact: sherlockliao01@gmail.com
5+
"""
26

7+
import matplotlib.pyplot as plt
8+
import numpy as np
39
import torch
4-
from torch import nn, optim
10+
from torch import nn
511
from torch.autograd import Variable
6-
import numpy as np
7-
import matplotlib.pyplot as plt
812

913
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],
1014
[9.779], [6.182], [7.59], [2.167], [7.042],
@@ -21,26 +25,26 @@
2125

2226

2327
# Linear Regression Model
24-
class LinearRegression(nn.Module):
28+
class linearRegression(nn.Module):
2529
def __init__(self):
26-
super(LinearRegression, self).__init__()
30+
super(linearRegression, self).__init__()
2731
self.linear = nn.Linear(1, 1) # input and output is 1 dimension
2832

2933
def forward(self, x):
3034
out = self.linear(x)
3135
return out
3236

3337

34-
model = LinearRegression()
38+
model = linearRegression()
3539
# 定义loss和优化函数
3640
criterion = nn.MSELoss()
37-
optimizer = optim.SGD(model.parameters(), lr=1e-4)
41+
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
3842

3943
# 开始训练
4044
num_epochs = 1000
4145
for epoch in range(num_epochs):
42-
inputs = Variable(x_train)
43-
target = Variable(y_train)
46+
inputs = x_train
47+
target = y_train
4448

4549
# forward
4650
out = model(inputs)
@@ -51,12 +55,14 @@ def forward(self, x):
5155
optimizer.step()
5256

5357
if (epoch+1) % 20 == 0:
54-
print('Epoch[{}/{}], loss: {:.6f}'
55-
.format(epoch+1, num_epochs, loss.data[0]))
58+
print(f'Epoch[{epoch+1}/{num_epochs}], loss: {loss.item():.6f}')
5659

5760
model.eval()
58-
predict = model(Variable(x_train))
61+
with torch.no_grad():
62+
predict = model(x_train)
5963
predict = predict.data.numpy()
64+
65+
fig = plt.figure(figsize=(10, 5))
6066
plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data')
6167
plt.plot(x_train.numpy(), predict, label='Fitting Line')
6268
# 显示图例
Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
1-
__author__ = 'SherlockLiao'
1+
# encoding: utf-8
2+
"""
3+
@author: liaoxingyu
4+
@contact: sherlockliao01@gmail.com
5+
"""
6+
7+
8+
import time
29

310
import torch
4-
from torch import nn, optim
511
import torch.nn.functional as F
6-
from torch.autograd import Variable
12+
from torch import nn
713
from torch.utils.data import DataLoader
8-
from torchvision import transforms
9-
from torchvision import datasets
10-
import time
14+
from torchvision import datasets, transforms
15+
1116
# 定义超参数
12-
batch_size = 32
17+
batch_size = 64
1318
learning_rate = 1e-3
14-
num_epoches = 100
19+
num_epochs = 100
1520

1621
# 下载训练集 MNIST 手写数字训练集
17-
train_dataset = datasets.MNIST(
18-
root='./data', train=True, transform=transforms.ToTensor(), download=True)
22+
train_dataset = datasets.FashionMNIST(
23+
root='../datasets', train=True, transform=transforms.ToTensor(), download=True)
1924

20-
test_dataset = datasets.MNIST(
21-
root='./data', train=False, transform=transforms.ToTensor())
25+
test_dataset = datasets.FashionMNIST(
26+
root='../datasets', train=False, transform=transforms.ToTensor())
2227

2328
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
2429
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
2530

26-
2731
# 定义 Logistic Regression 模型
2832
class Logistic_Regression(nn.Module):
2933
def __init__(self, in_dim, n_class):
@@ -41,65 +45,53 @@ def forward(self, x):
4145
model = model.cuda()
4246
# 定义loss和optimizer
4347
criterion = nn.CrossEntropyLoss()
44-
optimizer = optim.SGD(model.parameters(), lr=learning_rate)
48+
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
4549

4650
# 开始训练
47-
for epoch in range(num_epoches):
51+
for epoch in range(num_epochs):
4852
print('*' * 10)
49-
print('epoch {}'.format(epoch + 1))
53+
print(f'epoch {epoch+1}')
5054
since = time.time()
5155
running_loss = 0.0
5256
running_acc = 0.0
57+
model.train()
5358
for i, data in enumerate(train_loader, 1):
5459
img, label = data
5560
img = img.view(img.size(0), -1) # 将图片展开成 28x28
5661
if use_gpu:
57-
img = Variable(img).cuda()
58-
label = Variable(label).cuda()
59-
else:
60-
img = Variable(img)
61-
label = Variable(label)
62+
img = img.cuda()
63+
label = label.cuda()
6264
# 向前传播
6365
out = model(img)
6466
loss = criterion(out, label)
65-
running_loss += loss.data[0] * label.size(0)
67+
running_loss += loss.item()
6668
_, pred = torch.max(out, 1)
67-
num_correct = (pred == label).sum()
68-
running_acc += num_correct.data[0]
69+
running_acc += (pred==label).float().mean()
6970
# 向后传播
7071
optimizer.zero_grad()
7172
loss.backward()
7273
optimizer.step()
7374

7475
if i % 300 == 0:
75-
print('[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
76-
epoch + 1, num_epoches, running_loss / (batch_size * i),
77-
running_acc / (batch_size * i)))
78-
print('Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
79-
epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
80-
train_dataset))))
76+
print(f'[{epoch+1}/{num_epochs}] Loss: {running_loss/i:.6f}, Acc: {running_acc/i:.6f}')
77+
print(f'Finish {epoch+1} epoch, Loss: {running_loss/i:.6f}, Acc: {running_acc/i:.6f}')
8178
model.eval()
8279
eval_loss = 0.
8380
eval_acc = 0.
8481
for data in test_loader:
8582
img, label = data
8683
img = img.view(img.size(0), -1)
8784
if use_gpu:
88-
img = Variable(img, volatile=True).cuda()
89-
label = Variable(label, volatile=True).cuda()
90-
else:
91-
img = Variable(img, volatile=True)
92-
label = Variable(label, volatile=True)
93-
out = model(img)
94-
loss = criterion(out, label)
95-
eval_loss += loss.data[0] * label.size(0)
85+
img = img.cuda()
86+
label = label.cuda()
87+
with torch.no_grad():
88+
out = model(img)
89+
loss = criterion(out, label)
90+
eval_loss += loss.item()
9691
_, pred = torch.max(out, 1)
97-
num_correct = (pred == label).sum()
98-
eval_acc += num_correct.data[0]
99-
print('Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len(
100-
test_dataset)), eval_acc / (len(test_dataset))))
101-
print('Time:{:.1f} s'.format(time.time() - since))
102-
print()
92+
eval_acc += (pred == label).float().mean()
93+
print(f'Test Loss: {eval_loss/len(test_loader):.6f}, Acc: {eval_acc/len(test_loader):.6f}')
94+
print(f'Time:{(time.time()-since):.1f} s')
10395

10496
# 保存模型
10597
torch.save(model.state_dict(), './logstic.pth')
Lines changed: 45 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,97 @@
1-
__author__ = 'SherlockLiao'
1+
"""
2+
@author: liaoxingyu
3+
@contact: sherlockliao01@gmail.com
4+
"""
25

36
import torch
4-
from torch import nn, optim
5-
6-
from torch.autograd import Variable
7+
from torch import nn
78
from torch.utils.data import DataLoader
8-
from torchvision import transforms
9-
from torchvision import datasets
9+
from torchvision import datasets, transforms
1010

11-
batch_size = 32
11+
batch_size = 64
1212
learning_rate = 1e-2
13-
num_epoches = 50
13+
num_epochs = 50
14+
use_gpu = torch.cuda.is_available()
1415

1516
# 下载训练集 MNIST 手写数字训练集
16-
train_dataset = datasets.MNIST(
17-
root='./data', train=True, transform=transforms.ToTensor(), download=True)
17+
train_dataset = datasets.FashionMNIST(
18+
root='../datasets', train=True, transform=transforms.ToTensor(), download=True)
1819

19-
test_dataset = datasets.MNIST(
20-
root='./data', train=False, transform=transforms.ToTensor())
20+
test_dataset = datasets.FashionMNIST(
21+
root='../datasets', train=False, transform=transforms.ToTensor())
2122

2223
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
2324
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
2425

2526

2627
# 定义简单的前馈神经网络
27-
class Neuralnetwork(nn.Module):
28+
class neuralNetwork(nn.Module):
2829
def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
29-
super(Neuralnetwork, self).__init__()
30-
self.layer1 = nn.Linear(in_dim, n_hidden_1)
31-
self.layer2 = nn.Linear(n_hidden_1, n_hidden_2)
32-
self.layer3 = nn.Linear(n_hidden_2, out_dim)
30+
super(neuralNetwork, self).__init__()
31+
self.layer1 = nn.Sequential(
32+
nn.Linear(in_dim, n_hidden_1),
33+
nn.ReLU(True))
34+
self.layer2 = nn.Sequential(
35+
nn.Linear(n_hidden_1, n_hidden_2),
36+
nn.ReLU(True))
37+
self.layer3 = nn.Sequential(
38+
nn.Linear(n_hidden_2, out_dim),
39+
nn.ReLU(True))
3340

3441
def forward(self, x):
3542
x = self.layer1(x)
3643
x = self.layer2(x)
3744
x = self.layer3(x)
3845
return x
3946

40-
41-
model = Neuralnetwork(28 * 28, 300, 100, 10)
42-
if torch.cuda.is_available():
47+
model = neuralNetwork(28 * 28, 300, 100, 10)
48+
if use_gpu:
4349
model = model.cuda()
4450

4551
criterion = nn.CrossEntropyLoss()
46-
optimizer = optim.SGD(model.parameters(), lr=learning_rate)
52+
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
4753

48-
for epoch in range(num_epoches):
49-
print('epoch {}'.format(epoch + 1))
54+
for epoch in range(num_epochs):
5055
print('*' * 10)
56+
print(f'epoch {epoch+1}')
5157
running_loss = 0.0
5258
running_acc = 0.0
5359
for i, data in enumerate(train_loader, 1):
5460
img, label = data
5561
img = img.view(img.size(0), -1)
56-
if torch.cuda.is_available():
57-
img = Variable(img).cuda()
58-
label = Variable(label).cuda()
59-
else:
60-
img = Variable(img)
61-
label = Variable(label)
62+
if use_gpu:
63+
img = img.cuda()
64+
label = label.cuda()
6265
# 向前传播
6366
out = model(img)
6467
loss = criterion(out, label)
65-
running_loss += loss.data[0] * label.size(0)
68+
running_loss += loss.item()
6669
_, pred = torch.max(out, 1)
67-
num_correct = (pred == label).sum()
68-
running_acc += num_correct.data[0]
70+
running_acc += (pred == label).float().mean()
6971
# 向后传播
7072
optimizer.zero_grad()
7173
loss.backward()
7274
optimizer.step()
7375

7476
if i % 300 == 0:
75-
print('[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
76-
epoch + 1, num_epoches, running_loss / (batch_size * i),
77-
running_acc / (batch_size * i)))
78-
print('Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
79-
epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
80-
train_dataset))))
77+
print(f'[{epoch+1}/{num_epochs}] Loss: {running_loss/i:.6f}, Acc: {running_acc/i:.6f}')
78+
print(f'Finish {epoch+1} epoch, Loss: {running_loss/i:.6f}, Acc: {running_acc/i:.6f}')
8179
model.eval()
8280
eval_loss = 0.
8381
eval_acc = 0.
8482
for data in test_loader:
8583
img, label = data
8684
img = img.view(img.size(0), -1)
87-
if torch.cuda.is_available():
88-
img = Variable(img, volatile=True).cuda()
89-
label = Variable(label, volatile=True).cuda()
90-
else:
91-
img = Variable(img, volatile=True)
92-
label = Variable(label, volatile=True)
93-
out = model(img)
94-
loss = criterion(out, label)
95-
eval_loss += loss.data[0] * label.size(0)
85+
if use_gpu:
86+
img = img.cuda()
87+
label = label.cuda()
88+
with torch.no_grad():
89+
out = model(img)
90+
loss = criterion(out, label)
91+
eval_loss += loss.item()
9692
_, pred = torch.max(out, 1)
97-
num_correct = (pred == label).sum()
98-
eval_acc += num_correct.data[0]
99-
print('Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len(
100-
test_dataset)), eval_acc / (len(test_dataset))))
101-
print()
93+
eval_acc += (pred == label).float().mean()
94+
print(f'Test Loss: {eval_loss/len(test_loader):.6f}, Acc: {eval_acc/len(test_loader):.6f}\n')
10295

10396
# 保存模型
10497
torch.save(model.state_dict(), './neural_network.pth')

08-AutoEncoder/simple_autoencoder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def to_img(x):
2828

2929
img_transform = transforms.Compose([
3030
transforms.ToTensor(),
31-
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
31+
transforms.Normalize([0.5], [0.5])
3232
])
3333

3434
dataset = MNIST('./data', transform=img_transform)

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# pytorch-beginner
2-
toy code for pytorch beginner
2+
Toy project for pytorch beginner with simplest code.
33

4-
**Welcome to visit this [site](https://github.com/SherlockLiao/code-of-learn-deep-learning-with-pytorch) to get more detailed chinese pytorch tutorial.**
4+
## Requirements
5+
python 3.7
6+
pytorch 1.0.0+

0 commit comments

Comments
 (0)