对比学习 ——simsiam 代码解析。

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

目录

1 : 事先准备 。

2 : 代码阅读。

2.1: 数据读取

2.2: 模型载入

3 训练过程:

4 测试过程:

5 :线性验证

6 : 用自己数据集进行对比学习。

第一:  改数据集 :

2 改变batch_size和图片大小。


写在前面的话 CSDN真的是’sb’中的’sb’软件, 辛辛苦苦写半天  我复制个东西过来 他就把前面的刷没了 还要我重头写????????????神经并b


2022李宏毅作业HW3 是食物的分类 ,但是我怎么尝试 再监督学习的模式下 准确率都达不到百分之60 .。半监督也感觉效果不明显。 所以 这次就想着对比学习能不能用来解决这个问题呢 。?看了一圈,感觉simsiam是对比学习里比较简单的一种方法,好像效果也不错。 所以来看一看这个东西是怎么玩的。

simsaim 是对比学习很新的文章了。 他的训练方式简单来说就是 ,一张图片 ,用不同的方式去增广后形成图片对 。 然后用一张去预测另一张。 不懂得可以看朱老师的视频。

对比学习论文综述【论文精读】_哔哩哔哩_bilibili

1 : 事先准备 。

代码地址 : 好像不是官方的

下载解压。

直接在main函数的 运行 编辑配置中输入

--data\_dir ../Data/ --log\_dir ../logs/ -c configs/simsiam_cifar.yaml --ckpt\_dir ~/.cache/ --hide\_progress --download

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CZmzXzuJ-1649956353704)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]

os.environ['CUDA\_VISIBLE\_DEVICES']='0'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e649XXmQ-1649956353706)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ezkj0d3R-1649956353708)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]​

注意 : 第二次运行可以删掉download

2 : 代码阅读。

神经网络的一个基本的框架就是 : 数据读取 , 模型载入, 训练,测试。 我们接下来根据这四块来看。

2.1: 数据读取

运行main文件 。

    main(device=args.device, args=args)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpLlLiiY-1649956353709)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]
进入main 函数 。

是三个数据集的读取。

train\_loader ,, memory\_loader 和 test\_loader。 train和memory 都是训练集的数据 他们的不同之处在于, 数据增广的方式不同。 train的增广是用来训练的 memory和test的增广都是用来测试的。由于在对比学习里,  数据增广是很重要的 ,所以这里看下数据增广的方式。 
        dataset=get_dataset(
            transform=get_aug(train=True, **args.aug_kwargs),
            train=True,
            **args.dataset_kwargs),

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFj1meA5-1649956353710)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]

**args.aug\_kwargs 里规定了图片大小是32. 以及这次用的是simsaim。 

这里两个train  。 只有训练集的第一个train是true。 而训练集的增广方式如下

class SimSiamTransform():
    def \_\_init\_\_(self, image\_size, mean\_std=imagenet\_mean\_std):
        image_size = 224 if image_size is None else image_size # by default simsiam use image size 224
        p_blur = 0.5 if image_size > 32 else 0 # exclude cifar
        # the paper didn't specify this, feel free to change this value
        # I use the setting from simclr which is 50% chance applying the gaussian blur
        # the 32 is prepared for cifar training where they disabled gaussian blur
        self.transform = T.Compose([
            T.RandomResizedCrop(image_size, scale=(0.2, 1.0)),
            T.RandomHorizontalFlip(),
            T.RandomApply([T.ColorJitter(0.4,0.4,0.4,0.1)], p=0.8),
            T.RandomGrayscale(p=0.2),
            T.RandomApply([T.GaussianBlur(kernel_size=image_size//20*2+1, sigma=(0.1, 2.0))], p=p_blur),
            T.ToTensor(),
            T.Normalize(*mean_std)
        ])
    def \_\_call\_\_(self, x):
        x1 = self.transform(x)
        x2 = self.transform(x)
        return x1, x2 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8yJ8992-1649956353711)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]
   增广方式可以参考 官网 Transforming and augmenting images — Torchvision 0.12 documentation

这里依次是 : 随机resize 然后剪切为输入大小,  也就是会随机取图片里的一块。

随机水平变换

0.8的概率调节亮度对比度和饱和度。

0.2概率灰度化

对于32的照片 不做高斯模糊。

转化为张量并标准化。

然后 对于一个输入  这里会做两次transform  call可以让这个类像函数那样被调用。

对于 测试用的训练集 。也就是memory 是下面的增广方式。  而test也是下面的增广方式 。

        else:
            self.transform = transforms.Compose([
                transforms.Resize(int(image_size*(8/7)), interpolation=Image.BICUBIC), # 224 -> 256 
                transforms.CenterCrop(image_size),
                transforms.ToTensor(),
                transforms.Normalize(*normalize)
            ])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2rUtJd4-1649956353712)(https://img2022.cnblogs.com/blog/2375794/202204/2375794-20220414203749691-158522950.gif “点击并拖拽以移动”)]
              如果输入是 224 就 先放大到256,然后中心裁剪224,之后标准化。

如果输入是32 就放大到36 再中心裁剪32 .后标准化。

用的是c

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值