如何利用PyTorch中的Moco-V2减少计算约束( 三 )
步骤4:我们将最新的batch加入我们的队列 。 如果我们的队列大小大于我们定义的最大队列大小(K) , 那么我们就从其中取出最老的batch 。 可以使用torch.cat进行队列操作 。
# 更新队列queue = torch.cat((queue, k), 0) # 如果队列大于最大队列大小(k) , 则出列# batch大小是256 , 可以用变量替换if queue.shape[0] > K:queue = queue[256:,:]
步骤5:现在我们进入训练循环的最后一步 , 即更新键编码器 。 我们使用下面的for循环来实现这一点 。
# 更新resnetfor θ_k, θ_q in zip(resnetk.parameters(), resnetq.parameters()):θ_k.data.copy_(momentum*θ_k.data + θ_q.data*(1.0 - momentum))
一些训练细节训练resnet-18模型的Imagenette和Imagewoof数据集的GPU时间接近18小时 。 为此 , 我们使用了googlecolab的GPU(16GB) 。 我们使用的batch大小为256 , tau值为0.05 , 学习率为0.001 , 最终降低到1e-5 , 权重衰减为1e-6 。 我们的队列大小为8192 , 键编码器的动量值为0.999 。
结果前3层(将relu视为一层)定义了投影头 , 我们将其移除用于图像分类的下游任务 。 在剩下的网络上 , 我们训练了一个线性分类器 。
我们得到了64.2%的正确率 , 而使用10%的标记训练数据 , 使用MoCo-v2 。 相比之下 , 使用最先进的监督学习方法 , 其准确率接近95% 。
对于Imagewoof , 我们对10%的标记数据得到了38.6%的准确率 。 在这个数据集上进行对比学习的效果低于我们的预期 。 我们怀疑这是因为首先 , 数据集非常困难 , 因为所有类都是狗类 。
其次 , 我们认为颜色是这些类的一个重要的区别特征 。 应用颜色抖动可能会导致来自不同类的多个图像彼此混合表示 。 相比之下 , 监督方法的准确率接近90% 。
【如何利用PyTorch中的Moco-V2减少计算约束】能够弥合自监督模型和监督模型之间差距的设计变更:
- 使用更大更宽的模型 。
- 通过使用更大的批量和字典大小 。
- 使用更多的数据 , 如果可以的话 。 同时引入所有未标记的数据 。
- 在大量数据上训练大型模型 , 然后提取它们 。
- 谷歌Colab:
- Imagewoof Github仓库结果:
- Imagenette Github仓库结果:
- Imagewoof数据集链接:
- Imagenette数据集链接:
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 培育|跨境电商人才如何培育,长沙有“谱”了
- 抖音小店|抖音进军电商,短视频的商业模式与变现,创业者该如何抓住机遇?
- 计费|5G是如何计费的?
- 车轮旋转|牵引力控制系统是如何工作的?它有什么作用?
- 视频|短视频如何在前3秒吸引用户眼球?
- Vlog|中国Vlog|中国基建如何升级?看5G+智慧工地
- 涡轮|看法米特涡轮流量计如何让你得心应手
- 手机|OPPO手机该如何截屏?四种最简单的方法已汇总!
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