当前位置: 首页 > news >正文

在因特网上建设网站可选择的方案有wap企业网站模板

在因特网上建设网站可选择的方案有,wap企业网站模板,网站源码 酷,wordpress 审核文章简介 在深度学习中#xff0c;经常会使用EMA#xff08;指数移动平均#xff09;这个方法对模型的参数做平均#xff0c;以求提高测试指标并增加模型鲁棒。 指数移动平均#xff08;Exponential Moving Average#xff09;也叫权重移动平均#xff08;Weighted Moving…简介 在深度学习中经常会使用EMA指数移动平均这个方法对模型的参数做平均以求提高测试指标并增加模型鲁棒。 指数移动平均Exponential Moving Average也叫权重移动平均Weighted Moving Average是一种给予近期数据更高权重的平均方法。 例子 假设有”温度-天数“的数据 θt\theta_tθt​在第 t 天的温度 vtv_tvt​在第 t 天的移动平均数 β\betaβ 权重参数 v00v10.9v00.1θ1v20.9v10.1θ2⋯vt0.9vt−10.1θt\begin{aligned} v_0 0 \\ v_1 0.9v_0 0.1 \theta_1 \\ v_2 0.9v_1 0.1 \theta_2\\ \cdots\\ v_t 0.9v_{t-1} 0.1\theta_t\\ \end{aligned} v0​v1​v2​vt​​00.9v0​0.1θ1​0.9v1​0.1θ2​⋯0.9vt−1​0.1θt​​ 红线即是蓝色数据点的指数移动平均 VtV_tVt​ 和 β\betaβ 的关系 vtv_tvt​ 大概表示前 11−β\frac{1}{1-\beta}1−β1​ 天的平均数据以第 t 天做参考 β0.9\beta 0.9β0.911−β≈10\frac{1}{1-\beta}\approx101−β1​≈10vtv_tvt​ 大概表示前10天的平均数据红线β0.98\beta 0.98β0.9811−β≈50\frac{1}{1-\beta}\approx501−β1​≈50vtv_tvt​ 大概表示前50天的平均数据绿线β0.5\beta 0.5β0.511−β≈2\frac{1}{1-\beta}\approx21−β1​≈2vtv_tvt​ 大概表示前2天的平均数据黄线那么β\betaβ 越大表示考虑的时间阔度越大 理解vtv_tvt​ vtβ⋅vt−1(1−β)⋅θt\begin{aligned} v_t \beta \cdot v_{t-1} (1-\beta) \cdot \theta_t \end{aligned} vt​β⋅vt−1​(1−β)⋅θt​​ 当 β0.9\beta 0.9β0.9从v100v_{100}v100​往回写 v1000.9v990.1θ100v990.9v980.1θ99⋯v10.9v00.1θ1v00\begin{aligned} v_{100} 0.9v_{99} 0.1\theta_{100}\\ v_{99} 0.9v_{98} 0.1\theta_{99}\\ \cdots \\ v_1 0.9v_0 0.1 \theta_1 \\ v_0 0 \\ \end{aligned} v100​v99​v1​v0​​0.9v99​0.1θ100​0.9v98​0.1θ99​⋯0.9v0​0.1θ1​0​ 迭代该过程可知 $v_{100} 是 θ100θ99θ98⋯\theta_{100}\ \theta_{99}\ \theta_{98}\ \cdotsθ100​ θ99​ θ98​ ⋯ 的加权求和θ\thetaθ 前的系数相加为 1 或逼近 1 当某项系数小于峰值系数 (−的 1e\frac{1}{e}e1​ 时可以忽略它的影响 (0.9)10≃0.34≃1e(0.9)^10 \simeq 0.34 \simeq \frac{1}{e}(0.9)10≃0.34≃e1​ 所以当β0.9时相当于前10天的加权平均。 (0.98)50≃0.36≃1e(0.98)^50 \simeq 0.36 \simeq \frac{1}{e}(0.98)50≃0.36≃e1​ 所以当β0.98时相当于前50天的加权平均。 (0.5)2≃0.25≃1e(0.5)^2 \simeq 0.25 \simeq \frac{1}{e}(0.5)2≃0.25≃e1​ 所以当β0.5时相当于前2天的加权平均。 带入深度学习模型 vtβ⋅vt−1(1−β)⋅θtv_t \beta \cdot v_{t-1} (1-\beta) \cdot \theta_tvt​β⋅vt−1​(1−β)⋅θt​ θt\theta_tθt​在第 t 次更新得到的所有参数权重 vtv_tvt​第 t 次更新的所有参数移动平均数 β\betaβ权重参数 EMA内在 对于更新 t 次时普通的参数权重 θt\theta_tθt​ (gtg_tgt​ 是第 t 次传播得到的梯度) θtθt−1−gt−1θt−2−gt−1−gt−2⋯θ1−∑i1t−1gi\begin{aligned} \theta_t \theta_{t-1} - g_{t-1}\\ \theta_{t-2} - g_{t-1} - g_{t-2}\\ \cdots\\ \theta_1 - \sum^{t-1}_{i1} g_i\\ \end{aligned} θt​​θt−1​−gt−1​θt−2​−gt−1​−gt−2​⋯θ1​−i1∑t−1​gi​​ 对于更新 t 次时使用EMA的参数权重 vtv_tvt​ θtθ1−∑i1t−1givtθ1−∑i1t−1(1−βt−i)gi\begin{aligned} \theta_t \theta_1 - \sum^{t-1}_{i1}g_i\\ v_t \theta_1 - \sum^{t-1}_{i1}(1-\beta^{t-i})g_i \end{aligned} θt​vt​​θ1​−i1∑t−1​gi​θ1​−i1∑t−1​(1−βt−i)gi​​ 推理如下将 θn\theta_nθn​ 带入 vnv_nvn​ 表达式并且令 v0θ1v_0 \theta_1v0​θ1​: vnβtv0(1−β)(θtβθt−1β2θt−2⋯βn−1θ1)βtv0(1−β)(θ1−∑i1t−1giβ(θ1−∑i1t−2gi)⋯βt−2(θ1−∑i11gi)βt−1θ1)βtv0(1−βt)θ1−∑i1n−1(1−βt−i)giθ1−∑i1t−1(1−βt−i)gi\begin{aligned} v_n \beta^t v_0 (1-\beta)(\theta_t \beta\theta_{t-1}\beta^2\theta_{t-2}\cdots\beta^{n-1}\theta_1) \\ \beta^tv_0 (1-\beta)(\theta_1 - \sum^{t-1}_{i1}g_i\beta(\theta_1 - \sum^{t-2}_{i1}g_i)\cdots\beta^{t-2}(\theta_1 - \sum^{1}_{i1}g_i)\beta^{t-1}\theta_1)\\ \beta^tv_0 (1-\beta^t)\theta_1 - \sum^{n-1}_{i1}(1-\beta^{t-i})g_i \\ \theta_1 - \sum^{t-1}_{i1}(1-\beta^{t-i})g_i \end{aligned} vn​​βtv0​(1−β)(θt​βθt−1​β2θt−2​⋯βn−1θ1​)βtv0​(1−β)(θ1​−i1∑t−1​gi​β(θ1​−i1∑t−2​gi​)⋯βt−2(θ1​−i1∑1​gi​)βt−1θ1​)βtv0​(1−βt)θ1​−i1∑n−1​(1−βt−i)gi​θ1​−i1∑t−1​(1−βt−i)gi​​ 普通的参数权重相当于一直累积更新整个训练过程的梯度使用EMA的参数权重相当于使用训练过程梯度的加权平均刚开始的梯度权值很小。由于刚开始训练不稳定得到的梯度给更小的权值更为合理所以EMA会有效。 代码实现 class EMA(nn.Module):def __init__(self, model, decay0.9999, deviceNone):super(EMA, self).__init__()# make a copy of the model for accumulating moving average of weightsself.module deepcopy(model)self.module.eval()self.decay decay# perform ema on different device from model if setself.device deviceif self.device is not None:self.module.to(devicedevice)def _update(self, model, update_fn):with torch.no_grad():for ema_v, model_v in zip(self.module.state_dict().values(), model.state_dict().values):if self.device is not None:model_v model_v.to(deviceself.device)ema_v.copy_(update_fn(ema_v, model_v))def update(self, model):self._update(model, update_fnlambda e, m: self.decay * e (1. - self.decay) * m)def set(self, model):self._update(model, update_fnlambda e, m: m)class LitEma(nn.Module):def __init__(self, model, decay0.9999, use_num_upatesTrue):super().__init__()if decay 0.0 or decay 1.0:raise ValueError(Decay must be between 0 and 1)self.m_name2s_name {}self.register_buffer(decay, torch.tensor(decay, dtypetorch.float32))self.register_buffer(num_updates, torch.tensor(0, dtypetorch.int) if use_num_upateselse torch.tensor(-1, dtypetorch.int))for name, p in model.named_parameters():if p.requires_grad:# remove as .-character is not allowed in bufferss_name name.replace(., )self.m_name2s_name.update({name: s_name})self.register_buffer(s_name, p.clone().detach().data)self.collected_params []def forward(self, model):decay self.decayif self.num_updates 0:self.num_updates 1decay min(self.decay, (1 self.num_updates) / (10 self.num_updates))one_minus_decay 1.0 - decaywith torch.no_grad():m_param dict(model.named_parameters())shadow_params dict(self.named_buffers())for key in m_param:if m_param[key].requires_grad:sname self.m_name2s_name[key]shadow_params[sname] shadow_params[sname].type_as(m_param[key])shadow_params[sname].sub_(one_minus_decay * (shadow_params[sname] - m_param[key]))else:assert not key in self.m_name2s_namedef copy_to(self, model):m_param dict(model.named_parameters())shadow_params dict(self.named_buffers())for key in m_param:if m_param[key].requires_grad:m_param[key].data.copy_(shadow_params[self.m_name2s_name[key]].data)else:assert not key in self.m_name2s_namedef store(self, parameters):Save the current parameters for restoring later.Args:parameters: Iterable of torch.nn.Parameter; the parameters to betemporarily stored.self.collected_params [param.clone() for param in parameters]def restore(self, parameters):Restore the parameters stored with the store method.Useful to validate the model with EMA parameters without affecting theoriginal optimization process. Store the parameters before thecopy_to method. After validation (or model saving), use this torestore the former parameters.Args:parameters: Iterable of torch.nn.Parameter; the parameters to beupdated with the stored parameters.for c_param, param in zip(self.collected_params, parameters):param.data.copy_(c_param.data)
http://www.dnsts.com.cn/news/130553.html

