文章目录
写在前面
新手入门,相互学习,期待大佬有更好的想法。
做完这个实验应该有的收获:
- 使用CNN进行图片分类
- 学习到 data augmentations(有22种之多,但并不是每种都有用,看情况)
- 使用
半监督学习(主要)
(用上大量 unlabeled data辅助训练) - 训练经验:
-
本地训练,从kaggle下载数据会快
kaggle competitions download -c ml2021spring-hw3
(需要配置kaggle.json文件到.kaggle文件夹下) -
加了
num_workers=8, pin_memory=True
会快得飞起,用多线程去加载数据会快,num_workers默认是0, pin_memory默认是false
,很慢… 在DataLoader中test_loader = DataLoader(test_set, batch_size=batch_size, shuffle=False, num_workers=8, pin_memory=True)
-
自定义
Dataset
,concat_dataset = ConcatDataset([train_set, pseudo_set])
,ConcatDataset
将多个Dataset拼接起来
-
可视化训练结果,将每一个epoch的数据存储在列表中,列表不要重复覆盖不然就没之前的数据了。(至少200个epoch起,刚开始调了20 什么也看不出来,总共训练了有600个epoch了)
-
data_loader = DataLoader(dataset, batch_size=256, shuffle=False, num_workers=8, pin_memory=True)
#num_workers=8, pin_memory=True ,batch_size=256 设置为256,只推断可以设置大一点
-
对半监督 取数据代码的理解:对于
indices
只有masks[i]=true
的才会被选取
-
可视化 代码
-
先上实验结果(直接使用pytorch内置的模型resnet18(pretrain=False),双过 strong baseline,过线一点点,学习用就行了)
可视化 训练过程,中间有抖动是因为手动停了训练调了一下参数,比如在训练后期:可以把学习率调小,半监督的阈值放宽。
后面学习到scheduler
和tensorboard
可以自动调整学习率吧,等待学习中…
阈值调到0.65 使用到的数据
使用resnet18_pretrain的结果,只训练10个epoch看看效果(当然这是禁止的!)
一些改进想法:
- 集成学习ensemble?
各种集成,集成方式?
第1个ensemble 集成了前3个模型(majority vote方式?),第2个ensemble 集成了后3个模型(average方式),第3个ensemble 集成了后3个模型(majority vote方式),第4个ensemble 集成了前3个ensemble模型(majority vote方式)
- 数据增强不同方式?
一些 参考 及 链接:
作业 及 样例代码(sample code 抄这里)
大佬代码参考(数据增强和半监督代码 抄这里)
参考2–目前只有1-3作业?(可视化代码抄这里)
学习到的经验:
- 加快数据读取:prefetch_generator (自己没用上这个,直接num_workers = 8,开多个线程加载数据)
- 数据增强:transforms.AutoAugment(), transforms.TrivialAugmentWide()
- lr调整:lr_scheduler
- 半监督valid_acc > 0.6并且每过10个epoch才用,每一轮差别不是很大