pytorch中对nn.BatchNorm2d()函数的理解

pytorch中对BatchNorm2d函数的理解

  • 简介
  • 计算
  • [3. Pytorch的nn.BatchNorm2d()函数](#3. Pytorch的nn.BatchNorm2d()函数)
  • [4 代码示例](#4 代码示例)

简介

机器学习中,进行模型训练之前,需对数据做归一化处理,使其分布一致。在深度神经网络训练过程中,通常一次训练是一个batch,而非全体数据。每个batch具有不同的分布产生了internal covarivate shift问题------在训练过程中,数据分布会发生变化,对下一层网络的学习带来困难。Batch Normalization强行将数据拉回到均值为0,方差为1的正太分布上,一方面使得数据分布一致,另一方面避免梯度消失。

计算

如图所示:

3. Pytorch的nn.BatchNorm2d()函数

其主要需要输入4个参数:

(1)num_features:输入数据的shape一般为[batch_size, channel, height, width], num_features为其中的channel;

(2)eps: 分母中添加的一个值,目的是为了计算的稳定性,默认:1e-5;

(3)momentum: 一个用于运行过程中均值和方差的一个估计参数,默认值为0.1.

(4)affine:当设为true时,给定可以学习的系数矩阵 γ \gamma γ和 β \beta β

4 代码示例

复制代码
import torch

data = torch.ones(size=(2, 2, 3, 4))
data[0][0][0][0] = 25
print("data = ", data)

print("\n")

print("=========================使用封装的BatchNorm2d()计算================================")
BN = torch.nn.BatchNorm2d(num_features=2, eps=0, momentum=0)
BN_data = BN(data)
print("BN_data = ", BN_data)

print("\n")

print("=========================自行计算================================")
x = torch.cat((data[0][0], data[1][0]), dim=1)      # 1.将同一通道进行拼接(即把同一通道当作一个整体)
x_mean = torch.Tensor.mean(x)                       # 2.计算同一通道所有制的均值(即拼接后的均值)
x_var = torch.Tensor.var(x, False)                  # 3.计算同一通道所有制的方差(即拼接后的方差)

# 4.使用第一个数按照公式来求BatchNorm后的值
bn_first = ((data[0][0][0][0] - x_mean) / ( torch.pow(x_var, 0.5))) * BN.weight[0] + BN.bias[0]
print("bn_first = ", bn_first)


相关推荐
拓端研究室20 分钟前
视频讲解|核密度估计朴素贝叶斯:业务数据分类—从理论到实践
人工智能·分类·数据挖掘
灵智工坊LingzhiAI24 分钟前
人体坐姿检测系统项目教程(YOLO11+PyTorch+可视化)
人工智能·pytorch·python
昨日之日200628 分钟前
Video Background Remover V3版 - AI视频一键抠像/视频换背景 支持50系显卡 一键整合包下载
人工智能·音视频
SHIPKING3931 小时前
【机器学习&深度学习】什么是下游任务模型?
人工智能·深度学习·机器学习
子燕若水5 小时前
Unreal Engine 5中的AI知识
人工智能
极限实验室6 小时前
Coco AI 实战(一):Coco Server Linux 平台部署
人工智能
杨过过儿7 小时前
【学习笔记】4.1 什么是 LLM
人工智能
巴伦是只猫7 小时前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
大千AI助手7 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
AI生存日记7 小时前
百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署
人工智能·百度·开源·open ai大模型