返回顶部
首页 > 资讯 > 后端开发 > Python >python神经网络pytorch中BN运算操作自实现
  • 509
分享到

python神经网络pytorch中BN运算操作自实现

2024-04-02 19:04:59 509人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

BN 想必大家都很熟悉,来自论文: 《Batch NORMalization Accelerating Deep Network Training by Reducing Inter

BN 想必大家都很熟悉,来自论文:

《Batch NORMalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》

也是面试常考察的内容,虽然一行代码就能搞定,但是还是很有必要用代码自己实现一下,也可以加深一下对其内部机制的理解。

通用公式:

直奔代码:

首先是定义一个函数,实现BN的运算操作:

def batch_norm(is_training, x, gamma, beta, moving_mean, moving_var, eps=1e-5, momentum=0.9):
    # 判断当前模式是训练模式还是预测模式
    if not is_training:
        # 如果是在预测模式下,直接使用传入的移动平均所得的均值和方差
        x_hat = (x - moving_mean) / torch.sqrt(moving_var + eps)
    else:
        if len(x.shape) == 2:
            # 使用全连接层的情况,计算特征维上的均值和方差
            mean = x.mean(dim=0)
            var = ((x - mean) ** 2).mean(dim=0)
        else:
            # 使用二维卷积层的情况,计算通道维上(axis=1)的均值和方差。这里我们需要保持
            # x的形状以便后面可以做广播运算
            mean = x.mean(dim=0, keepdim=True).mean(dim=2, keepdim=True).mean(dim=3, keepdim=True)
            var = ((x - mean) ** 2).mean(dim=0, keepdim=True).mean(dim=2, keepdim=True).mean(dim=3, keepdim=True)
        # 训练模式下用当前的均值和方差做标准化
        x_hat = (x - mean) / torch.sqrt(var + eps)
        # 更新移动平均的均值和方差
        moving_mean = momentum * moving_mean + (1.0 - momentum) * mean
        moving_var = momentum * moving_var + (1.0 - momentum) * var
    x = gamma * x_hat + beta  # 拉伸和偏移
    return Y, moving_mean, moving_var

然后再定义一个类,就是常用的集成nn.Module的类了。

这里说明三点:

  • 在卷积上的BN实现,是在 Batch,W,H上进行归一化操作的,也就是BWH拉成一个维度求均值和方差,均值和方差以及beta和gamma的尺寸为channel。当然其他各种N,包括IN,LN,GN都是包含WH维度的。
  • 不需要计算梯度和参与梯度更新的参数,可以用self.reGISter_buffer直接注册就可以了;注册的变量同样使用;
  • 被包成nn.Parameter的参数,需要求梯度,但是不能加cuda(),否则会报错。 如果想在gpu上运算,可以将整个类的实例加.cuda()。例如 bn = BatchNorm(**param),bn=bn.cuda().
class BatchNorm(nn.Module):
    def __init__(self, num_features, num_dims):
        super(BatchNorm, self).__init__()
        if num_dims == 2: # 同样是判断是全连层还是卷积层
            shape = (1, num_features)
        else:
            shape = (1, num_features, 1, 1)
        # 参与求梯度和迭代的拉伸和偏移参数,分别初始化成0和1
        self.gamma = nn.Parameter(torch.ones(shape))
        self.beta = nn.Parameter(torch.zeros(shape))
        # 不参与求梯度和迭代的变量,全初始化成0
        self.register_buffer('moving_mean', torch.zeros(shape))
        self.register_buffer('moving_var', torch.ones(shape))

    def forward(self, x):
        # 如果X不在内存上,将moving_mean和moving_var复制到X所在显存上
        if self.moving_mean.device != x.device:
            self.moving_mean = self.moving_mean.to(X.device)
            self.moving_var = self.moving_var.to(X.device)
        # 保存更新过的moving_mean和moving_var, Module实例的traning属性默认为true, 调用.eval()后设成false
        y, self.moving_mean, self.moving_var = batch_norm(self.training,
            x, self.gamma, self.beta, self.moving_mean,
            self.moving_var, eps=1e-5, momentum=0.9)
        return x

以上就是python神经网络PyTorch中BN运算操作自实现的详细内容,更多关于pytorch BN运算的资料请关注编程网其它相关文章!

--结束END--

本文标题: python神经网络pytorch中BN运算操作自实现

