BN体系理解——类封装复现

这篇具有很好参考价值的文章主要介绍了BN体系理解——类封装复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

BN体系理解——类封装复现,深度学习,pytorch,python

BN体系理解——类封装复现,深度学习,pytorch,python BN体系理解——类封装复现,深度学习,pytorch,python

BN体系理解——类封装复现,深度学习,pytorch,python BN体系理解——类封装复现,深度学习,pytorch,python

BN体系理解——类封装复现,深度学习,pytorch,python BN体系理解——类封装复现,深度学习,pytorch,python

BN体系理解——类封装复现,深度学习,pytorch,python BN体系理解——类封装复现,深度学习,pytorch,python

BN体系理解——类封装复现,深度学习,pytorch,python 文章来源地址https://www.toymoban.com/news/detail-726683.html

from pathlib import Path
from typing import Optional

import torch
import torch.nn as nn
from torch import Tensor


class BN(nn.Module):
    def __init__(self,num_features,momentum=0.1,eps=1e-8):##num_features是通道数
        """
        初始化方法
        :param num_features:特征属性的数量,也就是通道数目C
        """
        super(BN, self).__init__()
        ##register_buffer:将属性当成parameter进行处理,唯一的区别就是不参与反向传播的梯度求解
        self.register_buffer('running_mean', torch.zeros(1, num_features, 1, 1))
        self.register_buffer('running_var', torch.zeros(1, num_features, 1, 1))
        self.running_mean: Optional[Tensor]
        self.running_var: Optional[Tensor]
        self.running_mean=torch.zeros([1,num_features,1,1])
        self.running_var=torch.zeros([1,num_features,1,1])
        self.gamma=nn.Parameter(torch.ones([1,num_features,1,1]))
        self.beta=nn.Parameter(torch.zeros(1,num_features,1,1))
        self.eps=eps
        self.momentum=momentum


    def forward(self,x):
        """
        前向过程
        output=(x-μ)/α*γ+β
        :param x: [N,C,H,W]
        :return: [N,C,H,W]
        """
        if self.training:
            #训练阶段--》使用当前批次的数据
            _mean=torch.mean(x,dim=(0,2,3),keepdim=True)
            _var = torch.var(x, dim=(0, 2, 3), keepdim=True)
            #将训练过程中的均值和方差保存下来--方便推理的时候使用--》滑动平均
            self.running_mean=self.momentum*self.running_mean+(1.0-self.momentum)*_mean
            self.running_var=self.momentum*self.running_var+(1.0-self.momentum)*_var
        else:
            #推理阶段-->使用的是训练过程中的累积数据
            _mean=self.running_mean
            _var=self.running_var
        z=(x-_mean)/torch.sqrt(_var+self.eps)*self.gamma+self.beta
        return z

if __name__ == '__main__':
    torch.manual_seed(28)
    path_dir=Path("./output/models")
    path_dir.mkdir(parents=True,exist_ok=True)
    device=torch.device("cuda" if torch.cuda.is_available() else "cpu")
    bn=BN(num_features=12)
    bn.to(device)#只针对子模块和参数进行转换



    #模拟训练过程
    bn.train()
    xs=[torch.randn(8,12,32,32).to(device) for _ in range(10)]
    for _x in xs:
        bn(_x)

    print(bn.running_mean.view(-1))
    print(bn.running_var.view(-1))

    #模拟推理过程
    bn.eval()
    _r=bn(xs[0])
    print(_r.shape)

    bn=bn.cpu()#保存都是以cpu保存,恢复再自己转回GPU上
    #模拟模型保存
    torch.save(bn,str(path_dir/'bn_model.pkl'))
    #state_dict:获取当前模块的所有参数(Parameter+register_buffer)
    torch.save(bn.state_dict(),str(path_dir/"bn_params.pkl"))

    #pt结构的保存
    traced_script_module=torch.jit.trace(bn.eval(),xs[0].cpu())
    traced_script_module.save("./output/bn_model.pt")


    #模拟模型恢复
    bn_model=torch.load(str(path_dir/"bn_model.pkl"),map_location='cpu')
    bn_params=torch.load(str(path_dir/"bn_params.pkl"),map_location='cpu')
    print(len(bn_params))

