news 2026/7/15 13:50:20

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/7/14 4:21:30

Cosmos-Reason1-7B快速部署:Docker镜像免配置启动本地推理服务

Cosmos-Reason1-7B快速部署&#xff1a;Docker镜像免配置启动本地推理服务 一句话总结&#xff1a;无需复杂配置&#xff0c;一条命令启动专业级本地推理服务&#xff0c;让AI帮你解决逻辑推理、数学计算和编程问题。 1. 为什么选择Cosmos-Reason1-7B&#xff1f; 如果你经常需…

作者头像 李华
网站建设 2026/7/14 20:24:19

UI-TARS-desktop入门必看:零基础搭建AI开发环境

UI-TARS-desktop入门必看&#xff1a;零基础搭建AI开发环境 1. UI-TARS-desktop是什么&#xff1f;为什么选择它&#xff1f; 如果你正在寻找一个能在自己电脑上运行的AI助手&#xff0c;既能理解你的指令&#xff0c;又能帮你完成各种实际任务&#xff0c;那么UI-TARS-deskt…

作者头像 李华
网站建设 2026/7/14 18:17:26

校验日期格式:正则表达式

// 不允许空字符串&#xff0c;使用分支(|) Pattern(regexp "^\\d{4}-\\d{2}-\\d{2}$", message "日期格式必须为yyyy-MM-dd") // 允许空字符串&#xff0c;使用分支(|) Pattern(regexp "^\\d{4}-\\d{2}-\\d{2}$|^$", message "日期格式…

作者头像 李华
网站建设 2026/7/15 11:35:40

M2LOrder开源模型管理:option/SDGB/1.51目录结构说明+新模型热加载机制

M2LOrder开源模型管理&#xff1a;option/SDGB/1.51目录结构说明新模型热加载机制 1. 项目概述 M2LOrder是一个基于.opt模型文件的情绪识别与情感分析服务&#xff0c;提供HTTP API和WebUI两种访问方式。这个轻量级WebUI让用户能够快速上手使用情感分析功能&#xff0c;无需复…

作者头像 李华
网站建设 2026/7/15 2:28:13

小白必看:Qwen3-ASR-1.7B语音识别常见问题解答

小白必看&#xff1a;Qwen3-ASR-1.7B语音识别常见问题解答 你是不是也遇到过这种情况&#xff1a;开会录音想整理成文字&#xff0c;结果发现语音转文字工具要么识别不准&#xff0c;要么收费太贵&#xff0c;要么担心隐私泄露&#xff1f;或者想给一段视频配上字幕&#xff0…

作者头像 李华