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

从零构建深度学习推理框架-8 卷积算子实现

其实这一次课还蛮好理解的:

 首先将kernel展平:

for (uint32_t g = 0; g < groups; ++g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k = 0; k < kernel_count_group; ++k) {const std::shared_ptr<Tensor<float>> &kernel =weights.at(k + g * kernel_count_group);for (uint32_t ic = 0; ic < input_c_group; ++ic) {memcpy(kernel_matrix_c.memptr() + row_len * ic,kernel->at(ic).memptr(), row_len * sizeof(float));}LOG(INFO) << "kernel展开后: " << "\n" << kernel_matrix_c;kernel_matrix_arr.at(k) = kernel_matrix_c;}

将原来的kernel放到kernel_matrix_c里面,之后如果是多个channel,也就是input_c有多个,那就按照rowlen*ic依次存放到里面。

将输入input展平:

//按照上面的图就是input = 3*9 ,4的这样一个空间arma::fmat input_matrix(input_c_group * row_len, col_len);for (uint32_t ic = 0; ic < input_c_group; ++ic) {const arma::fmat &input_channel = input_->at(ic + g * input_c_group);int current_col = 0;
//下面是以窗口滑动的顺序选取for (uint32_t w = 0; w < input_w - kernel_w + 1; w += stride_w) {for (uint32_t r = 0; r < input_h - kernel_h + 1; r += stride_h) {float *input_matrix_c_ptr =input_matrix.colptr(current_col) + ic * row_len;//对准窗口位置,比如对第一个就是对准红色, 黄色, 绿色current_col += 1;for (uint32_t kw = 0; kw < kernel_w; ++kw) {const float *region_ptr = input_channel.colptr(w + kw) + r;memcpy(input_matrix_c_ptr, region_ptr, kernel_h * sizeof(float));input_matrix_c_ptr += kernel_h;}}}}LOG(INFO)  << "input展开后: " << "\n"  << input_matrix;

对于:

 for (uint32_t kw = 0; kw < kernel_w; ++kw) {const float *region_ptr = input_channel.colptr(w + kw) + r;memcpy(input_matrix_c_ptr, region_ptr, kernel_h * sizeof(float));input_matrix_c_ptr += kernel_h;}

w+kw指向的是窗口的列,r指向的是窗口的行

然后对于每个窗口的以kernel的列为标准复制过去。

最后两个矩阵相乘就可以得到结果

相关文章:

从零构建深度学习推理框架-8 卷积算子实现

其实这一次课还蛮好理解的&#xff1a; 首先将kernel展平&#xff1a; for (uint32_t g 0; g < groups; g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k 0; k < k…...

【Spring Boot】JdbcTemplate数据连接模板 — JdbcTemplate入门

JdbcTemplate入门 本节从基础的部分开始介绍什么是JDBC、什么是JdbcTemplate&#xff0c;然后介绍Spring Boot项目如何使用JdbcTemplate操作数据库。 1.JdbcTemplate简介 1.1 什么是JDBC JDBC&#xff08;Java Data Base Connectivity&#xff0c;Java数据库连接&#xff0…...

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…...

从今天起,重新出发

2017年的时候&#xff0c;我还是一名在校大学生&#xff0c;当时为了准备实习面试写下了第一篇学习笔记。 2018年我开始工作&#xff0c;简单记录了使用 Airflow 的踩坑记录。 一直到今天我已经是一个工作了五年的社畜&#xff0c;但是很遗憾没有把工作中的成长记录下来。 当…...

Java多态详解(1)

多态 多态的概念 所谓多态&#xff0c;通俗地讲&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 比如&#xff1a; 这一时间爆火的“现代纪录片”中&#xff0c;麦克阿瑟总是对各种“名人”有不同的评价&…...

optee读取Arm系统寄存器的模板

先写一个通用的内联函数模板,然后再通过宏控来定义各种读写函数。 (core/arch/arm/include/arm64.h)/** Templates for register read/write functions based on mrs/msr*/#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \ sta...

