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

上海利恩建设集团有限公司网站dw网页设计源代码

上海利恩建设集团有限公司网站,dw网页设计源代码,东莞网站优化关键词排名,WordPress验证问题本文介绍量化中如何将BatchNorm和ReLU合并到Conv中。 Folding BatchNorm BatchNorm是google提出的一种加速神经网络训练的技术#xff0c;在很多网络中基本是标配。回忆一下BatchNorm其实就是在每一层输出的时候做了一遍归一化操作#xff1a; Input:Values of x over a mi…本文介绍量化中如何将BatchNorm和ReLU合并到Conv中。 Folding BatchNorm BatchNorm是google提出的一种加速神经网络训练的技术在很多网络中基本是标配。回忆一下BatchNorm其实就是在每一层输出的时候做了一遍归一化操作 Input:Values of x over a mini-batch:; Parameters to be learned: output:   //mini batch mean   // mini batch variance  // normalization  // scale and shift Algorithm1:Batch normalizing transform, applied to activation x over a mini-batch。其中是网络中间某一层的激活值、分别是其均值和方差则是经过BN后的输出。 一般卷积层与BN合并 Folding BatchNorm不是量化才有的操作在一般网络中为了加速网络推理我们也可以把BN合并到Conv中。 合并的过程是这样的假设有一个已经训练好的Conv和BN 假设Conv的weight和bias分别是w和b那么卷积层的输出为 (1) 途中BN层的均值和方差可以表示为和,那么BN层的输出可以表示为 (2) 然后我们将1式代入2式得 (3) 我们用来表示 那么3式可以表示为 (4) 可以发现4式形式上跟1式一模一样因此它本质上也是一个Conv运算我们只需要用和来作为原来卷积的weight和bias就相当于将BN的操作合并到了Conv里面。实际inference的时候由于BN层的参数已经固定了因此可以把BN层folding到Conv中省去BN层的计算开销。 卷积层和BN层合并从pytorch官方扒出的对应代码如下传送 def fuse_conv_bn_weights(conv_w: torch.Tensor,conv_b: Optional[torch.Tensor],bn_rm: torch.Tensor,bn_rv: torch.Tensor,bn_eps: float,bn_w: Optional[torch.Tensor],bn_b: Optional[torch.Tensor],transpose: bool False ) - Tuple[torch.nn.Parameter, torch.nn.Parameter]:rFuse convolutional module parameters and BatchNorm module parameters into new convolutional module parameters.Args:conv_w (torch.Tensor): Convolutional weight.conv_b (Optional[torch.Tensor]): Convolutional bias.bn_rm (torch.Tensor): BatchNorm running mean.bn_rv (torch.Tensor): BatchNorm running variance.bn_eps (float): BatchNorm epsilon.bn_w (Optional[torch.Tensor]): BatchNorm weight.bn_b (Optional[torch.Tensor]): BatchNorm bias.transpose (bool, optional): If True, transpose the conv weight. Defaults to False.Returns:Tuple[torch.nn.Parameter, torch.nn.Parameter]: Fused convolutional weight and bias.conv_weight_dtype conv_w.dtypeconv_bias_dtype conv_b.dtype if conv_b is not None else conv_weight_dtypeif conv_b is None:conv_b torch.zeros_like(bn_rm)if bn_w is None:bn_w torch.ones_like(bn_rm)if bn_b is None:bn_b torch.zeros_like(bn_rm)bn_var_rsqrt torch.rsqrt(bn_rv bn_eps)if transpose:shape [1, -1] [1] * (len(conv_w.shape) - 2)else:shape [-1, 1] [1] * (len(conv_w.shape) - 2)fused_conv_w (conv_w * (bn_w * bn_var_rsqrt).reshape(shape)).to(dtypeconv_weight_dtype)fused_conv_b ((conv_b - bn_rm) * bn_var_rsqrt * bn_w bn_b).to(dtypeconv_bias_dtype)return (torch.nn.Parameter(fused_conv_w, conv_w.requires_grad), torch.nn.Parameter(fused_conv_b, conv_b.requires_grad)) 量化BatchNorm Folding 量化网络时可以用同样的方法把BN合并到Conv中。 如果量化时不想更新BN的参数后训练量化那我们就先把BN合并到Conv中直接量化新的Conv即可。 如果量化时需要更新BN的参数比如量化感知训练那也很好处理。Google把这个流程的心法写在一张图上了 由于实际 inference 的时候BN 是 folding 到 Conv 中的因此在量化训练的时候也需要模拟这个操作得到新的 weight 和 bias并用新的 Conv 估计量化误差来回传梯度。 量化感知训练后期再做详细的解读和补充。 Conv和ReLU合并 在量化中Conv ReLU这样的结构一般也是合并成一个Conv进行运算的而这一点在全精度模型中则办不到。  之前的文章中有介绍过ReLU前后应该使用同一个scale和 zeropoint。这是因为ReLU本身没有做任何的数学运算只是一个截断函数如果使用不同的scale和zeropoint将会导致无法量化回float域。
http://www.zqtcl.cn/news/413008/

相关文章:

  • 网站模板建站教程视频德州极速网站建设百家号
  • 专做蔬菜水果的网站自学it从哪里学起
  • 邵阳红网站搭建平台聚合力
  • 滁州网站建设信息推荐软件开发技术方案模板
  • 商务网站建设有哪几个步骤拼多多网页qq登录
  • 厦门商城网站开发宜昌小程序开发公司
  • 东莞沙田网站建设榆林网站建设价格
  • 无锡网站制作建设wordpress写文章模板
  • 企业网站销售提升学历要多少钱
  • 打开建设银行官方网站首页wordpress 站库分离
  • 电子商务网站建设的试卷设计之家app
  • 抚养网站建设黔东南小程序开发公司
  • 网站建设相关行业有哪些wordpress 内容管理系统
  • 网站 备案地温州网站优化排名推广
  • 做网站的工作量国内 wordpress
  • 定制网站开发是什么大业推广网站
  • 网站建设每年需要交多少钱天津制作网站公司
  • 网站平台都有哪些wordpress 主题制作 视频
  • 中山网站建设方案家具网站开发目的
  • 教师个人网站建设建模培训多少钱
  • 个人网站可以做社交类型网站建设功能说明书
  • 微站是什么移动网站 拉新
  • 黑龙江省农业网站建设情况wordpress4.94主题上传不显示
  • 个人网站的域名重庆建立公司网站
  • 什么做网站做个多少钱啊百度网盘app
  • 做网站的公司挣钱吗石家庄房产
  • 烟台网站建设设计公司安徽建设工程信息网查询平台蔡庆树
  • 微信链接的微网站怎么做西安企业网站制作价格
  • uniapp怎么做淘客网站表格布局的网站
  • wordpress侧栏图片插件提升seo搜索排名