【CNN记录】pytorch中BatchNorm2d

这篇具有很好参考价值的文章主要介绍了【CNN记录】pytorch中BatchNorm2d。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)

功能:对输入的四维数组进行批量标准化处理(归一化)
计算公式如下:
【CNN记录】pytorch中BatchNorm2d,DL,cnn,pytorch
对于所有的batch中样本的同一个channel的数据元素进行标准化处理,即如果有C个通道,无论batch中有多少个样本,都会在通道维度上进行标准化处理,一共进行C次

num_features:通道数
eps:分母中添加的值,目的是计算的稳定性(分母不出现0),默认1e-5
momentum:用于运行过程中均值方差的估计参数,默认0.1
【CNN记录】pytorch中BatchNorm2d,DL,cnn,pytorch

affine:设为true时,给定开易学习的系数矩阵r和b
track_running_stats:BN中存储的均值方差是否需要更新,true需要更新

举个例子

>import torch
>import torch.nn as nn

>input = torch.arange(0, 12, dtype=torch.float32).view(1, 3, 2, 2)
>print(m)
tensor([[[[ 0.,  1.],
          [ 2.,  3.]],

         [[ 4.,  5.],
          [ 6.,  7.]],

         [[ 8.,  9.],
          [10., 11.]]]])
>m= nn.BatchNorm2d(3)
>print(m.weight)
tensor([1., 1., 1.], requires_grad=True)
>print(m.bias)
tensor([0., 0., 0.], requires_grad=True)

>output = m(input)
>print(output)
tensor([[[[-1.3416, -0.4472],
          [ 0.4472,  1.3416]],

         [[-1.3416, -0.4472],
          [ 0.4472,  1.3416]],

         [[-1.3416, -0.4472],
          [ 0.4472,  1.3416]]]], grad_fn=<NativeBatchNormBackward0>)

上面是使用nn接口计算,现在我们拿第一个数据计算一下验证
公式:
【CNN记录】pytorch中BatchNorm2d,DL,cnn,pytorch

#先计算第一个通道的均值、方差
>first_channel = input[0][0] #第一个通道
tensor([[0., 1.],
        [2., 3.]])

#1、计算均值方差
>mean = torch.Tensor.mean(first_channel)
tensor(1.5000)  #均值
>var=torch.Tensor.var(first_channel,False)
tensor(1.2500) #方差
#2、按照公式计算
>bn_value  =((input[0][0][0][0] -mean)/(torch.pow(var,0.5)+m.eps))*m.weight[0]+m.bias[0]
#这里就是(0-1.5)/sqrt(1.25+1e-5)*1.0 + 1.0

tensor(-1.3416, grad_fn=<AddBackward0>) 

第一个值都是-1.3416,对上了,其他都是一样。

再来个batch_size>1的情况文章来源地址https://www.toymoban.com/news/detail-568239.html

#先把结果贴出来
tensor([[[[-1.2288, -1.0650],
          [-0.9012, -0.7373]],

         [[-1.2288, -1.0650],
          [-0.9012, -0.7373]],

         [[-1.2288, -1.0650],
          [-0.9012, -0.7373]]],


        [[[ 0.7373,  0.9012],
          [ 1.0650,  1.2288]],

         [[ 0.7373,  0.9012],
          [ 1.0650,  1.2288]],

         [[ 0.7373,  0.9012],
          [ 1.0650,  1.2288]]]], grad_fn=<NativeBatchNormBackward0>)

>input = torch.arange(0, 24, dtype=torch.float32).view(2, 3, 2, 2)
tensor([[[[ 0.,  1.],
          [ 2.,  3.]],

         [[ 4.,  5.],
          [ 6.,  7.]],

         [[ 8.,  9.],
          [10., 11.]]],


        [[[12., 13.],
          [14., 15.]],

         [[16., 17.],
          [18., 19.]],

         [[20., 21.],
          [22., 23.]]]])

>first_channel =input[:, 0, :, :]
tensor([[[ 0.,  1.],
         [ 2.,  3.]],

        [[12., 13.],
         [14., 15.]]])
>mean = torch.Tensor.mean(first_channel)
tensor(7.5000)
>var=torch.Tensor.var(first_channel,False)
tensor(37.2500)
#第1个batch中的第一个c
>print(((input[0][0][:][:] -mean)/(torch.pow(var,0.5)+m.eps))*m.weight[0]+m.bias[0])
tensor([[-1.2288, -1.0650],
        [-0.9012, -0.7373]], grad_fn=<AddBackward0>)
#第2个batch中的第一个c(共用c的weight、bias、mean、var)
>print(((input[1][0][:][:] -mean)/(torch.pow(var,0.5)+m.eps))*m.weight[0]+m.bias[0])
tensor([[0.7373, 0.9012],
        [1.0650, 1.2288]], grad_fn=<AddBackward0>)

