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

BN体系理解——类封装复现

 

 

 

 

 

from pathlib import Path
from typing import Optionalimport torch
import torch.nn as nn
from torch import Tensorclass BN(nn.Module):def __init__(self,num_features,momentum=0.1,eps=1e-8):##num_features是通道数"""初始化方法:param num_features:特征属性的数量,也就是通道数目C"""super(BN, self).__init__()##register_buffer:将属性当成parameter进行处理,唯一的区别就是不参与反向传播的梯度求解self.register_buffer('running_mean', torch.zeros(1, num_features, 1, 1))self.register_buffer('running_var', torch.zeros(1, num_features, 1, 1))self.running_mean: Optional[Tensor]self.running_var: Optional[Tensor]self.running_mean=torch.zeros([1,num_features,1,1])self.running_var=torch.zeros([1,num_features,1,1])self.gamma=nn.Parameter(torch.ones([1,num_features,1,1]))self.beta=nn.Parameter(torch.zeros(1,num_features,1,1))self.eps=epsself.momentum=momentumdef forward(self,x):"""前向过程output=(x-μ)/α*γ+β:param x: [N,C,H,W]:return: [N,C,H,W]"""if self.training:#训练阶段--》使用当前批次的数据_mean=torch.mean(x,dim=(0,2,3),keepdim=True)_var = torch.var(x, dim=(0, 2, 3), keepdim=True)#将训练过程中的均值和方差保存下来--方便推理的时候使用--》滑动平均self.running_mean=self.momentum*self.running_mean+(1.0-self.momentum)*_meanself.running_var=self.momentum*self.running_var+(1.0-self.momentum)*_varelse:#推理阶段-->使用的是训练过程中的累积数据_mean=self.running_mean_var=self.running_varz=(x-_mean)/torch.sqrt(_var+self.eps)*self.gamma+self.betareturn zif __name__ == '__main__':torch.manual_seed(28)path_dir=Path("./output/models")path_dir.mkdir(parents=True,exist_ok=True)device=torch.device("cuda" if torch.cuda.is_available() else "cpu")bn=BN(num_features=12)bn.to(device)#只针对子模块和参数进行转换#模拟训练过程bn.train()xs=[torch.randn(8,12,32,32).to(device) for _ in range(10)]for _x in xs:bn(_x)print(bn.running_mean.view(-1))print(bn.running_var.view(-1))#模拟推理过程bn.eval()_r=bn(xs[0])print(_r.shape)bn=bn.cpu()#保存都是以cpu保存,恢复再自己转回GPU上#模拟模型保存torch.save(bn,str(path_dir/'bn_model.pkl'))#state_dict:获取当前模块的所有参数(Parameter+register_buffer)torch.save(bn.state_dict(),str(path_dir/"bn_params.pkl"))#pt结构的保存traced_script_module=torch.jit.trace(bn.eval(),xs[0].cpu())traced_script_module.save("./output/bn_model.pt")#模拟模型恢复bn_model=torch.load(str(path_dir/"bn_model.pkl"),map_location='cpu')bn_params=torch.load(str(path_dir/"bn_params.pkl"),map_location='cpu')print(len(bn_params))

相关文章:

BN体系理解——类封装复现

from pathlib import Path from typing import Optionalimport torch import torch.nn as nn from torch import Tensorclass BN(nn.Module):def __init__(self,num_features,momentum0.1,eps1e-8):##num_features是通道数"""初始化方法:param num_features:特征…...

请求和响应的概述

请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。 响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应。 针对Servlet的每次请求&…...

(深度学习快速入门)A Gentle Introduction to Graph Neural Networks 笔记

博客链接沐神讲解视频文章目录 一:什么是图二:常见数据如何表示为图(1)图像(2)文本(3)Real WorldA:分子B:社交网络C:论文引用D:其他三:图涉及的任务(1)图级别任务(2)节点级别任务(3)边级别任务四:使用图数据的挑战...

VIM指令

vim的工作模式 vim一般有6种工作模式。 普通模式:使用vim打开一个文件时默认模式,也叫命令模式,允许用户通过各种命令浏览代码、滚屏等操作。 插入模式:也可以叫做编辑模式,在普通模式下敲击 i 、a 或 o 就进入插入模…...

Android 10.0 framework层实现app默认全屏显示

1.前言 在10.0的系统开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 frameworks\base\…...

【计算机网络黑皮书】传输层

【事先声明】 这是对于中科大的计算机网络的网课的学习笔记,感谢郑烇老师的无偿分享 书籍是《计算机网络(自顶向下方法 第6版)》 需要的可以私信我,无偿分享,课程简介下也有 课程链接 目录 传输服务与协议网络层与传输…...