到了这里,关于BN体系理解——类封装复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch学习笔记(8):正则化(L1、L2、Dropout)与归一化(BN、LN、IN、GN)

     一、正则化之weight_decay(L2正则) 1.1 正则化及相关概念 1.2 正则化策略(L1、L2) (1)L1正则化 (2)L2正则化 1.3 L2正则项——weight_decay 二、正则化之Dropout 2.1 Dropout概念 2.2 nn.Dropout  三、归一化之Batch Normalization(BN层) 3.1 Batch Normalization介绍 3.2 Pytorch的Batch Normalization 1d

    2024年02月04日
    浏览(43)
  • 【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别

    归一化(Normalization) 方法 :指的是把 不同维度的特征 (例如序列特征或者图像的特征图等)转换为相同或相似的尺度范围内的方法,比如把数据特征映射到[0, 1]或[−1, 1]区间内,或者映射为服从均值为0、方差为1的标准正态分布。 那为什么要进行归一化? 样本特征由于 来源

    2024年02月14日
    浏览(48)
  • 深度学习必备书籍——《Python深度学习 基于Pytorch》

    作为一名机器学习|深度学习的博主,想和大家分享几本 深度学习 的书籍,让大家更快的入手深度学习,成为AI达人!今天给大家介绍的是: 《Python深度学习 基于Pytorch》 在人工智能时代,如何尽快掌握人工智能的核心—深度学习呢?相信这是每个欲进入此领域的人面临的主

    2023年04月09日
    浏览(90)
  • python 理解BN、LN、IN、GN归一化、分析torch.nn.LayerNorm()和torch.var()工作原理

    目录   前言: 简言之BN、LN、IN、GN等归一化的区别: 批量归一化(Batch Normalization,BN) 优点 缺点 计算过程 层归一化(Layer Normalization,LN) 优点  计算过程 总结 分析torch.nn.LayerNorm()工作原理 分析torch.var()工作原理 torch.var()函数  参数 参数 重点 最近在学习Vit(Vision Trans

    2023年04月16日
    浏览(38)
  • 《Python深度学习基于Pytorch》学习笔记

    有需要这本书的pdf资源的可以联系我~ 这本书不是偏向于非常详细的教你很多函数怎么用,更多的是交个基本使用,主要是后面的深度学习相关的内容。 1.Numpy提供两种基本的对象:ndarray(n维数组对象)(用于储存多维数据)和ufunc(通用函数对象,用于处理不同的数据)。

    2024年02月09日
    浏览(42)
  • 【Python】使用Anaconda创建PyTorch深度学习虚拟环境

    使用Anaconda Prompt 查看环境: 创建虚拟环境(python3.10): 激活创建的环境: 在虚拟环境内安装PyTorch: 【Python】CUDA11.7/11.8安装PyTorch三件套_cuda 11.6对应pytorch-CSDN博客 文章浏览阅读3.3w次,点赞29次,收藏169次。安装PyTorch_cuda 11.6对应pytorch https://blog.csdn.net/ericdiii/article/details/125

    2024年01月22日
    浏览(63)
  • 深度学习环境完整安装(Python+Pycharm+Pytorch cpu版)

            在这里,我们将引导您逐步完成深度学习环境的完整安装,助您踏上从Python到PyTorch的探索之旅。通过本博客,您将轻松掌握如何设置Python环境、使用Pycharm进行开发以及安装Pytorch,成为一名具备完整深度学习环境的实践者。让我们一起开始吧! 文章目录(如果有会的

    2024年02月03日
    浏览(51)
  • 深度学习环境配置系列文章(二):Anaconda配置Python和PyTorch

    第一章 专业名称和配置方案介绍 第二章 Anaconda配置Python和PyTorch 第三章 配置VS Code和Jupyter的Python环境 第四章 配置Windows11和Linux双系统 第五章 配置Docker深度学习开发环境 Anaconda有着强大的包管理和环境管理的功能,使用后可以方便地使用和切换不同版本的Python和PyTorch等科学

    2024年01月23日
    浏览(61)
  • Python与深度学习:Keras、PyTorch和Caffe的使用和模型设计

      深度学习已经成为当今计算机科学领域的热门技术,而Python则是深度学习领域最受欢迎的编程语言之一。在Python中,有多个深度学习框架可供选择,其中最受欢迎的包括Keras、PyTorch和Caffe。本文将介绍这三个框架的使用和模型设计,帮助读者了解它们的优势、特点和适用场

    2024年02月09日
    浏览(39)
  • BN,LN,IN,GN的理解和用法

    绿色区域表示将该区域作用域(四种方法都贯穿了w,h维度) ,即将该区域数值进行归一化,变为均值为0,标准差为1。BN的作用区域时N,W,H,表示一个batch数据的每一个通道均值为0,标准差为1;LN则是让每个数据的所有channel的均值为0,标准差为1。IN表示对每个数据的每个通道的均

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包