MeanTeacher文章解读+算法流程+核心代码详解
MeanTeacher
本博客仅做算法流程疏导,具体细节请参见原文
原文
原文链接点这里
Github 代码
Github代码点这里
解读
论文解读点这里
算法流程
代码详解
train_transform = data.TransformTwice(transforms.Compose([data.RandomTranslateWithReflect(4),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))]))eval_transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2616))])
这是图像的预处理,TransformTwice可以读两个数据流。
在训练阶段,有:
for i, ((input, ema_input), target) in enumerate(train_loader):
可以看到,通过train_transform出来的batch中,有两个数据流input和ema_input,其数据为同组数据加不同噪声后的形式,即算法流程中的[Xu′,Xs′][X^{'}_u,X^{'}_s][Xu′,Xs′]和[Xu′′,Xs′′][X^{''}_u,X^{''}_s][Xu′′,Xs′′]。每个数据流中包含了一定数量的有标记样本和无标记样本。target是这两个数据流的标签,其中无标记样本的标签为-1.
class_loss = class_criterion(model_out, target_var) / minibatch_size
consistency_weight = get_current_consistency_weight(epoch)consistency_loss = consistency_weight * consistency_criterion(model_out, ema_logit) / minibatch_size
class_loss正如算法流程中的Loss1Loss_1Loss1,是stu模型输出结果和标签的CrossEntropyLoss;consistency_loss如算法流程中的Loss2Loss_2Loss2,是两个[Xu′,Xs′][X^{'}_u,X^{'}_s][Xu′,Xs′]和[Xu′′,Xs′′][X^{''}_u,X^{''}_s][Xu′′,Xs′′]的一致性损失,文章中直接选择的MSE损失函数。为了让模型训练更合理,Loss2Loss_2Loss2有一个渐增系数consistency_weight。
loss.backward() # student 模型的更新
optimizer.step()
global_step += 1
update_ema_variables(model, ema_model, args.ema_decay, global_step) # teacher 模型的更新
student模型更新为Loss=Loss1+Loss2Loss=Loss_1+Loss_2Loss=Loss1+Loss2的反向梯度传播更新权值;teacher模型更新为当前student和上一个epoch的teacher模型的加权,即EMA平滑版本。
主要思想
算法比较简单,主要思想我觉得可以分为两部分:第一部分是原始样本的轻微扰动版本的预测结果应该与原样本属于同一类别;第二部分,希望通过模型的EMA版本作为分类更有可靠性的模型,即teacher来引导当前模型student模型训练,二者合并就是consistency_loss。
MeanTeacher文章解读+算法流程+核心代码详解相关推荐
- FixMatch文章解读+算法流程+核心代码详解
FixMatch 本博客仅做算法流程疏导,具体细节请参见原文 原文 查看原文点这里 Github代码 Github代码点这里 解读 FixMatch算法抓住了半监督算法的两个重要观点,第一个是一致性正 ...
- kmeans python interation flag_机器学习经典算法-logistic回归代码详解
一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...
- 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解
天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...
- C51单片机LED显示二进制【核心代码详解】
文章目录 前言 一.位运算--按位取反 二.代码部分 1.实例代码 2.对核心代码P2=~i 的解释 总结 前言 51单片机独立按键实现LED显示二进制[代码详解] --按位取反 --具体实现原理 提 ...
- SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)
写在前面 关于安装配置,博客LIO_SAM实测运行,论文学习及代码注释[附对应google driver数据] 我觉得已经写的比较完善了.但是我觉得在注释方面,这位博主写的还不够完善,因此在学习以后, ...
- python自然语言处理实战核心技术与算法——HMM模型代码详解
本人初学NLP,当我看着<python自然语言处理实战核心技术与算法>书上这接近200行的代码看着有点头皮发麻,于是我读了接近一天基本把每行代码的含义给读的个七七八八,考虑到可能会有人和我 ...
- 基于Matlab的遗传算法优化BP神经网络的算法实现(附算法介绍与代码详解)
目录 一.内容提要 二.算法简介 2.1 遗传算法(Genetic Algorithm,GA) 2.2 BP(Back Propagation)神经网络 三.实例计算 四.代码解读 代码运行 代码获取 ...
- .Net 反射脱壳机代码核心代码详解
本文主要对 <.Net 反射脱壳机核心源代码 >一文代码的原理和使用进行详细介绍. 首先介绍一下代码主要流程: 入口函数 void DumpAssembly(Assembly ass,st ...
- 【MATLAB】Parzen窗与K近邻算法原理与代码详解
文章目录 1.非参数估计原理 2.Parzen窗 2.1.算法原理 2.2.Matlab实现与参数探究 3.K近邻 3.1.算法原理 3.2.Matlab实现与参数探究 1.非参数估计原理 \qqua ...
最新文章
- JSON Path表达式
- 为什么以太网的最小数据帧长度为64字节?
- 客户服务器结构的数据库系统,客户服务器结构的数据库的例子
- leetcode 216. Combination Sum III | 216. 组合总和 III(Java)
- Oracle中查询、禁用、启用、删除表外键
- android studio——替换全局的某个字符串
- 冒名顶替上大学罗彩霞_什么是冒名顶替综合症,您如何克服?
- 透明(颜色)渐变背景(颜色透明背景),兼容IE8
- 为什么Python循环变慢?
- 第四篇、Tomcat 集群
- nodejs通过later实现定时执行任务
- 乡村振兴专题:农村面板数据3.0
- Clark变换和Park变换仿真验证
- 友达5寸工控液晶屏G050VTN01.1 小尺寸液晶屏
- r语言如何计算t分布临界值_「SPSS数据分析」SPSS差异分析(3)独立样本T检验操作步骤及解读...
- android触屏对焦_Android摄像头自动对焦与触摸对焦实现
- win7 无法访问服务器共享文件夹,win7系统共享文件夹无法访问的解决方法
- linux如何查看cpu型号
- 计算机管理进不去的原因,电脑进不了系统Windows怎么解决?电脑进不了系统的原因和解决方法...
- 英语46级报名考试系统
热门文章
- android listview 点击获取焦点,android – ListView项目焦点行为
- 复制文件到远程桌面显示未知错误
- Java 近期新闻:Classfile API 草案、Spring Boot、GlassFish、Reactor 项目、Micronaut
- Callbacks API-EarlyStopping
- java根据距离计算经纬度_Java根据两点的经纬度来计算之间的距离
- 会议系统m900服务器网口灯,中兴视频会议mcu服务器zxv10-m900
- 计算机音乐谱童话镇,《童话镇》歌曲简谱
- Android 之重力感应
- xshell6 强制更新的问题(转载、亲测有效)
- 程序员和自由工作者如何去找兼职