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

算法面经手撕系列(2)--手撕BatchNormlization

BatchNormlization

  BatchNormlization的编码流程:

  1. init阶段初始化 C i n C_in Cin大小的scale向量和shift向量,同时初始化相同大小的滑动均值向量和滑动标准差向量;
  2. forward时沿着非channel维度计算均值、有偏方差
  3. 依据得到均值和有偏方差进行归一化
  4. 对归一化的结果进行缩放和平移

代码

 代码如下:

class BN(nn.Module):def __init__(self,C_in):super(BN,self).__init__()self.scale=nn.Parameter(torch.ones(C_in).view(1,-1,1,1))self.shift=nn.Parameter(torch.zeros(C_in).view(1,-1,1,1))self.momentum=0.9self.register_buffer('running_mean',torch.zeros(C_in).view(1,-1,1,1))self.register_buffer('running_var',torch.zeros(C_in).view(1,-1,1,1))self.eps=1e-9def forward(self,x):if self.training:N,C,H,W=x.shapemean=x.mean(dim=[0,2,3],keepdim=True)var=x.var(dim=[0,2,3],keepdim=True,unbiased=False)x=(x-mean)/torch.sqrt(var+self.eps)self.running_mean=self.momentum*self.running_mean+(1-self.momentum)*meanself.running_var=self.momentum*self.running_var+(1-self.momentum)*varelse:x=(x-self.running_mean)/torch.sqrt(self.running_var+self.eps)return xif __name__=="__main__":input=torch.rand(10,3,5,5)model=BN(3)res=model(input)print('cool')
http://www.lryc.cn/news/440143.html

相关文章:

  • mysql-搭建主从复制
  • MiniMaxi-共创智能新体验新手入门
  • Docker torchserve 部署模型流程
  • mybatis开启日志
  • MobaXterm : Network error: Connection refused(连接被拒绝)
  • 电脑的主板,内存条插多少合适?
  • C++:初始化列表
  • [000-01-008].第05节:OpenFeign特性-重试机制
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • django orm增删改查操作
  • 禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)
  • Rust 所有权 简介
  • linux-网络管理-防火墙配置
  • 【springboot】实现文件上传和下载
  • 【RabbitMQ】RabbitMQ如何保证数据的可靠性,RabbitMQ如何保证数据不丢失,数据存储
  • Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群
  • 算法基础-二分查找
  • LeetCode:1184. 公交站间的距离 一次遍历数组,复杂度O(n)
  • 牛客周赛 Round 60(A,B,C,D,E,F)
  • vueCropper裁剪图片(不模糊)以及记录使用方法
  • 【HTML】HTML页面和常见标签
  • 鸿蒙 ArkUI组件二
  • PHP 实现 redis 分布式锁
  • vue3 自定义el-tree树形结构样式
  • 【网络安全】分享4个高危业务逻辑漏洞
  • 【装机教程】Visual Studio Community 2019离线安装
  • NumPy 线性代数
  • 家装材料之水泥,最容易被忽视的基础材料!
  • openstack之keystone介绍
  • 【图像拼接】基于SIFT/SURF特征算法的图像拼接,matlab实现