本文链接: https://lsjlt.com/news/117751.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python神经网络pytorch中BN运算操作自实现
    BN 想必大家都很熟悉,来自论文: 《Batch Normalization Accelerating Deep Network Training by Reducing Inter...
    99+
    2024-04-02
  • python神经网络学习利用PyTorch进行回归运算
    目录学习前言PyTorch中的重要基础函数1、class Net(torch.nn.Module)神经网络的构建:2、optimizer优化器3、loss损失函数定义4、训练过程全部...
    99+
    2024-04-02
  • pytorch怎么实现bp神经网络
    要在PyTorch中实现一个BP神经网络,需要遵循以下步骤: 定义神经网络结构:首先,需要定义神经网络的结构,包括输入层、隐藏层和...
    99+
    2024-04-08
    pytorch
  • python实现神经网络
    声明:本文是A Neural Network in 11 lines of Python学习总结而来,关于更详细的神经网络的介绍可以参考从感知机到人工神经网络。 如果你读懂了下面的文章,你会对神经网络有更深刻的认识,有任何问题,请...
    99+
    2023-01-31
    神经网络 python
  • 神经网络——Python实现BP神经网络算法(理论+例子+程序)
    一、基于BP算法的多层感知器模型 采用BP算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,以图3-15所示的单隐层网络的应用最为普遍。一般习惯将单隐层前馈网称为三层感知器,所谓三层包括了输入层、隐层和输出层。 算法...
    99+
    2023-08-31
    神经网络 算法 python 深度学习
  • pytorch简单实现神经网络功能
    目录一、基本(1)利用pytorch建好的层进行搭建(2)使用网络二、进阶一、基本 (1)利用pytorch建好的层进行搭建 import torch from torch impo...
    99+
    2024-04-02
  • pytorch动态神经网络(拟合)实现
    (1)首先要建立数据集 import torch #引用torch模块 import matplotlib.pyplot as plt #引用画图模块 x=torch.uns...
    99+
    2024-04-02
  • PyTorch中的卷积神经网络怎么实现
    在PyTorch中,可以使用torch.nn模块中的Conv2d类来实现卷积神经网络。以下是一个简单的示例,展示如何在PyTorch...
    99+
    2024-03-05
    PyTorch
  • Python深度学习pytorch神经网络图像卷积运算详解
    目录互相关运算卷积层特征映射由于卷积神经网络的设计是用于探索图像数据,本节我们将以图像为例。 互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cros...
    99+
    2024-04-02
  • pytorch动态神经网络的实现方法
    这篇文章主要介绍了pytorch动态神经网络的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(1)首先要建立数据集import torch &nb...
    99+
    2023-06-14
  • python神经网络Pytorch中Tensorboard函数使用
    目录所需库的安装常用函数功能1、SummaryWriter()2、writer.add_graph()3、writer.add_scalar()4、tensorboard --log...
    99+
    2024-04-02
  • PyTorch+PyG实现图神经网络经典模型目录
    前言 大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码...
    99+
    2023-08-31
    pytorch 神经网络 python 人工智能 深度学习
  • 基于Pytorch的神经网络之Regression的实现
    目录1.引言2.神经网络搭建2.1准备工作2.2搭建网络2.3训练网络3.效果4.完整代码1.引言 我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与分类,现在让我们...
    99+
    2024-04-02
  • 基于Pytorch的神经网络如何实现Regression
    这篇文章将为大家详细讲解有关基于Pytorch的神经网络如何实现Regression,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.引言我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与...
    99+
    2023-06-29
  • matlab神经网络算法怎么实现
    在MATLAB中,可以使用神经网络工具箱来实现神经网络算法。以下是一个简单的例子,展示了如何使用MATLAB实现一个简单的前馈神经网...
    99+
    2023-10-12
    matlab
  • python神经网络使用tensorflow实现自编码Autoencoder
    目录学习前言antoencoder简介1、为什么要降维2、antoencoder的原理3、python中encode的实现全部代码学习前言 当你发现数据的维度太多怎么办!没关系,我们...
    99+
    2024-04-02
  • PyTorch实现卷积神经网络的搭建详解
    目录PyTorch中实现卷积的重要基础函数1、nn.Conv2d:2、nn.MaxPool2d(kernel_size=2)3、nn.ReLU()4、x.view()全部代码PyTo...
    99+
    2024-04-02
  • PyTorch中的神经网络Mnist分类任务怎么实现
    这篇“PyTorch中的神经网络Mnist分类任务怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PyTorch中的神...
    99+
    2023-07-05
  • Python中如何实现卷积神经网络
    这篇文章主要介绍了Python中如何实现卷积神经网络,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、卷积神经网络Yann LeCun 和Yoshua Bengio在1995...
    99+
    2023-06-15
  • 图卷积神经网络(GCN)综述与实现(PyTorch版)
    图卷积神经网络(GCN)综述与实现(PyTorch版) 本文的实验环境为PyTorch = 1.11.0 + cu113,PyG = 2.0.4,相关依赖库和数据集的下载请见链接。 一、图卷积神经...
    99+
    2023-09-28
    pytorch cnn 深度学习 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作