1
1
# original coder : https://github.com/D-X-Y/ResNeXt-DenseNet
2
- # added simpnet model
2
+ # added simplenet model
3
3
from __future__ import division
4
4
5
5
import os , sys , pdb , shutil , time , random , datetime
11
11
import torchvision .transforms as transforms
12
12
from utils import AverageMeter , RecorderMeter , time_string , convert_secs2time
13
13
import models
14
- from tensorboardX import SummaryWriter
14
+ from torch . utils . tensorboard import SummaryWriter
15
15
16
16
model_names = sorted (name for name in models .__dict__
17
17
if name .islower () and not name .startswith ("__" )
21
21
parser = argparse .ArgumentParser (description = 'Trains ResNeXt on CIFAR or ImageNet' , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
22
22
parser .add_argument ('data_path' , type = str , help = 'Path to dataset' )
23
23
parser .add_argument ('--dataset' , type = str , choices = ['cifar10' , 'cifar100' , 'imagenet' , 'svhn' , 'stl10' ], help = 'Choose between Cifar10/100 and ImageNet.' )
24
- parser .add_argument ('--arch' , metavar = 'ARCH' , default = 'resnet18 ' , choices = model_names , help = 'model architecture: ' + ' | ' .join (model_names ) + ' (default: resnext29_8_64)' )
24
+ parser .add_argument ('--arch' , metavar = 'ARCH' , default = 'simplenet_cifar_5m ' , choices = model_names , help = 'model architecture: ' + ' | ' .join (model_names ) + ' (default: resnext29_8_64)' )
25
25
# Optimization options
26
26
parser .add_argument ('--epochs' , type = int , default = 700 , help = 'Number of epochs to train.' )
27
27
parser .add_argument ('--batch_size' , type = int , default = 64 , help = 'Batch size.' )
@@ -93,7 +93,6 @@ def main():
93
93
94
94
writer = SummaryWriter ()
95
95
96
-
97
96
# # Data transforms
98
97
# mean = [0.5071, 0.4867, 0.4408]
99
98
# std = [0.2675, 0.2565, 0.2761]
@@ -129,7 +128,7 @@ def main():
129
128
130
129
print_log ("=> creating model '{}'" .format (args .arch ), log )
131
130
# Init model, criterion, and optimizer
132
- net = models .__dict__ [args .arch ](num_classes )
131
+ net = models .__dict__ [args .arch ](num_classes = num_classes )
133
132
#torch.save(net, 'net.pth')
134
133
#init_net = torch.load('net.pth')
135
134
#net.load_my_state_dict(init_net.state_dict())
@@ -187,14 +186,9 @@ def main():
187
186
188
187
for epoch in range (args .start_epoch , args .epochs ):
189
188
#current_learning_rate = adjust_learning_rate(optimizer, epoch, args.gammas, args.schedule)
190
- current_learning_rate = float (scheduler .get_lr ()[- 1 ])
191
- #print('lr:',current_learning_rate)
192
-
193
- scheduler .step ()
194
-
195
- #adjust_learning_rate(optimizer, epoch)
196
-
197
-
189
+ current_learning_rate = float (scheduler .get_last_lr ()[- 1 ])
190
+ # print('lr:',current_learning_rate)
191
+
198
192
need_hour , need_mins , need_secs = convert_secs2time (epoch_time .avg * (args .epochs - epoch ))
199
193
need_time = '[Need: {:02d}:{:02d}:{:02d}]' .format (need_hour , need_mins , need_secs )
200
194
@@ -204,6 +198,9 @@ def main():
204
198
# train for one epoch
205
199
train_acc , train_los = train (train_loader , net , criterion , optimizer , epoch , log )
206
200
201
+ scheduler .step ()
202
+ #adjust_learning_rate(optimizer, epoch)
203
+
207
204
# evaluate on validation set
208
205
#val_acc, val_los = extract_features(test_loader, net, criterion, log)
209
206
val_acc , val_los = validate (test_loader , net , criterion , log )
@@ -250,7 +247,7 @@ def train(train_loader, model, criterion, optimizer, epoch, log):
250
247
data_time .update (time .time () - end )
251
248
252
249
if args .use_cuda :
253
- target = target .cuda (async = True )
250
+ target = target .cuda ()
254
251
input = input .cuda ()
255
252
input_var = torch .autograd .Variable (input )
256
253
target_var = torch .autograd .Variable (target )
@@ -261,9 +258,9 @@ def train(train_loader, model, criterion, optimizer, epoch, log):
261
258
262
259
# measure accuracy and record loss
263
260
prec1 , prec5 = accuracy (output .data , target , topk = (1 , 5 ))
264
- losses .update (loss .data [ 0 ] , input .size (0 ))
265
- top1 .update (prec1 [ 0 ] , input .size (0 ))
266
- top5 .update (prec5 [ 0 ] , input .size (0 ))
261
+ losses .update (loss .item () , input .size (0 ))
262
+ top1 .update (prec1 . item () , input .size (0 ))
263
+ top5 .update (prec5 . item () , input .size (0 ))
267
264
268
265
# compute gradient and do SGD step
269
266
optimizer .zero_grad ()
@@ -293,23 +290,21 @@ def validate(val_loader, model, criterion, log):
293
290
294
291
# switch to evaluate mode
295
292
model .eval ()
296
-
297
- for i , (input , target ) in enumerate (val_loader ):
298
- if args .use_cuda :
299
- target = target .cuda (async = True )
300
- input = input .cuda ()
301
- input_var = torch .autograd .Variable (input , volatile = True )
302
- target_var = torch .autograd .Variable (target , volatile = True )
303
-
304
- # compute output
305
- output = model (input_var )
306
- loss = criterion (output , target_var )
307
-
308
- # measure accuracy and record loss
309
- prec1 , prec5 = accuracy (output .data , target , topk = (1 , 5 ))
310
- losses .update (loss .data [0 ], input .size (0 ))
311
- top1 .update (prec1 [0 ], input .size (0 ))
312
- top5 .update (prec5 [0 ], input .size (0 ))
293
+ with torch .no_grad ():
294
+ for i , (input , target ) in enumerate (val_loader ):
295
+ if args .use_cuda :
296
+ target = target .cuda ()
297
+ input = input .cuda ()
298
+
299
+ # compute output
300
+ output = model (input )
301
+ loss = criterion (output , target )
302
+
303
+ # measure accuracy and record loss
304
+ prec1 , prec5 = accuracy (output .data , target , topk = (1 , 5 ))
305
+ losses .update (loss .data .item (), input .size (0 ))
306
+ top1 .update (prec1 .item (), input .size (0 ))
307
+ top5 .update (prec5 .item (), input .size (0 ))
313
308
314
309
print_log (' **Test** Prec@1 {top1.avg:.3f} Prec@5 {top5.avg:.3f} Error@1 {error1:.3f}' .format (top1 = top1 , top5 = top5 , error1 = 100 - top1 .avg ), log )
315
310
@@ -322,26 +317,24 @@ def extract_features(val_loader, model, criterion, log):
322
317
323
318
# switch to evaluate mode
324
319
model .eval ()
320
+ with torch .no_grad ():
321
+ for i , (input , target ) in enumerate (val_loader ):
322
+ if args .use_cuda :
323
+ target = target .cuda ()
324
+ input = input .cuda ()
325
325
326
- for i , (input , target ) in enumerate (val_loader ):
327
- if args .use_cuda :
328
- target = target .cuda (async = True )
329
- input = input .cuda ()
330
- input_var = torch .autograd .Variable (input , volatile = True )
331
- target_var = torch .autograd .Variable (target , volatile = True )
332
-
333
- # compute output
334
- output , features = model ([input_var ])
326
+ # compute output
327
+ output , features = model ([input ])
335
328
336
- pdb .set_trace ()
329
+ pdb .set_trace ()
337
330
338
- loss = criterion (output , target_var )
331
+ loss = criterion (output , target )
339
332
340
- # measure accuracy and record loss
341
- prec1 , prec5 = accuracy (output .data , target , topk = (1 , 5 ))
342
- losses .update (loss .data [ 0 ] , input .size (0 ))
343
- top1 .update (prec1 [ 0 ] , input .size (0 ))
344
- top5 .update (prec5 [ 0 ] , input .size (0 ))
333
+ # measure accuracy and record loss
334
+ prec1 , prec5 = accuracy (output .data , target , topk = (1 , 5 ))
335
+ losses .update (loss .data . item () , input .size (0 ))
336
+ top1 .update (prec1 . item () , input .size (0 ))
337
+ top5 .update (prec5 . item () , input .size (0 ))
345
338
346
339
print_log (' **Test** Prec@1 {top1.avg:.3f} Prec@5 {top5.avg:.3f} Error@1 {error1:.3f}' .format (top1 = top1 , top5 = top5 , error1 = 100 - top1 .avg ), log )
347
340
@@ -389,11 +382,11 @@ def accuracy(output, target, topk=(1,)):
389
382
390
383
_ , pred = output .topk (maxk , 1 , True , True )
391
384
pred = pred .t ()
392
- correct = pred .eq (target .view (1 , - 1 ).expand_as (pred ))
385
+ correct = pred .eq (target .reshape (1 , - 1 ).expand_as (pred ))
393
386
394
387
res = []
395
388
for k in topk :
396
- correct_k = correct [:k ].view (- 1 ).float ().sum (0 )
389
+ correct_k = correct [:k ].reshape (- 1 ).float ().sum (0 )
397
390
res .append (correct_k .mul_ (100.0 / batch_size ))
398
391
return res
399
392
0 commit comments