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

news/2024/9/20 3:58:29 标签: 算法, python, 机器学习

BatchNormlization

  BatchNormlization的编码流程:

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

代码

 代码如下:

python">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.niftyadmin.cn/n/5666522.html

相关文章

mongodb 安装教程

mongodb 安装教程: https://blog.51cto.com/u_13646338/5449015 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.9.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.9.tgz -C /opt/module/ [roothadoop102 module]# mv mongodb-linux-…

GAMES101(2~3作业)

作业2 基础题目: 栅格化:在屏幕绘制一个实心三角形,函数 rasterize_triangle(const Triangle& t),需要找出当前三角形的边界框,然后遍历像素,查找当前像素是否在三角形内static bool insideTriangle(…

java -- JDBC

一.JDBC概述: 过java语言操作数据库中的数据。 1.JDBC概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于 执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以 为不同的关系型数据库提供统一访问,它由…

C++ | Leetcode C++题解之第405题数字转换为十六进制数

题目: 题解: class Solution { public:string toHex(int num) {if (num 0) {return "0";}string sb;for (int i 7; i > 0; i --) {int val (num >> (4 * i)) & 0xf;if (sb.length() > 0 || val > 0) {char digit val …

瓦工交底你家做了吗?真的很重要

有一个工地开始贴瓷砖,和业主约着一块去现场瓦工交底,业主买的瓷砖很有意思      先说一下为什么瓦工交底,瓦工包含的有包下水管,做防水贴墙砖和地砖。      瓦工交底最主要的就是确定墙砖和地砖的排版方式。      如…

小猫回收站(Windows 11)

注意:需要准备素材!!! 也下面可以直接拿走(需要自己去转.ico格式哈): 点击键并单击设置。Windows选择个性化,然后单击主题。单击桌面图标设置。在下一个对话框中,确保勾选…

解决VSCode文件的中文GBK和UTF-8编码之间乱码问题

NOTE:近日笔者在使用VSCode编码环境的时候,出现了中文和UTF-8两者之间乱码的问题,特编写本片文章,以作学习记录。 1.需求 用VSCode打开外部的GBK2312编码文件,想在VSCode中统一以UTF-8编码查看(笔者推荐U…

Datawhile 组队学习Tiny-universe Task01

Task01:LLama3模型讲解 仓库链接:GitHub - datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe 参考博客:LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子…