VSCode 使用总结

快捷键 在 Visual Studio Code (VSCode) 中&#xff0c;有许多常用的快捷键可以提高编程效率。以下是一些常见的 VSCode 编程项目快捷键&#xff1a; 编辑器操作&#xff1a; 撤销&#xff1a;Ctrl Z重做&#xff1a;Ctrl Shift Z复制&#xff1a;Ctrl C剪切&#xff1a;C…...

GuLi商城-前端基础Vue-使用Vue脚手架进行模块化开发

自己亲自实践&#xff1a; mac安装webpack webpack 简介Webpack 是一个非常流行的前端构建工具&#xff0c;它可以将多个模块&#xff08;包括CSS、JavaScript、图片等&#xff09;打包成一个或多个静态资源文件&#xff08;bundle&#xff09;&#xff0c;以便用于部署到生产…...

LeetCode450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一&#xff1a;递归&#xff08;一种麻烦的方法&#xff09;方法二&#xff1a;优化后的递归 一、题目 给定一个二叉搜索树的根…...

Java动态调试技术原理及实践

文章目录 Java动态调试技术原理及实践引言故事场景一:开发调试动态调试技术简介Java Instrumentation简介动态调试技术实践案例分析场景二:线上问题排查动态调试技术实践案例分析总结Java动态调试技术原理及实践 引言 在日常的软件开发过程中,调试是一个非常重要的环节。当…...

Lua + Redis 实战代码

