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

算法面经手撕系列(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.9

        self.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-9
    def forward(self,x):
        if self.training:
            N,C,H,W=x.shape

            mean=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)*mean
            self.running_var=self.momentum*self.running_var+(1-self.momentum)*var
        else:
            x=(x-self.running_mean)/torch.sqrt(self.running_var+self.eps)

        return x
 if __name__=="__main__":
    input=torch.rand(10,3,5,5)
    model=BN(3)
    res=model(input)
    print('cool')



http://www.kler.cn/a/310610.html

相关文章:

  • DAY6 线程
  • 实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
  • 【leetcode练习·二叉树】用「分解问题」思维解题 II
  • OSS文件上传
  • 高性能分布式缓存Redis-高可用部署
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • 【每日一诗】【诗词创作】【诗】《雨前秋夜》
  • 浅谈Linux中的环回设备
  • C++将32位深图片处理成灰度图
  • 构建自己的文生图工具:Python + Stable Diffusion + CUDA
  • 基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
  • JAVA-集合相关
  • 功能测试干了三年,快要废了。。。
  • 工号不够用了怎么办? - 华为OD统一考试(E卷)
  • 【代码随想录训练营第42期 续Day58打卡 - 图论Part8 - Dijkstra算法
  • 在 Linux 系统中目录架构说明
  • c语言--力扣简单题目(最后一个单词的长度)讲解
  • 【毕设】基于Java的超市管理系统
  • SQL:DATEDIFF函数
  • Java网络编程:构建高性能的TCP/IP服务
  • OpenAI草莓正式发布,命名o1
  • SEW变频器的组成
  • 十一,Spring Boot 当中配置拦截器的“两”种方式
  • 函数调用与作用域
  • 下载 llama2-7b-hf 全流程【小白踩坑记录】
  • docker可视化管理工具推荐!docker.ui