Mobilenetv2_第一版
第一版只是简单的实现了 Mobilenetv2 的结构,代码有些冗余,而且有许多需要改进的地方
1 | import torch |
tky看完后说:
1.写个validate函数吧,用test_dataloader测,记得开with torch.no_grad(): 和model.eval(),val集上的acc只比train集低一点就差不多成功了
2.用matplotlib把训练过程每个batch的acc和loss画出来
3.试一下把adam换成带momentum、带nestrov的sgd,并且调一个合适的学习率(lr)
4.可以用cosannealing这个scheduler套住optimizer
5.试一下把CEloss加上label smooth
6.再练一下torch保存和加载模型:torch.save和torch.load 一般格式是torch.save(model.state_dict(), ‘ckpt.pth.tar’)
好像是model.load .pth.tar是常用后缀名 model.state_dict()返回一个字典,表示模型里面的各种东西,包括网络结构和参数张量
PS:
scheduler是学习率的调整器,是套在optimizer外面的一层壳,可以随着训练过程调整lr
常用的sche有cos的、指数decay的、多段式decay的
比如batchsize64,假设trainset有50000张照片,并且定义dataloader的时候drop_last参数是False,那么每个epoch有 上取整(50000 // 64) 即782个batch,比如你训10个epoch,那么总的batch数是7820
所以在定义scheduler的时候传参最大迭代次数就是7820,然后每得到一个batch的时候就让scheduler.step(),这样刚好可以step()7820次,每次step函数都会让学习率变化一点点
tky orz