--[[luarocks install luasocket module socket not foundhttps://github.com/nrk/redis-lua最历害的是&#xff0c;用redis 去跑lua&#xff0c;分布式锁&#xff0c;限流&#xff0c;]]--local redis require("redis");local config{host"127.0.0.1&…...

类的访问限定符,实例化,对象存储方式,this指针

目录 类的定义 类的两种定义方式&#xff1a; 访问限定符 类的实例化 类对象的存储方式 this指针 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语…...

《Linux从练气到飞升》No.15 Linux 环境变量

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

Spring Boot 重启命令

Spring Boot 重启命令 本文描述了一个重启Spring Boot命令执行过程和示例 本文利用kill -9 关闭进程&#xff0c;不优雅&#xff0c;会突然中断程序&#xff0c;可能导致数据和逻辑异常 搜索微信小程序【亚特技术】在资源中搜索【优雅】可得到Spring Boot如何优化重启 1. 过…...

pdf怎么合并在一起?这几个合并方法了解一下

pdf怎么合并在一起&#xff1f;在日常工作、学习和生活中&#xff0c;我们常常会遇到需要将多个PDF文件合并成一个文件的情况。比如&#xff0c;在学术论文写作中&#xff0c;我们可能需要将多篇论文合并成一个文件进行打印和提交。在工作中&#xff0c;我们可能需要将多个报告…...

【仿写tomcat】七、项目结构优化以及代码开源

仿写tomcat 项目结构开源地址 项目结构 到目前为止&#xff0c;博主的仿写tomcat就告一段落了&#xff0c;后续有时间了还会继续补充功能&#xff0c;现在的项目结构如下。 在保证功能的前提下作出的改动有&#xff1a; 将各个类中的参数统一成了Config类&#xff0c;通过对…...

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引&#xff0c;在测试环境配置之后、要触发的流程可以手工提交&#xff0c;但是触发一直不成功。简单记录下业务场景和其他处理信息&#xff0c;以供参考。 应用版本 目前使用了泛微 E8 &#xff0…...

Springboot整合Mybatis调用Oracle存储过程

1、配置说明 Oracel11g+springboot2.7.14+mybatis3.5.13 目标:springboot整合mybatis访问oracle中的存储过程,存储过程返回游标信息。 mybatis调用oracle中的存储过程方式 2、工程结构 3、具体实现 3.1、在Oracle中创建测试数据库表 具体数据可自行添加 create table s…...

【java安全】Log4j反序列化漏洞

文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目&#xff0c;可以实现对System.out…...

[mars3d 打包]vue3+vite,打包后mars3d找不到

前提 &#xff1a; vue3vite开发框架&#xff1b;使用 官网 方式3获取sdk,引入mars3d; 问题&#xff1a;开发时一切正常&#xff0c;打包之后&#xff0c;页面白屏&#xff0c;没有渲染&#xff1b; 相关的mars3d的相关方法会报错&#xff1b;但是mars3d的打印日志是有的&…...

Freeplane思维导图终极指南:100+专业模板让你的思考效率翻倍

Freeplane思维导图终极指南&#xff1a;100专业模板让你的思考效率翻倍 【免费下载链接】Freeplane-MindMap-Template Freeplane-MindMap-Template&#xff08;Freeplane 思维导图模板&#xff09; 项目地址: https://gitcode.com/gh_mirrors/fr/Freeplane-MindMap-Template …...

构建多模型智能客服时如何借助 Taotoken 实现灵活路由与降级

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 构建多模型智能客服时如何借助 Taotoken 实现灵活路由与降级 在构建企业级智能客服系统时&#xff0c;服务的稳定性和响应能力至关…...

PPTist:5分钟创建专业演示文稿的免费开源在线PPT制作工具终极指南

PPTist&#xff1a;5分钟创建专业演示文稿的免费开源在线PPT制作工具终极指南 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, …...

AI专著撰写秘籍!4款工具助力一键生成20万字专著,高效又省心!

创新是学术专著最核心的部分&#xff0c;也是写作过程中最大的挑战。一部优秀的专著&#xff0c;不仅要避免简单的研究成果重复堆砌&#xff0c;更需要在整个作品中提出独到的观点、理论架构或研究手法。在众多学术文献中&#xff0c;发现那些尚未被开发的研究空白相当不易——…...

量子电路反编译与遗传编程在量子计算中的应用

1. 量子电路反编译&#xff1a;从黑箱到透明设计的革命性跨越量子计算正经历着从实验室走向实际应用的关键转型期。在这个被称为"嘈杂中等规模量子"&#xff08;NISQ&#xff09;的时代&#xff0c;量子架构搜索&#xff08;QAS&#xff09;已成为设计高效量子算法的…...

2025最权威的AI辅助写作助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI辅助写作工具正深刻改变着学术研究的传统范式&#xff0c;这是随着人工智能技术飞快发展而…...

Real-ESRGAN-GUI 终极指南:免费AI图像增强工具如何让模糊照片重获高清新生

Real-ESRGAN-GUI 终极指南&#xff1a;免费AI图像增强工具如何让模糊照片重获高清新生 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 你是否曾为模糊的老照片感到无奈&a…...

Docker化OpenOffice部署:文档自动化转换服务实战指南

1. 项目概述与核心价值最近在折腾一个老项目&#xff0c;需要处理一批.odt格式的文档&#xff0c;这让我想起了那个曾经在开源办公软件领域与微软Office分庭抗礼的“老将”——OpenOffice。虽然现在LibreOffice的风头更盛&#xff0c;但OpenOffice依然有其独特的生态位和用户群…...

NeoPixel光剑制作全攻略:从WS2812B原理到实战装配

1. 项目概述&#xff1a;从零件到光剑的旅程如果你和我一样&#xff0c;是个对《星球大战》里的光剑毫无抵抗力&#xff0c;同时又喜欢动手折腾电子玩意儿的人&#xff0c;那么用NeoPixel灯带自制一把会发光、能变色的光剑&#xff0c;绝对是件充满成就感的事。这不仅仅是把灯塞…...

基于CLUE与加速度计的鸡蛋坠落实验:从传感器数据到缓冲设计优化

1. 项目概述&#xff1a;用传感器数据为物理实验“上保险” 鸡蛋坠落实验&#xff0c;一个听起来就充满童年乐趣和“悲剧”风险的经典物理项目。它的核心挑战在于&#xff0c;如何设计一个缓冲装置&#xff0c;让一枚脆弱的生鸡蛋从高处坠落而不破裂。传统上&#xff0c;我们依…...