news 2026/4/23 16:18:51

cudnn尝试vgg

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cudnn尝试vgg

自己用c++写vgg,写了两个版本才成功,其实就是3*3卷积,padding等于1.

没想cudnn实现起来很方便:一个是参考程序类封装的好,一个是cudnn写好了调用函数,这里只展示vgg改成功的代码,详细代码见:

class LeNet :public Layer {
public:

LeNet(cublasHandle_t &cublas_, cudnnHandle_t &cudnn_, int batch_) :cublas(cublas_), cudnn(cudnn_), batch(batch_) {
layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 3, 12, 32, 32, 3));//输入->>>c1,5*5,1*28*28-》6*24*24
layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 12, 30, 30)); //输入->>>c1,5*5,1*28*28-》6*24*24

layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 12, 12, 30, 30, 3));//输入->>>c1,5*5,1*28*28-》6*24*24
layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 12, 28, 28)); //输入->>>c1,5*5,1*28*28-》6*24*24

layers.emplace_back(std::make_shared<MaxPool2D>(cudnn, batch, 12, 28, 28, 2, 2, 0, 2)); //s2,6*24*24->>6*12*12
layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 12, 24, 14, 14, 5));//c3,6*12*12->>16*8*8
layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 24, 10, 10)); //c3,6*12*12->>16*8*8
layers.emplace_back(std::make_shared<MaxPool2D>(cudnn, batch, 24, 10, 10, 2, 2, 0, 2)); //s4,16*8*8->>16*4*4
layers.emplace_back(std::make_shared<Linear>(cublas, batch, 24 * 5 * 5, 120));//c5,16*4*4->>>120
layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 120, 1, 1)); //c5,16*4*4->>>120
layers.emplace_back(std::make_shared<Linear>(cublas, batch, 120, 84));//120->84
layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 84, 1, 1)); //120->84
layers.emplace_back(std::make_shared<Linear>(cublas, batch, 84, 10));//84->10
cudaMalloc(&output, batch * 10 * sizeof(float));
cudaMalloc(&grad_input, batch * 3 * 32*32 * sizeof(float));
}

......

};
————————————————

以上加红的改为:

layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 3, 12, 32, 32, 3,1,1));

layers.emplace_back(std::make_shared<ReLU>(cudnn, batch, 12, 30, 30));

layers.emplace_back(std::make_shared<Conv2D>(cudnn, batch, 12, 12, 30, 30, 3,1,1));

其他的cudnn函数和类封装就自动处理了,很方便,不像自己哼哧哼哧写了两天,详细见:

我的第二个cudnn程序(训练cifar10突破60分)-CSDN博客

我的第一个cudnn(cuda)人工智能程序(lenet)-CSDN博客

c++的cpu完成的vgg代码也有,可以参考:

lenet改vgg训练cifar10突破71分-CSDN博客

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 21:19:10

Qwen3-ASR-1.7B开箱体验:录制声音立即转文字,支持多国语言

Qwen3-ASR-1.7B开箱体验&#xff1a;录制声音立即转文字&#xff0c;支持多国语言 你有没有过这样的经历&#xff1f;会议刚结束&#xff0c;录音文件堆了七八条&#xff0c;想整理纪要却卡在听写环节——回放、暂停、打字、校对&#xff0c;一小时的会光听写就耗掉三小时。或…

作者头像 李华
网站建设 2026/4/15 19:56:30

RKE2(Rancher Kubernetes Engine 2)详解

RKE2&#xff08;Rancher Kubernetes Engine 2&#xff09;详解 文章目录RKE2&#xff08;Rancher Kubernetes Engine 2&#xff09;详解核心定位与设计哲学主要特点与架构解析1. 默认安全与合规2. 混合架构与部署模式3. 基于 Containerd 的运行时4. 打包与生命周期管理5. 与 R…

作者头像 李华
网站建设 2026/4/18 11:25:18

Qwen1.5-1.8B-GPTQ-Int4详细步骤:Chainlit对接企业微信/钉钉机器人

Qwen1.5-1.8B-GPTQ-Int4详细步骤&#xff1a;Chainlit对接企业微信/钉钉机器人 1. 项目概述与准备工作 今天我们来分享一个实用项目&#xff1a;如何将部署好的通义千问1.5-1.8B-Chat-GPTQ-Int4模型通过Chainlit前端&#xff0c;与企业微信或钉钉机器人进行对接。这个方案特别…

作者头像 李华
网站建设 2026/4/23 16:16:14

惊艳!LightOnOCR-2-1B多语言OCR识别效果大揭秘

惊艳&#xff01;LightOnOCR-2-1B多语言OCR识别效果大揭秘 1. 这不是普通OCR&#xff0c;是能“读懂”11种语言的文档理解专家 你有没有遇到过这样的场景&#xff1a;一张扫描的德文合同、一页带公式的日文论文、一份手写的葡萄牙语收据——全堆在邮箱里&#xff0c;等人工翻…

作者头像 李华
网站建设 2026/4/18 7:23:53

CVPR2022获奖模型实战:MogFace一键部署人脸检测系统教程

CVPR2022获奖模型实战&#xff1a;MogFace一键部署人脸检测系统教程 1. 项目概述&#xff1a;从获奖论文到开箱即用的工具 想象一下这样的场景&#xff1a;你需要快速统计一张大型合影里有多少人&#xff0c;或者在一堆照片里自动找出所有包含人脸的画面。传统方法要么靠人工…

作者头像 李华
网站建设 2026/4/9 7:43:43

mPLUG视觉问答在电商场景的应用:商品图片自动描述生成

mPLUG视觉问答在电商场景的应用&#xff1a;商品图片自动描述生成 1. 为什么电商急需“看图说话”的能力 你有没有遇到过这样的情况&#xff1a;刚上架一批新款连衣裙&#xff0c;要为每张主图配一段吸引人的文字描述&#xff0c;结果写了半小时&#xff0c;还是觉得干巴巴的…

作者头像 李华