sel_cl总体代码
是从train_Sel-CL.py
训练骨干和train_Sel-CL_fine-tuning.py
微调,类似何凯明的监督对比网络。此外train_Sel-CL.py
有替换代码train_Sel-CL_v2.py
以降低knn复杂度。RunScripts_cifar100_Sel-CL_plus.sh
等sh的代码只是为了实验,关联上述代码,设置不同,如对称噪声标签和噪声分位数。
train_Sel-CL_v2.py
cifar_dataset.py
数据集存储位置,必须是此文件夹的dataset内,自动下载设为ture,
- TwoCropTransform 将图复制为两份,之后都设置变换,这两个图片来自一张,为一类,但是变换不同,为一个自信配对。
- python的os.path.expanduser函数,它可以将参数中开头部分的 ~ 或 ~user 替换为当前用户的home目录并返回,windows将这个函数删除,train_Sel-CL_v2.py内设为原本路径。
- np.asarray,array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
Cifar10Train(tv.datasets.CIFAR10)
,Cifar10Train继承tv.datasets.CIFAR10,故self.targets在tv.datasets.CIFAR10定义- extend 扩展数组。
- 遇到
warn(f"Failed to load image Python extension: {e}")
,更新cuda,安装新的pytorch,这是应为pytorch和torchvision不匹配 - 遇到
RuntimeError: Unable to find a valid cuDNN algorithm to run convolution
,降低num_workers 因为cpu太差。 -
log_file=open(res_path+name+".log",‘a’)
print(log_file)
sys.stdout=log_file
后续的 `log_file.flush()` 此处代码是将 log_file 存储到log_file文件中,但是这会使代码所输出不再显示在Console,要调试,故注销,之后再取消注销。
9. self.targets 是标签存储处,共50000个训练数据
10. `self._num = int(len(self.targets) * self.args.noise_ratio)` ### 噪声率是指错误标签个数
11. `np.random.permutation(n)` 对0-n之间的序列进行随机排序
12. ` np.identity(n)` 创建n*n的主对角线为1,其余地方为0的数组方阵
13. `\`换行,但是代码继续
14. `self.confusion_matrix_in[9, 9] = 1 - self.args.noise_ratio`1 - self.args.noise_ratio的概率 truck 还是 truck` self.confusion_matrix_in[9, 1] = self.args.noise_ratio` ## 1 -self.args.noise_ratio的概率 truck 改 automobile
15. `np.random.choice((0,5),p)`#从[0, 5)中按照概率p输出一个随机数
## preact_resnet.py
网络
16. 网络1 为PreActResNet18骨干 ,与传统ResNet18相比,将PreActBottleneck替换Bottleneck,他们之间的区别只是将卷积、激活、Bn在该层的顺序改变。
17. 网络2 `self.linear2 = nn.Linear(512 * block.expansion, num_classes)`
18. 网络3 `self.head = nn.Linear(512*block.expansion, low_dim)`
19. `torch.backends.cudnn.deterministic = True`将这个flag设置为TRUE的话,每次返回的卷积算法是确定的,即默认算法。如果结合前置torch中设置随机数seed一定的话,可以保证每次运行网络相同输入得到的输出是相同的。
20. ```python
transforms.RandomResizedCrop(32), ## 将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小
transforms.RandomHorizontalFlip(p=0.5), ## 以给定的概率随机水平旋转给定的图像
transforms.RandomApply([transforms.ColorJitter(0.4, 0.4, 0.4, 0.1)], p=0.8), ## transforms.ColorJitter修改亮度、对比度和饱和度,transforms.RandomApply给予一定概率做内部操作
transforms.RandomGrayscale(p=0.2), ## 依概率p转为灰度图
MemoryMoCo.py
self.register_buffer('memory', memory)
在内存中定一个常量,同时,模型保存和加载的时候可以写入和读出- .t() 转置
23.apex.amp.initialize
英伟达提供了混合精度训练工具Apex。号称能够在不降低性能的情况下,将模型训练的速度提升2-4倍,训练显存消耗减少为之前的一半,将内部的数据精度降低。
utils_noise.py
warnings.filterwarnings('ignore')
不要让代码发出警告信息。