sel_cl+代码理解与调试总结

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,

  1. TwoCropTransform 将图复制为两份,之后都设置变换,这两个图片来自一张,为一类,但是变换不同,为一个自信配对。
  2. python的os.path.expanduser函数,它可以将参数中开头部分的 ~ 或 ~user 替换为当前用户的home目录并返回,windows将这个函数删除,train_Sel-CL_v2.py内设为原本路径。
  3. np.asarray,array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。
  4. Cifar10Train(tv.datasets.CIFAR10),Cifar10Train继承tv.datasets.CIFAR10,故self.targets在tv.datasets.CIFAR10定义
  5. extend 扩展数组。
  6. 遇到warn(f"Failed to load image Python extension: {e}"),更新cuda,安装新的pytorch,这是应为pytorch和torchvision不匹配
  7. 遇到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

  1. self.register_buffer('memory', memory)在内存中定一个常量,同时,模型保存和加载的时候可以写入和读出
  2. .t() 转置
    23.apex.amp.initialize 英伟达提供了混合精度训练工具Apex。号称能够在不降低性能的情况下,将模型训练的速度提升2-4倍,训练显存消耗减少为之前的一半,将内部的数据精度降低。

utils_noise.py

  1. warnings.filterwarnings('ignore')不要让代码发出警告信息。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是在MSP430微控制器上配置定时器(Timer)和捕获(Capture)模块的相关设置。下面是对每一行代码的解释: 1. `TA2CTL |= TASSEL_2+MC_2+TAIE+TACLR+ID_3;`:配置定时器TA2的控制寄存器。选择SMCLK作为时钟源(TASSEL_2),设置为连续计数模式(MC_2),允许中断(TAIE),将计数器清零(TACLR),设置时钟分频系数为8(ID_3)。 2. `TA1CTL |= TASSEL_2+MC_2+TAIE+TACLR+ID_3;`:配置定时器TA1的控制寄存器。与上一行代码类似,配置定时器TA1的相关设置。 3. `TA2CCTL1 |= CAP+CM_1+CCIS_0+CCIE;`:配置定时器TA2的捕获比较控制寄存器1。设置为捕获模式(CAP),上升沿捕获(CM_1),选择CCI1A作为输入信号源(CCIS_0),同步捕获模式,允许中断(CCIE)。 4. `TA1CCTL1 |= CAP+CM_1+CCIS_0+CCIE;`:配置定时器TA1的捕获比较控制寄存器1。与上一行代码类似,配置定时器TA1的相关设置。 5. `P2DIR &=~ BIT4;`:将P2.4引脚设为输入模式,即将P2.4引脚的方向寄存器P2DIR的对应位清零。 6. `P2SEL |= BIT4;`:将P2.4引脚的功能选择寄存器P2SEL的对应位设置为1,选择该引脚作为捕获输入信号的源。 7. `P2DIR &=~ BIT0;`:将P2.0引脚设为输入模式,即将P2.0引脚的方向寄存器P2DIR的对应位清零。 8. `P2SEL |= BIT0;`:将P2.0引脚的功能选择寄存器P2SEL的对应位设置为1,选择该引脚作为捕获输入信号的源。 总体上,这段代码配置了两个定时器(TA2和TA1)以及两个捕获比较模块(TA2CCTL1和TA1CCTL1)。还配置了P2.4和P2.0作为捕获输入信号的引脚。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值