nn.BatchNorm中affine参数的作用

2024-05-15 21:04

本文主要是介绍nn.BatchNorm中affine参数的作用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在PyTorch的nn.BatchNorm2d中,affine参数决定是否在批归一化(Batch Normalization)过程中引入可学习的缩放和平移参数。

BN层的公式如下,

\hat{x}=\frac{x-\mu _{batch}}{\sqrt{\sigma _{batch}^{2}+\xi }}

affine参数决定是否在批归一化之后应用一个可学习的线性变换,即缩放和平移。具体来说,如果 affine=True,批归一化层会有两个额外的可学习参数:缩放参数γ(初始值为1)和平移参数β(初始值为0),归一化后的输出变为,

y=\gamma \hat{x}+\beta

若affine=False,则γ和β都为None。相关的源码定义如下,

self.affine = affine
if self.affine:self.weight = Parameter(torch.empty(num_features, **factory_kwargs))self.bias = Parameter(torch.empty(num_features, **factory_kwargs))
else:self.register_parameter("weight", None)self.register_parameter("bias", None)if self.affine:init.ones_(self.weight)init.zeros_(self.bias)

以下是简单的代码示例,

import torch
import torch.nn as nnbn_affine = nn.BatchNorm2d(num_features=3, affine=True)
print("bn_affine γ:", bn_affine.weight)
print("bn_affine β:", bn_affine.bias)
"""
bn_affine.weight
Parameter containing:
tensor([1., 1., 1.], requires_grad=True)bn_affine.bias
Parameter containing:
tensor([0., 0., 0.], requires_grad=True)
"""bn_no_affine = nn.BatchNorm2d(num_features=3, affine=False)
print("bn_no_affine γ:", bn_affine.weight)
print("bn_no_affine β:", bn_affine.bias)
"""
None
None
"""

这篇关于nn.BatchNorm中affine参数的作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992915

相关文章

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

关于命令行参数argv(《学习OpenCV》)

在《学习OpenCV》这本书中,很多示例代码都用到了命令行参数。作为新手,之前总是很困扰,不知道怎么用。偶然的机会终于略知一二了。 在Visual Studio中,我们可以自行设置命令行参数。 如在这个示例程序中,我们想把图像存入argv[1]。 方法如下: 依次点击,项目、属性、配置属性、调试、命令参数。出现下面的界面: 然后进行编辑,即输入图像路径。如:E:\Lena.jpg

Service在Android中的作用:技术难点、面试官关注点、回答吸引力与代码举例

在Android开发中,Service是一个重要的后台服务组件,它允许应用程序在后台执行长时间运行的操作,而无需与用户进行直接交互。Service在多种场景下发挥着关键作用,下面我们将从技术难点、面试官关注点、回答吸引力和代码举例四个方面,对Service的作用进行详细阐述。 一、技术难点 生命周期管理:Service的生命周期相对独立,与Activity和Fragment等组件不同。因此

#ifndef #define #endif 和 extern C的作用

ifndef #define #endif 防止头文件被重复引用 被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include “a.h” 和#include "c.h"此时就会造成c.h重复引用。 头文件被重复引用引起的后果: 有些头文件重复引用只是

Linux IPC 参数设定,echo 80 /proc/...

文章转自 http://blog.chinaunix.net/uid-22287947-id-1775633.html Linux IPC 参数设定- 命令方式: echo 80 > /proc/sys/vm/overcommit_ratio, etc MSGMNB  每个消息队列的最大字节限制。 MSGMNI  整个系统的最大数量的消息队列。 MSGGSZ  消息片断的大

mysql中in参数过多该如何优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in('1022044','1009786') 方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list = new ArrayList<>();for (int i = 0;

虚拟机常用参数汇总

内存分配相关 -Xmx 堆的大小上限 -Xms 堆区内存初始内存分配的大小 -XX:MaxPermSize 永久代上限 -XX:SurvivorRatio Eden与Survivor区的比例 -XX:+/-UseTLAB 是否使用TLAB来创建对象 -XX:PretenureSizeThreshold 晋升老年代对象大小 -XX:NewRatio 新生代(Eden+2S)和老年代的

linux关于epoll概述(各项组成,以及作用)

在 Linux 中,多个进程可以各自创建自己的 epoll 对象,每个进程都有独立的 epoll 实例,即拥有独立的 eventpoll 结构体和相关的数据结构(如红黑树、就绪列表等)。 当一个进程调用 epoll_create 函数时,Linux 内核会为该进程创建一个 eventpoll 对象。这个对象用于管理该进程所关注的文件描述符及其相关事件。 每个进程通过 epoll_ctl 函数向

C#启动另外一个C#程序,并传递参数

第一个程序:             using System.ComponentModel; using System.IO;         private void button1_Click(object sender, EventArgs e)         {             string target = Path.GetDirectory