手动计算BatchNorm, 手动计算LayerNorm, 手动计算GroupNorm, 手动计算InstanceNorm

接上一篇:
LayerNorm的图是不是画错了

这里手动计算 LN,本篇把我前两天闲的没事干写的验证代码放上了,还是上一篇的问题,有木有大佬解决一下我上一篇的问题,LayerNorm的图是画错了,还是我理解错了

1. 手动计算BN

python 复制代码
import torch
import torch.nn as nn

torch.manual_seed(1107)
# x = torch.arange(4).float().reshape(1, 2, 1, 2)  # 假设的输入
x = torch.rand(3, 32, 30, 32)

# 实例化BatchNorm2d
m = nn.BatchNorm2d(32, momentum=1)
m.train()  # 设置为评估模式

# m.running_var = 0

# 使用BatchNorm2d计算
y = m(x)

# 手动计算BatchNorm2d
x_mean = x.mean(dim=[0, 2, 3], keepdim=True)
x_var = x.var(dim=[0, 2, 3], keepdim=True, unbiased=False)
eps = m.eps


y_manual = (x - x_mean) / ((x_var + eps).sqrt())

# 检查两种方法的输出是否一致
# print("使用BatchNorm2d的结果:", y)
# print("手动计算的结果:", y_manual)
print("结果是否一致:", torch.allclose(y, y_manual, atol=1e-6))

2. 手动计算GN

python 复制代码
import torch
import torch.nn as nn

torch.manual_seed(1107)

num_channels = 64  # 确保这个数可以被num_groups整除
# 假设x的形状是(B, C, H, W),这里我们按照通常的卷积神经网络输入布局
x = torch.rand(32, num_channels, 256, 256)  # 修改x的形状以适配GroupNorm的输入需求

# 定义组数G,每组的通道数C/G需要是整数
num_groups = 32


m = nn.GroupNorm(
    num_groups=num_groups, num_channels=num_channels, eps=1e-5, affine=False
)
m.eval()  # 设置为评估模式

y = m(x)

# 手动计算GroupNorm
C_per_group = num_channels // num_groups

x = x.view(32, num_groups, C_per_group, 256, 256)  # 重塑x以便可以对每组进行操作
x_mean = x.mean(dim=[2, 3, 4], keepdim=True)
x_var = x.var(dim=[2, 3, 4], keepdim=True, unbiased=False)
eps = m.eps

y_manual = (x - x_mean) / ((x_var + eps).sqrt())
y_manual = y_manual.view(32, num_channels, 256, 256)  # 将y_manual的形状重塑回原始形状

print("结果是否一致:", torch.allclose(y, y_manual, atol=1e-6))

3. 手动计算IN

python 复制代码
import torch
import torch.nn as nn

torch.manual_seed(1107)

# 假设x的形状是(B, C, H, W)
x = torch.rand(32, 256, 40, 40)  # 添加一个维度以匹配四维输入

m = nn.InstanceNorm2d(256, affine=False, momentum=1)
m.eval()  # 设置为评估模式

y = m(x)

# 手动计算LayerNorm
x_mean = x.mean(dim=[2, 3], keepdim=True)
x_var = x.var(dim=[2, 3], keepdim=True, unbiased=False)
eps = m.eps

y_manual = (x - x_mean) / ((x_var + eps).sqrt())

print("结果是否一致:", torch.allclose(y, y_manual, atol=1e-6))
相关推荐
Haoxuekeji18 分钟前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai
视觉AI1 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
科技发布1 小时前
拓氪科技一站式品牌营销平台使用手册 舆情风险预警管理教程
人工智能·科技
潜龙95271 小时前
AI时代下WebUI自动化实施架构图
人工智能·webui
酉鬼女又兒1 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
城事漫游Molly1 小时前
科研数据可视化的5步AI工作流:从原始数据到发表级图表
人工智能·信息可视化·数据分析·prompt·ai for science·科研数据绘图·博士生必读
To_OC1 小时前
跑了个最简 RAG demo 后,我终于搞懂向量检索那堆分数到底啥意思
人工智能·llm·agent
147API2 小时前
OpenAI新增工作区Admin keys,管理自动化怎么拆权限
运维·人工智能·自动化·openai·api
触底反弹2 小时前
🧠 别再让 AI 裸奔了!用 Skills 让 AI 秒变专属员工
人工智能
科技新芯2 小时前
蚂蚁集团发布三层AI布局,智能体商业落地提速
人工智能