当前位置: 首页 > news >正文

google网站建设网站开发答辩ppt

google网站建设,网站开发答辩ppt,推广模式怎么写,wordpress默认logo图片路径PyTorch中Batch Normalization1d的实现与手动验证 一、介绍 Batch Normalization(批归一化)是深度学习中常用的技术,用于加速训练并减少对初始化的敏感性。本文将通过PyTorch内置函数和手动实现两种方式,展示如何对三维输入张量…

PyTorch中Batch Normalization1d的实现与手动验证

一、介绍

Batch Normalization(批归一化)是深度学习中常用的技术,用于加速训练并减少对初始化的敏感性。本文将通过PyTorch内置函数和手动实现两种方式,展示如何对三维输入张量(batch_size, seq_len, embedding_dim)进行批归一化,并验证两者的等价性。 想节省时间的读者直接看下图, 以自然语言处理任务为例。假设输入的维度是(bs, seq_len, embedding)。那么pytorch中的batchnorm1d会对淡蓝色的矩阵做归一化,最后得到embedding长度的均值的方差。接下来进行编程验证。

在这里插入图片描述

二、PyTorch内置实现

1. 输入维度调整

PyTorch的nn.BatchNorm1d要求输入维度为 (batch_size, num_features, ...),因此需要将原始输入的维度 (batch_size, seq_len, embedding_dim) 转置为 (batch_size, embedding_dim, seq_len)

import torch
import torch.nn as nnbatch_size = 8
seq_len = 10
embedding_dim = 32# 创建输入张量
x = torch.randn(batch_size, seq_len, embedding_dim)# 转置输入以适应BatchNorm1d
x_pytorch = x.transpose(1, 2)  # shape变为 (batch_size, embedding_dim, seq_len)

2. 使用nn.BatchNorm1d

初始化BatchNorm1d层,其参数num_features设置为embedding_dim

bn_pytorch = nn.BatchNorm1d(embedding_dim)# 前向传播
out_pytorch = bn_pytorch(x_pytorch)
out_pytorch = out_pytorch.transpose(1, 2)  # 转换回原始维度

三、手动实现Batch Normalization

1. 计算均值和方差

手动实现需沿着batchseq_len维度(前两个维度)计算均值和方差:

def manual_batchnorm(x, gamma, beta, eps=1e-5):# 计算均值和方差(沿着batch和seq_len维度)mean = torch.mean(x, dim=(0, 1), keepdim=True)var = torch.var(x, dim=(0, 1), keepdim=True, unbiased=False)  # 使用分母为n# 标准化x_normalized = (x - mean) / torch.sqrt(var + eps)# 应用缩放和平移参数return gamma * x_normalized + beta

2. 获取PyTorch的参数

为确保与PyTorch实现一致,需获取其gamma(缩放参数)和beta(偏移参数),并调整形状:

gamma = bn_pytorch.weight.view(1, 1, embedding_dim)  # 形状为 (1, 1, embedding_dim)
beta = bn_pytorch.bias.view(1, 1, embedding_dim)

3. 手动前向传播

直接使用原始输入张量:

out_manual = manual_batchnorm(x, gamma, beta)

四、验证一致性

通过比较PyTorch和手动实现的输出结果,验证两者是否等价:

print("是否相同:", torch.allclose(out_pytorch, out_manual))

输出结果

是否相同: True

五、关键点解析

  1. 维度调整

    • PyTorch的BatchNorm1d要求特征维度在第二位,因此需转置输入。
    • 手动实现无需转置,直接沿前两个维度计算。
  2. 方差计算

    • PyTorch的var默认使用无偏估计(分母为n-1),但BatchNorm1d使用分母为n,因此需设置unbiased=False
  3. 参数一致性

    • gammabeta需与PyTorch层的参数一致,通过调整形状确保广播正确。

六、完整代码

import torch
import torch.nn as nntorch.manual_seed(42)batch_size = 8
seq_len = 10
embedding_dim = 32# 创建输入张量
x = torch.randn(batch_size, seq_len, embedding_dim)# 使用PyTorch的BatchNorm1d
bn_pytorch = nn.BatchNorm1d(embedding_dim)
x_pytorch = x.transpose(1, 2)  # 转置为 (batch_size, embedding_dim, seq_len)
out_pytorch = bn_pytorch(x_pytorch)
out_pytorch = out_pytorch.transpose(1, 2)  # 转换回原始维度# 手动实现
def manual_batchnorm(x, gamma, beta, eps=1e-5):mean = torch.mean(x, dim=(0,1), keepdim=True)var = torch.var(x, dim=(0,1), keepdim=True, unbiased=False)x_normalized = (x - mean) / torch.sqrt(var + eps)return gamma * x_normalized + beta# 获取PyTorch的参数
gamma = bn_pytorch.weight.view(1,1,embedding_dim)
beta = bn_pytorch.bias.view(1,1,embedding_dim)out_manual = manual_batchnorm(x, gamma, beta)# 验证结果
print("是否相同:", torch.allclose(out_pytorch, out_manual))

七、总结

通过PyTorch内置函数和手动实现的对比,我们验证了两者在批归一化计算上的等价性。关键点在于维度调整、方差计算方式以及参数的正确应用。这种验证方法有助于理解批归一化的内部机制,同时确保手动实现的正确性。@TOC

http://www.dtcms.com/a/478909.html

相关文章:

  • 超越CNN:GCN如何重塑图像处理
  • A100云服务器租赁:边缘计算时代的算力新形态
  • 建设项目环评验收网站做网站都需要年服务费吗
  • js中 btoa 方法 和 atob方法介绍
  • 做网络写手 哪个网站比较好亚马逊deal网站怎么做
  • css布局的几种方式
  • 前端数值运算精度丢失问题及解决方案
  • 免费建站软件有哪些苏州建行网站首页
  • 极海APM32F107V6 移植FreeRTOS+CMSIS-RTOS V2
  • Centos Stream 8 搭建Cas Server
  • 营销型网站建设优化汽车电商网站建设
  • 网站建设中最基本的决策南昌网站建设和推广
  • 网页设计网站如何添加链接家庭网站建设
  • ModuleNotFoundError: No module named ‘conda_token‘
  • 长春哪家做网站做的好网站建设员是做什么的
  • Milvus部署在T4 GPU上,Dify检索性能可以提升多少?
  • 南阳手机网站推广h5网页设计软件
  • 戴森球的物理模拟
  • 基于springboot社区养老服务平台的设计与实现(附源码)
  • 晨光科技 网站建设北京优化网站
  • 简易水位报警器方案开发案例
  • 公司网站建设费用计入什么科目做网站主页
  • 最长子串和分配苹果问题
  • Ubuntu设置共享文件夹
  • 网站开发一个多少钱系统网站推广方案怎么做
  • 制作网站需要懂哪些重生北京上大学开网吧做网站的小说
  • 二级域名iis建立网站免费企业邮箱排名
  • Linux程序设计从入门到实战(价值198元)课程下载
  • Leetcode 3709. Design Exam Scores Tracker
  • 告别环境配置难题:GISBox如何让DWG转GeoJSON零门槛上手