轻量限制流量?阿里云轻量应用服务器月流量包收费说明

阿里云轻量应用服务器部分套餐限制月流量,轻量应用服务器按照套餐售卖,有的套餐限制月流量,有的不限制流量。像阿里云轻量2核2G3M带宽轻量服务器一年108元和轻量2核4G4M带宽一年297.98元12个月,这两款是不限制月流量的。阿里云百科…...

Linux手记

常用的配置文件 文件作用/etc/profile系统级别的shell配置文件,它包含了系统中所有用户的默认环境变量和系统级别的全局配置信息/etc/apt/apt.conf配置APT(Advanced Package Tool)软件包管理器的行为,包括代理等/etc/apt/sources…...

springboot配置

一、配置文件的加载顺序 SpringApplication从以下位置的application.properties文件加载属性,并将它们添加到Spring Environment中去,优先级如下: 当前目录的/config子目录(src\config)当前目录(跟src目录…...

大数据中的一些词汇解释

OLTP(online Transaction Prrocessing) OLTP是一个处理面向事务的数据的软件系统。术语“在线交易”是指实时完成活动,而不是批处理。此数据是结构化数据的常见来源,可作为许多分析过程的输入。OLTP交易讲究实时性,就…...

10月11-12日上课内容 Ansible

Ansible Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比…...

android studio 我遇到的Task :app:compileDebugJavaWithJavac FAILED问题及解决过程

前几天一个网友在学习我的一个小项目的时候,发现无法达到目的,在帮他解决问题的过程中发现他用的是最近的giraffe版本的as,我用的是老版本,没办法打开他的项目,没办法只能卸载我的as,安装了最近版的diraffe…...

PLC电梯控制系统

目录 PLC电梯控制系统 1电梯简介 1.1电梯的基本分类 1.1.1按用途分类 1.1.2 按驱动系统分类 1.2 电梯的型号 1.3电梯的主要参数及规格尺寸 1.4电梯控制技术 1.5常用交流调速电梯的特点 1.6电梯的工作原理 2 PLC可编程序控制器 2.1 PLC的起源与发展 2.2 PLC控制系统…...

FastAPI学习-27 使用@app.api_route() 设置多种请求方式

对同一个访问函数设置多个http 请求方式 api_route 使用 使用methods 参数设置请求方式 from fastapi import FastAPIapp FastAPI() app.api_route(/demo/b, methods[get, post]) async def demo2(): return {"msg": "demo2 success"}判断请求方式…...

08. 机器学习- 线性回归

文章目录 线性回归 LINEAR REGRESSION 从本次课程开始,大部分时候我将不再将打印结果贴出来了,因为太占用篇幅。小伙伴可以根据我的输出执行敲一遍代码来进行学习和验证。 同样是为了节省篇幅,我也不会再一行行那么仔细的解释代码了&#xff…...

好奇喵 | PT(Private Tracker)——什么是P2P,什么是BT,啥子是PT?

前言 有时候会听到别人谈论pt,好奇猫病又犯了,啥子是pt? PT——你有pt吗?啥是pt? 从BT开始 BitTorrent是一种点对点(P2P)文件共享协议,用于高速下载和上传大型文件。它允许用户通…...

【Node.js】crypto 模块

crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。 Nodejs用C/C实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。 只要密钥发…...

vue父组件向子组件传值的方法

Vue父组件向子组件传值的方法有以下几种&#xff1a; Props&#xff08;属性&#xff09;&#xff1a;在父组件中通过在子组件标签上绑定属性的方式传递数据。子组件可以通过props选项接收并使用这些属性。适用于父组件需要向子组件传递初始值的情况。 示例&#xff1a; <…...

MATLAB算法实战应用案例精讲-【优化算法】高尔夫优化算法(GOA)(附MATLAB代码实现)

前言 高尔夫优化算法(Golf Optimization Algorithm, GOA),用以解决现实世界中的复杂优化问题。该成果于2023年8月发表在SCI期刊Biomimetics 。高尔夫球是一项户外运动,在个人或团队的场地上展开,由专业球杆熟练操纵。这项运动的基本原则决定了它的本质——将球从起始点推向…...

数组的reduce和reduceRight方法

1.reduce方法可用接收两个参数&#xff1a; 第一个参数&#xff1a;为一个回调函数&#xff0c;此回调函数又可以有四个参数 第1个参数&#xff1a;为上一次回调函数return的结果&#xff0c;首次默认为第二个参数值&#xff0c;如果没有第二个参数值&#xff0c;则默认当前数…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...