Python微信订餐小程序课程视频
https://blog.csdn.net/m0_56069948/article/details/122285951
Python实战量化交易理财系统
https://blog.csdn.net/m0_56069948/article/details/122285941
目录
写在前面的话 CSDN真的是’sb’中的’sb’软件, 辛辛苦苦写半天 我复制个东西过来 他就把前面的刷没了 还要我重头写????????????神经并b
2022李宏毅作业HW3 是食物的分类 ,但是我怎么尝试 再监督学习的模式下 准确率都达不到百分之60 .。半监督也感觉效果不明显。 所以 这次就想着对比学习能不能用来解决这个问题呢 。?看了一圈,感觉simsiam是对比学习里比较简单的一种方法,好像效果也不错。 所以来看一看这个东西是怎么玩的。
simsaim 是对比学习很新的文章了。 他的训练方式简单来说就是 ,一张图片 ,用不同的方式去增广后形成图片对 。 然后用一张去预测另一张。 不懂得可以看朱老师的视频。
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