相关文章:

  • php做视频网站源码定制管理系统软件
  • 没事网站建设项目规划书黄冈建设局网站
  • 沈阳 教育 公司 网站建设万能搜索引擎入口
  • 网站怎么做免费seo搜索引擎Wordpress虚拟资源交易
  • 理财网站模板卓商网站建设公司
  • 推荐网站建设品牌静态网站开发篇
  • 网站试运营做网站如何宣传
  • 成都网站建设顶呱呱qq推广功能在哪开
  • 企业网络推广方案的制定搜索引擎优化的概念
  • 中国wix网站制作公司wordpress使用置顶文章没用
  • 天津网站设计开发wordpress2016
  • .net 网站开发书籍东莞建设网站费用
  • 免费域名网站搭建网站建设报价模版
  • 宁波高端定制网站建设重庆vr制作
  • 个人备案网站服务内容互联网营销设计
  • html中文网站模板下载wordpress页面调用分类文章列表
  • 前端编程工程师培训优化推荐
  • 西部数码如何建设自己的网站做网站公司怎么推销
  • 优秀个人网站模板wordpress wp_head
  • 酒店如何做网站上海市建设工程招投标信息网
  • 网站建设的创意江苏省建设工程质量监督网站
  • 免费网站推广咱们做网站建设课程心得体会
  • 成都龙泉建设发展有限公司网站外贸哪个行业比较好做
  • h5响应式企业网站源码网站后台查找软件
  • 北京建设网站的公司简介wordpress登录页面空白
  • 网站建设好处zu97懒人模板网站
  • 网站备案审核要多久莱芜在线最新消息
  • 如何识别一个网站是否做的好苏州营销型网站制作
  • 网站维护工程师月薪多少欧米茄表官网
  • 无极电影网怎样下载电影优化平台建设公司