• 关于Classification-SemiCLS代码中的问题记录


    1. 代码中args.mu是设为7的,即每次输入到batch中数据,假设有标签数据为64张,无标签数据就是64*7张;
    2. 设置eval_step是用来设置Dataloader在iter的next步数的,但手动设置会有一个问题,就是数据集遍历完了但是循环还在继续会报错。代码中采用了try except机制来使迭代循环,也即遍历完之后还会重新遍历一遍;
    for batch_idx in range(args.eval_step):  # 1024
        try:
            data_x = labeled_iter.next()
        except Exception:
            if args.world_size > 1:
                labeled_epoch += 1
                labeled_trainloader.sampler.set_epoch(labeled_epoch)
            labeled_iter = iter(labeled_trainloader)
            data_x = labeled_iter.next()
    
        try:
            data_u = unlabeled_iter.next()
        except Exception:
            if args.world_size > 1:
                unlabeled_epoch += 1
                unlabeled_trainloader.sampler.set_epoch(unlabeled_epoch)
            unlabeled_iter = iter(unlabeled_trainloader)
            data_u = unlabeled_iter.next()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 因为代码中先生成了DataLoader再进行epoch循环,这会带来一个问题:如果每次循环没有覆盖到整个数据集(也即iter步数设置过小),数据集就只有部分会参与到loss回传没有整个被用到,但是如果epoch设置小没有影响,只要iter设置大,就可以往复循环遍历整个数据集。得结论:args.eval_step一定要设置足够大。
  • 相关阅读:
    在CentOS 7.7 x86_64上安装python3.11.0实录
    怎么把电影中的声音保存下来?
    程序化广告平台如何让app广告变现收益最大化?
    毫无基础的人如何入门 Python ?
    ILRuntime1.安装
    2022年中国消费金融行业数字化技术创新分析
    Tomcat 部署 war 包
    周记之重新开始
    Linux终端与SSH
    CSS属性 - box-sizing
  • 原文地址:https://blog.csdn.net/qq_36846729/article/details/126227783