到了这里,关于【CNN记录】pytorch中BatchNorm2d的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 在 FPGA 上通过 2D CNN 进行高效视频理解的 TSM 网络

    在这个项目中,展示了 Temporal-Shift-Module ( https://hanlab.mit.edu/projects/tsm/)在 FPGA 上解决视频理解问题的实用性和性能。 TSM 是一种网络结构,可以通过 2D CNN 有效学习时间关系。在较高级别上,这是通过一次对单个帧(在线 TSM)或多个帧(离线 TSM)执行推理并在这些张量流经网

    2024年02月10日
    浏览(27)
  • 基于小波时频图和2D-CNN的滚动轴承故障检测

    目录 一、研究思路  1、基于小波时频图和CNN的滚轴故障诊断方法的研究思路如下: 二、数据集介绍与数据处理   1、数据集介绍 2、数据集分割与合并 3、数据集分析 三、小波时频图导出 四、CNN网络的构建和测试 1、CNN网络构建  2、训练参数的优化 4、训练结果  1、基于小

    2023年04月19日
    浏览(36)
  • CNN实现手写数字识别(Pytorch)

    CNN(卷积神经网络)主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后,最后经过若干个全连接层获得最终的输出。 CNN的实现主要包括以下步骤: 数据加载与预处理 模型搭建 定义损失函数、优化器 模型训练 模型测试 以下基于Pytorch框

    2024年02月03日
    浏览(85)
  • Pytorch的CNN,RNN&LSTM

    拿二维卷积举例,我们先来看参数 卷积的基本原理,默认你已经知道了,然后我们来解释pytorch的各个参数,以及其背后的计算过程。 首先我们先来看卷积过后图片的形状的计算: 参数: kernel_size :卷积核的大小,可以是一个元组,也就是(行大小,列大小) stride : 移动步长

    2024年02月04日
    浏览(39)
  • 分类预测 | MATLAB实现1D-2D-CNN-GRU的多通道输入数据分类预测

    分类效果 基本介绍 结合1D时序-2D图像多模态融合的CNN-GRU故障识别算法,基于一维时序信号和二维图像多元信息融合的卷积神经网络结门控循环单元网络的数据分类预测/故障识别算法。要求2020版以上。 采用双支路输入,一路为图像输入经CNN提取特征,一路为特征序列输入经

    2024年02月12日
    浏览(28)
  • 【深入了解pytorch】PyTorch卷积神经网络(CNN)简介

    卷积神经网络(Convolutional Neural Network,CNN)是一种在计算机视觉任务中广泛应用的深度学习模型。它通过卷积层、池化层和全连接层等组件,能够有效地提取图像特征并实现高准确率的图像分类、目标检测和语义分割等任务。本文将详细介绍CNN的原理,并演示如何使用PyTor

    2024年02月16日
    浏览(31)
  • CNN从搭建到部署实战(pytorch+libtorch)

    下面的代码搭建了CNN的开山之作LeNet的网络结构。 运行代码,输出结果: 编写训练代码如下:16-18行解析参数;20-21行加载网络;23-24行定义损失函数和优化器;26-36行定义数据集路径和数据变换,加载训练集和测试集(实际上应该是验证集);37-57行for循环中开始训练num_epo

    2024年02月16日
    浏览(29)
  • 基于深度学习的图片上色(Opencv,Pytorch,CNN)

    文末附有源码下载地址。 灰度图自动上色 2.1 RGB 想要对灰度图片上色,首先要了解图像的格式,对于一副普通的图像通常为RGB格式的,即红、绿、蓝三个通道,可以使用opencv分离图像的三个通道,代码如下所示: 代码运行结果如下所示。 2.2 hsv hsv是图像的另一种格式,其中

    2024年02月01日
    浏览(32)
  • pytorch学习第五篇:NN与CNN代码实例

    这篇文章详细介绍了全链接神经网络实现方法,以及卷积的实现方法。最后我们发现,卷积的实现方法与全链接大同小异,因为 torch 为我们做了很多工作,我们来看看这两个有什么区别。 我们使用 torch 框架来实现两种神经网络,来对图形进行分类。 首先我们引入依赖包 下

    2024年02月06日
    浏览(41)
  • 利用pytorch自定义CNN网络(一):torchvision工具箱

    本文是利用pytorch自定义CNN网络系列的第一篇,主要介绍 torchvision工具箱及其使用,关于本系列的全文见这里。 笔者的运行环境:CPU (AMD Ryzen™ 5 4600U) + pytorch (1.13,CPU版) + jupyter; 本文所用到的资源:链接:https://pan.baidu.com/s/1WgW3IK40Xf_Zci7D_BVLRg 提取码:1212 torchvision是基于pyt

    2024年02月14日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包