news 2026/4/18 0:35:44

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/18 8:06:22

一键部署Qwen3-ASR-0.6B:打造你的私人语音助手

一键部署Qwen3-ASR-0.6B&#xff1a;打造你的私人语音助手 1. 为什么你需要一个轻量又聪明的语音识别助手&#xff1f; 你有没有过这些时刻&#xff1a; 开会时录音记了半小时&#xff0c;回听整理却花了两小时&#xff1b; 客户发来一段方言口音浓重的语音&#xff0c;转文字…

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

深求·墨鉴使用技巧:提升手写笔记识别准确率

深求墨鉴使用技巧&#xff1a;提升手写笔记识别准确率 1. 为什么手写笔记识别总是“差一点”&#xff1f; 你有没有过这样的经历&#xff1a; 拍下一页密密麻麻的课堂笔记&#xff0c;满怀期待地点击「研墨启笔」&#xff0c;结果生成的文字里—— “微积分”变成了“微积风”…

作者头像 李华
网站建设 2026/4/16 19:05:02

文脉定序应用实践:客服工单知识匹配中重排序模块降低误判率42%

文脉定序应用实践&#xff1a;客服工单知识匹配中重排序模块降低误判率42% 1. 项目背景与挑战 在客服工单处理场景中&#xff0c;知识匹配的准确性直接关系到问题解决效率和客户满意度。传统的关键词匹配和基础向量检索虽然能够快速找到相关文档&#xff0c;但经常出现"…

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

SenseVoice-Small ONNX模型绿色计算:语音识别任务碳足迹测算与优化

SenseVoice-Small ONNX模型绿色计算&#xff1a;语音识别任务碳足迹测算与优化 1. 语音识别模型的碳足迹挑战 语音识别技术在日常生活中的应用越来越广泛&#xff0c;从智能助手到客服系统&#xff0c;从会议转录到语音输入&#xff0c;无处不在的语音识别服务背后是巨大的计…

作者头像 李华
网站建设 2026/3/11 4:22:00

YOLO12性能实测:注意力架构带来的精度飞跃

YOLO12性能实测&#xff1a;注意力架构带来的精度飞跃 1. 引言&#xff1a;为什么这次升级值得你关注&#xff1f; 你是否遇到过这样的困扰&#xff1a;在工业质检场景中&#xff0c;微小缺陷漏检率高&#xff1b;在自动驾驶视频流里&#xff0c;密集车辆检测框重叠严重&…

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

开箱即用!Ollama部署Llama-3.2-3B的完整教程

开箱即用&#xff01;Ollama部署Llama-3.2-3B的完整教程 想快速体验一个功能强大的开源大模型&#xff0c;但又担心复杂的安装配置和环境依赖&#xff1f;今天&#xff0c;我们就来手把手教你&#xff0c;如何在几分钟内&#xff0c;通过Ollama这个“神器”&#xff0c;零门槛…

作者头像 李华