IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 对BatchNorm2d的理解 -> 正文阅读

[人工智能]对BatchNorm2d的理解

简介

网上关于BN处理的说明有很多,它的前身就是白化处理,但是白化处理需要消除特征之间的相关性(使用PCA降维,矩阵分解等),这样比较消耗时间,然后对每一维特征的样本进行归一化,就是将其映射到均值为0,标准差为1的空间上。 BN汲取了白化处理的思想,但是BN的特点是进行批量归一化,比如一个形状为[N,C,H,W]的输入数据,它针对每一维特征进行样本大小为NxHxW的归一化操作,将该维特征的样本空间进行一个标准映射。为了验证我的理解,我做了实验一下实验。

准备数据

input1: 一维特征,batch=2的tensor
input2: 一维特征,batch=2的tensor
input: 二维特征,batch=2的tensor

import numpy as np
import torch
m1 = torch.nn.BatchNorm2d(1)
m2 = torch.nn.BatchNorm2d(2)
input1 = torch.randint(5,[2,1,2,2],dtype=torch.float32)
input2 = torch.randint(5,[2,1,2,2],dtype=torch.float32)
input = torch.cat((input1,input2),1)
print('input size: -----------------')
print(input.size())
print('input1: -----------------')
print(input1)
print('input2: -----------------')
print(input2)
print('input: -----------------')
print(input)

'''
input size: -----------------
torch.Size([2, 2, 2, 2])
input1: -----------------
tensor([[[[3., 3.],
          [1., 1.]]],


        [[[2., 2.],
          [4., 1.]]]])
input2: -----------------
tensor([[[[2., 1.],
          [2., 2.]]],


        [[[1., 1.],
          [4., 1.]]]])
input: -----------------
tensor([[[[3., 3.],
          [1., 1.]],

         [[2., 1.],
          [2., 2.]]],


        [[[2., 2.],
          [4., 1.]],

         [[1., 1.],
          [4., 1.]]]])
'''

验证

通过实验发现,使用BN对input1操作的结果out1,对input2操作的结果out2,将out1和out2沿维度特征拼接的结果正好等于BN对input操作的结果。

out1 = m1(input1)
print('均值:'+str(torch.mean(out1)))
print('标准差:'+str(torch.std(out1)))
out2 = m1(input2)
out = m2(input)
print(out1)
print('#'*80+'手动计算')
# torch.std() 与 np.std() 结果不一样,torch.std()计算平均是除以(n-1),而np.std()是除以n
out1_cal = (input1-torch.mean(input1))/torch.tensor(input1.numpy().std())
print(out1_cal)
print('#'*100)
print(out2)
print('#'*80+'手动计算')
out2_cal = (input2-torch.mean(input2))/torch.tensor(input2.numpy().std())
print(out2_cal)
print('#'*100)
print(out)

'''
均值:tensor(1.4901e-08, grad_fn=<MeanBackward0>)
标准差:tensor(1.0690, grad_fn=<StdBackward0>)
tensor([[[[ 0.8307,  0.8307],
          [-1.0681, -1.0681]]],


        [[[-0.1187, -0.1187],
          [ 1.7802, -1.0681]]]], grad_fn=<NativeBatchNormBackward>)
################################################################################手动计算
tensor([[[[ 0.8307,  0.8307],
          [-1.0681, -1.0681]]],


        [[[-0.1187, -0.1187],
          [ 1.7802, -1.0681]]]])
####################################################################################################
tensor([[[[ 0.2582, -0.7746],
          [ 0.2582,  0.2582]]],


        [[[-0.7746, -0.7746],
          [ 2.3238, -0.7746]]]], grad_fn=<NativeBatchNormBackward>)
################################################################################手动计算
tensor([[[[ 0.2582, -0.7746],
          [ 0.2582,  0.2582]]],


        [[[-0.7746, -0.7746],
          [ 2.3238, -0.7746]]]])
####################################################################################################
tensor([[[[ 0.8307,  0.8307],
          [-1.0681, -1.0681]],

         [[ 0.2582, -0.7746],
          [ 0.2582,  0.2582]]],


        [[[-0.1187, -0.1187],
          [ 1.7802, -1.0681]],

         [[-0.7746, -0.7746],
          [ 2.3238, -0.7746]]]], grad_fn=<NativeBatchNormBackward>)
'''

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:10:46  更:2021-07-15 16:12:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 9:48:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码