预处理
1.ImageFolder读取时需要补零
ImageFolder 读取顺序之坑 – 柴犬的犬舍 (doge.ac.cn)
2.通道转换用transpose,而不是reshape(我是傻逼)
np.reshape()和np.transpose() – 柴犬的犬舍 (doge.ac.cn)
3.pytorch ToTensor对部署的影响
transforms.ToTensor()操作之后,图像会从[0, 255] -> [0.0,1.0]
部署时需要
image /= 255.0
训练
1.train,eval 调整
pytorch之坑:model.eval与model.train – 柴犬的犬舍 (doge.ac.cn)
2.scheduler.step() optimizer.step() 位置写错
这里可以用tensorboard实时监控学习率解决,防止写错位置学习率骤降
tensorboard使用 – 柴犬的犬舍 (doge.ac.cn)
3.忘记optimizer.zero_grad()
模型保存
1.save和load方法要对应
尽量直接save model,而不是model.state_dict(),这样方便恢复训练
torch.save(model, model_path)
model = torch.load(model_path)
model.eval()
torch.save(model.state_dict(), PATH)
model.load_state_dict(torch.load(PATH))
model.eval()
最终的解决方法
1.训练时用tensorboard监控学习率,处理图像时把预处理结束的图像放在tensorboard上。
2.如果模型不拟合,先用最少的样本测试模型能不能过拟合,测试整个流程有没有出问题。