13
13
num_epoches = 50
14
14
15
15
# 下载训练集 MNIST 手写数字训练集
16
- train_dataset = datasets .MNIST (root = './data' , train = True ,
17
- transform = transforms .ToTensor (),
18
- download = True )
16
+ train_dataset = datasets .MNIST (
17
+ root = './data' , train = True , transform = transforms .ToTensor (), download = True )
19
18
20
- test_dataset = datasets .MNIST (root = './data' , train = False ,
21
- transform = transforms .ToTensor ())
19
+ test_dataset = datasets .MNIST (
20
+ root = './data' , train = False , transform = transforms .ToTensor ())
22
21
23
- train_loader = DataLoader (train_dataset , batch_size = batch_size ,
24
- shuffle = True )
25
- test_loader = DataLoader (test_dataset , batch_size = batch_size ,
26
- shuffle = False )
22
+ train_loader = DataLoader (train_dataset , batch_size = batch_size , shuffle = True )
23
+ test_loader = DataLoader (test_dataset , batch_size = batch_size , shuffle = False )
27
24
28
25
29
26
# 定义简单的前馈神经网络
@@ -41,16 +38,16 @@ def forward(self, x):
41
38
return x
42
39
43
40
44
- model = Neuralnetwork (28 * 28 , 300 , 100 , 10 )
41
+ model = Neuralnetwork (28 * 28 , 300 , 100 , 10 )
45
42
if torch .cuda .is_available ():
46
43
model = model .cuda ()
47
44
48
45
criterion = nn .CrossEntropyLoss ()
49
46
optimizer = optim .SGD (model .parameters (), lr = learning_rate )
50
47
51
48
for epoch in range (num_epoches ):
52
- print ('epoch {}' .format (epoch + 1 ))
53
- print ('*' * 10 )
49
+ print ('epoch {}' .format (epoch + 1 ))
50
+ print ('*' * 10 )
54
51
running_loss = 0.0
55
52
running_acc = 0.0
56
53
for i , data in enumerate (train_loader , 1 ):
@@ -76,18 +73,14 @@ def forward(self, x):
76
73
77
74
if i % 300 == 0 :
78
75
print ('[{}/{}] Loss: {:.6f}, Acc: {:.6f}' .format (
79
- epoch + 1 , num_epoches ,
80
- running_loss / (batch_size * i ),
81
- running_acc / (batch_size * i )
82
- ))
76
+ epoch + 1 , num_epoches , running_loss / (batch_size * i ),
77
+ running_acc / (batch_size * i )))
83
78
print ('Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}' .format (
84
- epoch + 1 ,
85
- running_loss / (len (train_dataset )),
86
- running_acc / (len (train_dataset ))
87
- ))
79
+ epoch + 1 , running_loss / (len (train_dataset )), running_acc / (len (
80
+ train_dataset ))))
88
81
model .eval ()
89
- eval_loss = 0
90
- eval_acc = 0
82
+ eval_loss = 0.
83
+ eval_acc = 0.
91
84
for data in test_loader :
92
85
img , label = data
93
86
img = img .view (img .size (0 ), - 1 )
@@ -99,14 +92,12 @@ def forward(self, x):
99
92
label = Variable (label , volatile = True )
100
93
out = model (img )
101
94
loss = criterion (out , label )
102
- eval_loss += loss .data [0 ]* label .size (0 )
95
+ eval_loss += loss .data [0 ] * label .size (0 )
103
96
_ , pred = torch .max (out , 1 )
104
97
num_correct = (pred == label ).sum ()
105
98
eval_acc += num_correct .data [0 ]
106
- print ('Test Loss: {:.6f}, Acc: {:.6f}' .format (
107
- eval_loss / (len (test_dataset )),
108
- eval_acc / (len (test_dataset ))
109
- ))
99
+ print ('Test Loss: {:.6f}, Acc: {:.6f}' .format (eval_loss / (len (
100
+ test_dataset )), eval_acc / (len (test_dataset ))))
110
101
print ()
111
102
112
103
# 保存模型
0 commit comments