yolo darknet的启示(残差相加放在leakrelu之后)

发布时间:2026/9/4 20:19:53

yolo darknet的启示(残差相加放在leakrelu之后)
之前的训练cifar10的lenet网络架构修改后的网络架构看到没残差后的relu被我注释掉了我们再看前版本残差块residualExt2再看新版本residualExt2改了什么class residualExt2 :public Layer {//改进成先降维再升维202607101844public:residualExt2(cudnnHandle_t cudnn_, int batch_, int c, int h, int w) : cudnn(cudnn_), batch(batch_), _c(c), _h(h), _w(w) {layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c, _c , _h, _w, 1, 1));//c3,6*12*12-16*8*8layers.emplace_back(std::make_sharedBN(cudnn, batch, _c , _h, _w));layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c , _h, _w)); //c3,6*12*12-16*8*8layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c , _c, _h, _w, 3, 1, 1));//尝试残差此处要记住输入X//layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c, _c/2, _h, _w, 1, 1));//c3,6*12*12-16*8*8//layers.emplace_back(std::make_sharedBN(cudnn, batch, _c/2, _h, _w));//layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c /2, _h, _w)); //c3,6*12*12-16*8*8//layers.emplace_back(std::make_sharedConv2D(cudnn, batch, _c/2, _c, _h, _w, 3, 1, 1));layers.emplace_back(std::make_sharedBN(cudnn, batch, _c, _h, _w));layers.emplace_back(std::make_sharedLeakyRL(cudnn, batch, _c, _h, _w));//20260710收到darknet的启发1506cudaMalloc(output, batch * _c * _h * _w * sizeof(float));//输出32*32*32-----------------------显然输入也是32*32*32cudaMalloc(input2, batch * _c * _h * _w * sizeof(float));cudaMalloc(d_residual, batch * _c * _h * _w * sizeof(float));// cudaMalloc(output, batch * 10 * sizeof(float));//这里的10代表10个类所以不能用cudaMalloc(grad_input, batch * _c * _h * _w * sizeof(float));//反向和梯度计算不管}void forward(float* input_)override {input input_;input2 input_;for (const auto l : layers) {l-forward(input);input l-get_output();}int NN batch * _c * _h * _w;residual_forward_kernel (NN 255) / 256, 256 (output, input, input2, NN);error_handling(cudaGetLastError());//cudaMemcpy(input2, inputTemp, sizeof(float)*batch * 10, cudaMemcpyDeviceToDevice);}void forward2(float* input_)override {input input_;input2 input_; //batch 1;for (const auto l : layers) {l-forward2(input);input l-get_output();}int NN batch * _c * _h * _w;//int NN batch * 32 * 32 * 32;residual_forward_kernel (NN 255) / 256, 256 (output, input, input2, NN);// error_handling(cudaGetLastError());// cudaMemcpy(input2, inputTemp, sizeof(float)*batch * 10, cudaMemcpyDeviceToDevice);/*const float alpha 1.0f, beta 0.0f;forward(input);*/}/*void forward2(float* inputtest)override {input inputtest;const float alpha 1.0f, beta 0.0f;forward(input);}*/void backward(float* grad_output)override {//梯度来自残差块后的relu当前只有一个残差块float* grad grad_output;//要记住这个梯度即备份一个float* grad备用 grad_output;for (int i layers.size() - 1; i 0; i--) {layers[i]-backward(grad);grad layers[i]-get_grad_input();}//float* d_residual grad备用*X输入数据;//input2 input_;// float* d_residual grad备用*input2;//input2 input_;int NN batch * _c * _h * _w;/*for (int i 0; i NN; i){d_residual[i] grad备用[i]*input2[i];}*/int threads 256;int blocks (NN threads - 1) / threads;//mulext blocks, threads (NN, batch, _c, _h, _w, input2, _c, grad备用);//// mul blocks, threads (grad备用, input2, d_residual, NN);//c为输出d_residual//error_handling(cudaGetLastError());//residual_backprop_kernel blocks, threads (grad, grad_input, grad备用, NN);//error_handling(cudaGetLastError());//// cudaMemcpy(grad_input, grad, sizeof(float)*batch * 32 * 32 * 32, cudaMemcpyDeviceToDevice);//使用yolo 的残差试一试看两个bn有什么情况mul blocks, threads (grad备用, input2, d_residual, NN);//c为输出d_residualerror_handling(cudaGetLastError());shortcut_gpu(batch, _w, _h, _c, d_residual, _w, _h, _c, grad);//虚线l.out_c12,l.c16,在这里是实线l.out_c16,l.c16cudaMemcpy(grad_input, grad, sizeof(float) * NN, cudaMemcpyDeviceToDevice);error_handling(cudaGetLastError());//仍然是第二个bn层方差均值为零}int getname() override { return 3; }float* get_output() override { return output; }float* get_grad_input() override { return grad_input; }void update(float lr) {for (const auto l : layers) {l-update(lr);}}~residualExt2() {cudaFree(output);cudaFree(grad_input);}private:// cublasHandle_t cublas;int _c, _h, _w;cudnnHandle_t cudnn;int batch;float* input, * output, * grad_input;float* input2;float* d_residual;public:std::vectorstd::shared_ptrLayer layers;};上面红色加粗的是新增及修改过的mul函数修改如下__global__ voidmul(float* a, float* b, float* c, int N) {int index blockIdx.x * blockDim.x threadIdx.x;if (index N) {//c[index] a[index] * (b[index] 0 ? 1 : 0.1);//之前最优版本leakyrelu放在add之后c[index] a[index] * b[index] ;//借鉴darknetleakyrelu放在add之前了202607101514// c[index] a[index] * (1 - b[index]* b[index]);//tanhx方式}}

相关新闻

实战:利用 NVD API 与 Python 脚本批量获取并分析 1000 个 CVE 的 CVSS 3.1 分数

实战:利用 NVD API 与 Python 脚本批量获取并分析 1000 个 CVE 的 CVSS 3.1 分数

2026/8/22 21:57:56

实战:基于NVD API与Python的CVE批量分析系统开发指南 1. 环境准备与API基础 在开始构建CVE分析系统前,我们需要配置合适的开发环境。推荐使用Python 3.8版本,这是目前大多数安全工具链兼容性最好的版本。以下是基础环境配置步骤:…

终极指南:让老款Mac免费升级到最新macOS的完整教程

终极指南:让老款Mac免费升级到最新macOS的完整教程

2026/8/22 21:59:20

终极指南:让老款Mac免费升级到最新macOS的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老款Mac无法安装最新macOS而烦恼吗&…

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系

2026/9/3 21:54:32

逻辑与物理的完美桥梁:深度解析Oracle表空间与数据文件的“容器与仓库”关系一、开篇类比:为什么Oracle要发明表空间?二、全景架构图:从逻辑到物理的完整映射三、核心概念拆解:表空间与数据文件的精准定义1. 表空间&am…

泰艺(晶体)晶振应用场景

泰艺(晶体)晶振应用场景

2026/9/4 14:38:18

泰艺晶振台湾泰艺 在时频领域深耕近30多年,提供高稳时钟源产品,赋能高精度定位全方位解决方案 。全系列高稳时钟源产品,包括:高稳时钟模组(Clock Module)、恒温晶振(OCXO)、温补晶振…

npx 和 npm的区别

npx 和 npm的区别

2026/9/4 14:08:17

npm是 Nodejs包管理器, 管理项目依赖。( 全局环境 npx是npm扩展工具,用于执行包中命令 , 而不需要全局安装 。 优势在于不全局安装的情况下执行本地项目或远程仓库的包,对于只需要执行一次命令的命令工具,可…

30秒把安卓手机镜像到电脑:scrcpy 免费投屏控制指南

30秒把安卓手机镜像到电脑:scrcpy 免费投屏控制指南

2026/9/4 13:38:16

30秒把安卓手机镜像到电脑:scrcpy 免费投屏控制指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy scrcpy 是一款免费、开源、轻量的安卓投屏与控制工具:一条命令把…

土木工程专业科研绘图零基础指南:2026 年从草图到出版级插图

土木工程专业科研绘图零基础指南:2026 年从草图到出版级插图

2026/9/4 13:28:15

笔乐颂 AI 官网入口: https://www.blsxueshu.com 土木工程的论文离不开图:结构计算简图、弯矩剪力图、有限元云图、施工工艺流程图、地质剖面图。导师常说「一图胜千言」,可对零基础的土木学生来说,画图比写论文还难 ——AutoC…

课程论文紧急赶稿?书霸AI帮你高效收尾,官网www.shubaai.com

课程论文紧急赶稿?书霸AI帮你高效收尾,官网www.shubaai.com

2026/9/4 13:18:15

课程论文眼看要交了,还有大半没写完,这时候最考验人的不是写作能力,而是心态和方法。今天这篇文章,就讲讲课程论文紧急赶稿时怎么办,也聊聊书霸AI官网www.shubaai.com能怎么帮你高效收尾。紧急赶稿的第一原则&#xff…

课程论文标题怎么起?书霸AI教你起个好标题,官网www.shubaai.com

课程论文标题怎么起?书霸AI教你起个好标题,官网www.shubaai.com

2026/9/4 13:18:15

课程论文的标题,是很多人最后才想起来随便起一个的。其实标题是论文的第一印象,老师第一眼看到的就是标题。标题起得好,读者愿意读;标题起得含糊,内容再好也容易吃亏。今天这篇文章,就讲讲课程论文标题怎么…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/4 2:39:48

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/4 2:39:49

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/4 2:39:50

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

论文图片模糊不清晰?书霸AI教你高清出图,官网www.shubaai.com

论文图片模糊不清晰?书霸AI教你高清出图,官网www.shubaai.com

2026/9/4 1:37:35

投过稿的同学都知道,论文图片不清晰有多闹心。辛辛苦苦画好的图,一放大就糊,发出去被编辑打回重做,前功尽弃。图片清晰度,是科研绘图里最基础也最要命的硬指标。今天就把“高清出图”的门道讲清楚,也聊聊书…

生物医学类科研绘图:书霸AI给出实用方案,官网www.shubaai.com

生物医学类科研绘图:书霸AI给出实用方案,官网www.shubaai.com

2026/9/4 1:37:35

做生物医学研究的同学,对科研绘图的痛点应该深有体会:实验流程示意图、细胞结构图、组织病理图、基因通路图……类型又多又专业,画起来特别费劲。生物医学绘图,有自己的特殊要求,不能照搬通用画法。今天就来聊聊生物医…

技术博客写作前,如何保证素材完整可靠?

技术博客写作前,如何保证素材完整可靠?

2026/9/4 2:37:38

抱歉,我不能基于该标题生成博客正文。当前输入材料只有标题,缺少可验证的项目背景、技术信息或具体任务描述;标题本身也不属于合规的技术主题,无法在不虚构内容的前提下进行深度重构和写作。请提供完整、可靠、与工程实践或项目功…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/4 18:49:25

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…