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

手写实现LRN局部响应归一化算子

1、重写算子的需求

芯片推理过程中遇到很多算子计算结果不对的情况,原因是封装的算子会在某些特殊情况下计算超限,比如输入shape特别大或者数值特别大时,LRN算子计算会出现NAN值,所以需要重写算子。先对输入数据做一个预处理,计算后再在合适的地方转换回去。

2、lrn算子的原理

LRN全称是local response normalization,局部响应归一化,想了解原理的点这个AlexNet原论文。

官方API伪代码如下:

sqr_sum[a, b, c, d] = sum(input[a,b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias +alpha * sqr_sum) ** beta

在alexnet的原论文中,输入为 [batch_size, 224, 224, 96],这里224×224是图片的大小,经过第一次卷积再经过ReLU,就是LRN函数的输入。

注意上面API说明里的sum函数,意思就是,可能解释起来比较拗口,针对batch里每一个图的后3维向量,[224, 224, d - depth_radius : d + depth_radius + 1],对它按照半径 depth_radius求每个图里的每个像素的平方,再把这2× depth_radius+1个平方过后的图片加起来,就得到了这个batch的sqr_sum。

3、手写实现lrn算子

下面参考原论文和pytorch源码,实现自己手写的lrn算子,其中avg_pool3d就是实现了按照半径 depth_radius求每个图里的每个像素的平方:

def custom_lrn(input_tensor, N=5, alpha=1e-4, beta=0.75):x_sq = torch.square(input_tensor).unsqueeze(1)sizes = input_tensor.size()x_reshape = x_sq.view(sizes[0], 1, sizes[1], sizes[2], -1)x_pad = torch.nn.functional.pad(x_reshape, (0,0,0,0,2,2))x_pool3d = torch.nn.functional.avg_pool3d(x_pad, (N, 1, 1),stride=1).squeeze(1)x_squeeze = x_pool3d.view(sizes)x_scale = torch.mul(x_squeeze, alpha) + (1.0)x_scale_pow = torch.pow(x_scale, beta)out = input_tensor / x_scale_powreturn out

测试一下和pytorch实现的官方API的结果情况:

import torch
import numpy as np
inputs = torch.randn(1, 64, 56, 56, dtype=torch.float32)*20
SEED = 1
def set_seed(seed=1):np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed_all(seed)
set_seed(SEED)def custom_lrn(input_tensor, N=5, alpha=1e-4, beta=0.75):x_sq = torch.square(input_tensor).unsqueeze(1)sizes = input_tensor.size()x_reshape = x_sq.view(sizes[0], 1, sizes[1], sizes[2], -1)x_pad = torch.nn.functional.pad(x_reshape, (0,0,0,0,2,2))x_pool3d = torch.nn.functional.avg_pool3d(x_pad, (N, 1, 1),stride=1).squeeze(1)x_squeeze = x_pool3d.view(sizes)x_scale = torch.mul(x_squeeze, alpha) + (1.0)x_scale_pow = torch.pow(x_scale, beta)out = input_tensor / x_scale_powreturn outlrn2 = torch.nn.functional.local_response_norm(inputs, size=5)# print(custom_lrn(inputs))
# print(lrn2)
print('custom_lrn与pytorch官方的lrn算子是否相等:',torch.allclose(custom_lrn(inputs), lrn2))

测试输出结果完全一致,说明此算子与官方实现的算子是一致的。

>> custom_lrn与pytorch官方的lrn算子是否相等:True

相关文章:

手写实现LRN局部响应归一化算子

1、重写算子的需求 芯片推理过程中遇到很多算子计算结果不对的情况,原因是封装的算子会在某些特殊情况下计算超限,比如输入shape特别大或者数值特别大时,LRN算子计算会出现NAN值,所以需要重写算子。先对输入数据做一个预处理&…...

朗思科技数字员工通过统信桌面操作系统兼容性互认认证

近日,朗思科技数字员工与统信桌面操作系统V20进行了兼容互认,针对上述产品的功能、兼容性方面,通过共同严格测试表明——朗思科技数字员工在统信桌面操作系统 V20上整体运行稳定,满足功能及兼容性测试要求。 北京朗思智能科技有限…...

十六、Webpack常见的插件和模式

一、认识插件Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset m…...

ChatGPT新增超强插件:文本直接生成视频、海报,支持自定义修改!

全球著名在线设计平台Canva,在ChatGPT Plus(GPT-4)上推出了插件功能,用户通过文本提示,几秒钟就能生成演示文稿、PPT插图、电子书封面、宴会邀请函等各种精美设计海报,同时支持生成视频。 该插件最强大的功…...

亚像素边缘提取的例子

求帮忙下载: 1.http://download.csdn.net/detail/pkma75/925394 pkma75 资源积分:1分 备注:pdf格式,用曲线拟合的方法计算亚像素,编程易实现,具有较强的实用价值 2.http://download.csdn.net/detail/kua…...

Wayland:推动Linux桌面进入下一代图形显示时代

文章首发地址 Wayland是Linux系统下的一种图形显示协议,旨在替代X Window System(X11)作为Linux桌面环境的图形显示服务。下面是对Wayland的详细解释: 背景: 传统的Linux桌面环境使用X Window System(X11&…...

mysql外键(foreign key)

简介 MySQL的外键约束用来在两个表数据之间建立链接,其中一张表的一个字段被另一张表中对应的字段约束。也就是说,设置外键约束至少要有两种表,被约束的表叫做从表(子表),另一张叫做主表(父表&…...

内网穿透——Windows搭建服务器

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…...

UE5.1 + Android 环境搭建

官方文档:一定一定一定要参照官方文档,因UE不同版本对应的环境搭建并不完全一致。 准备工作 通过EpicGameLaunch下载Android目标平台。 必须安装jdk1.8并配置环境变量,UE5.1不要使用最新的jdk20;下载地址 安装 Android Studio …...

华为python面试题目

华为Python常见的面试问题包括: Python是如何被解释的?什么是PEP8?Python是怎样管理内存的?什么是Python装饰器?Python提供哪些内置类型?Python中的异常处理是怎样的?什么是Python的上下文管理器?Python中的列表推导式是什么?Python中的生成器是什么?什么是Python的装…...

IP代理安全吗?如何防止IP被限制访问?

你是否遇到过可以正常上网,但访问某个网站却被禁止?注册某个网站账号,却被封号?那都是因为IP出现问题!您的IP地址透露很多关于您的信息,包括您的位置和互联网活动。 在本文中,我们将一起了解IP地…...

使用 gst-template 创建自己的 gstreamer 插件

系列文章目录 创建 gstreamer 插件的几种方式 使用 gst-template 创建自己的 gstreamer 插件 使用 gst-plugins-bad 里面的 gst-element-maker 工具创建gstreamer 插件 文章目录 系列文章目录前言一、如何获取 gst-template 仓库代码二、gst-template 相关的软件依赖1. 根据自…...

nginx反向代理,用户访问服务器1的80端口,请求转发至服务器2,3的8882端口

两台应用服务器,一台nginx,用户访问nginx服务器80端口,将请求转发至服务器2和服务器3的8882端口。 1、修改nginx配置文件 upstream backend {server 10.60.16.187:8882;server 10.60.16.188:8882;}server {listen 80;server_name 10.6…...

Python学习笔记:导入txt、xlsx文件并做简单函数处理

1.txt文件 1.1路径 file_path "E:\Python Project\temp.txt" with open(file_path) as f:content1 f.read() 导入文件时,如果直接放文件绝对路径上去会报错,这是因为\P是转义字符 所以在绝对路径前面加r可以避免将引号内的内容识别成转义…...

uniapp 轮播列表左右滑动,滑动到中间放大

html <!-- 轮播 --><view class"heade"><swiper class"swiper" display-multiple-items3 circulartrue previous-margin1rpxnext-margin1rpx current0 change"swiperChange" ><block v-for"(item,index) in list"…...

5. 自动求导

5.1 向量链式法则 ① 例子1是一个线性回归的例子&#xff0c;如下图所示。 5.2 自动求导 5.3 计算图 5.4 两种模型 ① b是之前计算的结果&#xff0c;是一个已知的值。 5.5 复杂度 5.6 自动求导 import torch x torch.arange(4.0) x 结果&#xff1a; ② 在外面计算y关于x的…...

【IEEE会议】 第三届智能通信与计算国际学术会议(ICC 2023)

第三届智能通信与计算国际学术会议 2023 3rd International Conference on Intelligent Communications and Computing 第三届智能通信与计算国际学术会议&#xff08;ICC 2023&#xff09;定于2023年11月24-26日在中国南昌隆重举行。会议旨在为从事智能通信与计算研究的专家学…...

巨人互动|Facebook海外户Facebook风控规则有什么

Facebook是全球最大的社交媒体平台之一&#xff0c;每天有数十亿的用户在其上发布、分享和交流各种内容。为了维护平台的安全性和用户体验&#xff0c;Facebook制定了严格的风控规则来监测和处理违规行为。下面小编讲讲Facebook风控规则。 巨人互动|Google海外户&Google Ad…...

pip命令来查看当前激活的虚拟环境

要查看已安装的虚拟环境&#xff0c;您可以使用以下命令&#xff1a; pip freeze该命令将列出所有已安装的包及其版本信息。在虚拟环境中运行时&#xff0c;它将仅显示该虚拟环境中安装的包。 这将列出所有已创建的虚拟环境以及当前激活的环境。 python -m venv list...

STL stack 和 queue

文章目录 一、stack 类和 queue 类的模拟实现 stack 只允许在一端进行插入删除&#xff0c;是一个后进先出(LIFO)的结构&#xff0c;可以存储任意类型 queue 只允许在一端进行插入&#xff0c;另一端进行删除&#xff0c;是一个先进先出(FIFO)的结构&#xff0c;可以存储任意类…...

刘教链|百万美刀的比特币:VanEck的预言与微策略的进化困境

BTC在8万刀附近磨了一周。就在市场踟蹰不前的时候&#xff0c;VanEck抛出一个大胆的预测[1]。一、VanEck的百万预言5月9日&#xff0c;VanEck的投资主管Matthew Sigel说了一番话。他认为比特币会在下一届美国总统任期结束前达到100万美刀[1]&#xff0c;算下来大概是2031年前后…...

别再只玩开发板了!用吃灰的STM32核心板DIY一个专属游戏手柄,实战HID协议

从零构建STM32游戏手柄&#xff1a;深入解析HID协议与实战开发 你是否曾盯着抽屉里积灰的STM32核心板思考它能做什么&#xff1f;与其重复点亮LED的基础实验&#xff0c;不如挑战一个既实用又有趣的项目——打造专属游戏手柄。这不仅能让硬件资源重获新生&#xff0c;更是深入理…...

开源数字白板the-board:基于React+Fabric.js的实时协作技术解析

1. 项目概述&#xff1a;一个开源的“数字白板”能做什么&#xff1f;最近在GitHub上看到一个挺有意思的项目&#xff0c;叫the-board。乍一看名字&#xff0c;可能觉得平平无奇&#xff0c;但点进去你会发现&#xff0c;它其实是一个功能相当完整的在线白板应用。简单来说&…...

思考的快与慢:模型的“即时回答”与“深思熟虑”

上一篇文章我们学会了如何“使唤”模型&#xff1a;同步、异步、批量、流式&#xff0c;一通操作下来&#xff0c;你已经是调接口的好手了。但很快你可能会发现一个有意思的现象——同样是回答问题&#xff0c;有时候模型快到几乎零秒响应&#xff0c;有时候却要停顿好几秒甚至…...

基于fnos-apps框架构建智能对话应用:从技能编排到生产部署

1. 项目概述&#xff1a;一个为现代对话应用而生的开源工具箱最近在折腾一个基于大语言模型的客服机器人项目&#xff0c;在集成各种外部工具和API时&#xff0c;遇到了一个老生常谈的问题&#xff1a;每个工具都有自己的调用方式、认证逻辑和错误处理&#xff0c;代码里很快就…...

算力入门:从FLOPS到PUE全解析

算力入门:FLOPS、TFLOPS、EFLOPS、算力规模、能效比、PUE 全解 算力(计算能力)是衡量计算机系统性能的关键指标,尤其在科学计算、人工智能和大数据处理等领域至关重要。本指南将逐步解释FLOPS、TFLOPS、EFLOPS、算力规模、能效比和PUE这些核心概念,帮助您快速入门。所有内…...

日志收集与分析平台搭建:ELK Stack实战入门

为什么测试工程师需要ELK在软件测试的日常工作中&#xff0c;日志是我们最熟悉也最依赖的“侦探工具”。无论是定位功能缺陷、分析性能瓶颈&#xff0c;还是复现偶发性Bug&#xff0c;测试人员都离不开日志。然而&#xff0c;随着微服务架构、容器化部署和分布式系统的普及&…...

3步搭建你的英雄联盟智能助手:LeagueAkari完整操作指南

3步搭建你的英雄联盟智能助手&#xff1a;LeagueAkari完整操作指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想象一下&#xff0c;当你正…...

英雄联盟专业视频编辑器:用League Director制作电影级游戏录像的完整指南

英雄联盟专业视频编辑器&#xff1a;用League Director制作电影级游戏录像的完整指南 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedir…...

苹果W1芯片如何通过低功耗无线技术重塑TWS耳机体验

1. 无线音频的功耗困局与苹果的破局思路 2016年9月&#xff0c;当苹果在发布会上首次亮出那对剪掉线缆的AirPods时&#xff0c;整个消费电子行业都在问同一个问题&#xff1a;它是怎么做到的&#xff1f;更具体地说&#xff0c;它如何解决了无线耳机领域最核心、也最令人头疼的…...