猫狗二分类-pytorch练习项目
这个练习项目来自:西西嘛呦 - 博客园 (cnblogs.com)
https://www.cnblogs.com/xiximayou/category/1665574.html
感觉这个博主写了挺多有意思的项目的~代码风格我也很喜欢。对于我这样一个刚刚开始入门深度学习和pytorch的新手真的是帮助很大了。
分享一下我整理的【猫狗数据集】使用学习率衰减策略并边训练边测试 - 西西嘛呦 - 博客园 (cnblogs.com)这个博客里的代码,包含了数据集(训练、测试、验证),直接放在D盘根目录下不用修改路径就能运行了。运行在D:/mycode/dogs-vs-cats/train/路径下的main.py。
链接:https://pan.baidu.com/s/1KnhRiaEGhvkL0tzjFnp9Ug
提取码:zx9t
关键代码:
model =torchvision.models.resnet18(pretrained=False)
model.fc = nn.Linear(model.fc.in_features,2,bias=False)
使用imagenet上训练好的resnet模型。因为imagenet是1000类,此时猫狗分类是2类,所以要训练最后一个输出头改成2类。
torchvision.models中提供了很多现成的网络架构如下:
import torchvision.models as models resnet18 = models.resnet18() alexnet = models.alexnet() vgg16 = models.vgg16() squeezenet = models.squeezenet1_0() densenet = models.densenet161() inception = models.inception_v3() googlenet = models.googlenet() shufflenet = models.shufflenet_v2_x1_0() mobilenet = models.mobilenet_v2() resnext50_32x4d = models.resnext50_32x4d() wide_resnet50_2 = models.wide_resnet50_2() mnasnet = models.mnasnet1_0()
相较原作者的修改有DataLoader中的num_workers。我电脑上运行只能让num_workers=0,即只能单线程处理,否则会报错。(也许是我的gpu太差?)
train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True, num_workers=0)
还有跟好兄弟hh讨论后得知自己电脑跑batch_size不要超过64……不然很容易跑崩。他推荐我用32。在main.py中修改batch_size即可。
batch_size=128
原作者学习率衰减之后还有:
利用tensorboard可视化训练和测试过程 :用进度条可视化训练进度
【猫狗数据集】从命令行接收参数 :用到arg
Top-1 Accuracy和Top-5 Accuracy:
我们知道ImageNet有大概1000个分类,而模型预测某张图片时,会给出1000个按概率从高到低的类别排名,
所谓的Top-1 Accuracy是指排名第一的类别与实际结果相符的准确率,而Top-5 Accuracy是指排名前五的类别包含实际结果的准确率。
使用预训练的resnet18模型 :即linear probe方法。冻住骨干网络,只训练某些层。
计算数据集的平均值和方差 :平均值和方差用于预处理中的归一化
读取数据集的第二种方式 :之前使用DataLoader
对一张张图像进行预测(而不是测试集)可视化resnet18的输出 :学习使用模型进行预测了
可视化resnet18的输出 :看看每一层处理图片后是什么样子
想学习的话再我分享的代码上继续修改即可。但是我没有细看了。(先码住,以后需要用继续看)