【代码阅读】vit做猫狗分类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【代码阅读】vit做猫狗分类相关的知识,希望对你有一定的参考价值。

参考技术A exists:是否在目录存在时触发异常。
如果exist_ok为False(默认值),则在目标目录已存在的情况下触发FileExistsError异常;
如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。
这里设置为true,表示目录存在的时候不触发异常,这样就不用检查目录是否存在

表示把train.zip解压到data目录下。

搜索文件的方式

利用了sklearn

函数sklearn.model_selection.train_test_split 用法
在使用python做机械学习时候,为了制作训练数据(training samples)和测试数据(testing samples),常使用sklearn里面的sklearn.model_selection.train_test_split模块。
train_test_split的使用方法:sklearn.model_selection.train_test_split(*arrays, **options)
train_test_split里面常用的因数(arguments)介绍:
arrays:分割对象同样长度的列表或者numpy arrays,矩阵。
test_size:两种指定方法。1:指定小数。小数范围在0.0~0.1之间,它代表test集占据的比例。2:指定整数。整数的大小必须在这个数据集个数范围内,总不能指定一个数超出了数据集的个数范围吧。要是test_size在没有指定的场合,可以通过train_size来指定。(两个是对应关系)。如果train_size也没有指定,那么默认值是0.25.
train_size:和test_size相似。
random_state:这是将分割的training和testing集合打乱的个数设定。如果不指定的话,也可以通过numpy.random来设定随机数。
shuffle和straify不常用。straify就是将数据分层。

包括

类需要包含

目的是的,对可以索引的数据,处理成多种方便读取方式
按照batch_size来读取(包装后,一次返回的不是一个数据,而是一个batch的数据)
按照是否打乱来读取,(如果打乱之后,返回的数据就是打乱之后的一个batch的数据,而不是之前没有打乱的连续数据,这样有助于送入训练的数据集分布更加均匀)

这里的Linformer,ViT都是从pip安装的库里面得到的,也可以自己写模型。
初始化efficient_transformer的参数
efficient作为参数和其他的参数一起初始化ViT模型
模型转到cuda上运行

其他优化算法包括:
opt_SGD = torch.optim.SGD(net_SGD.parameters(),lr=Learning_rate)
opt_Momentum = torch.optim.SGD(net_Momentum.parameters(),lr=Learning_rate,momentum=0.8,nesterov=True)
opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(),lr=Learning_rate,alpha=0.9)
opt_Adam = torch.optim.Adam(net_Adam.parameters(),lr=Learning_rate,betas=(0.9,0.99))
opt_Adagrad = torch.optim.Adagrad(net_Adagrad.parameters(),lr=Learning_rate)

补充知识:
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是
有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。
自适应调整:自适应调整学习率 ReduceLROnPlateau。
自定义调整:自定义调整学习率 LambdaLR。

等间隔调整学习率 StepLR,等间隔调整学习率,调整倍数为 gamma 倍,调整间隔为 step_size。间隔单位是step。需要注意的是, step 通常是指 epoch,不要弄成 iteration 了。
按需调整学习率 MultiStepLR, 按设定的间隔调整学习率。这个方法适合后期调试使用,观察 loss 曲线,为每个实验定制学习率调整时机。
指数衰减调整学习率 ExponentialLR
余弦退火调整学习率 CosineAnnealingLR
自适应调整学习率 ReduceLROnPlateau
自定义调整学习率 LambdaLR

以上是关于【代码阅读】vit做猫狗分类的主要内容,如果未能解决你的问题,请参考以下文章

CNN实现猫狗二分类

Transformer专题Vision Transformer(ViT)原理 + 代码

一文教你用paddlepaddle实现猫狗分类

图像分类实战——使用ResNet实现猫狗分类(pytorch)

图像分类猫狗分类实战—基于pytorch框架的迁移学习(ResNet50模型实现分类实战)

PyTorch 和 Albumentations 实现图像分类(猫狗大战)