news 2026/10/1 7:01:02

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/9/27 9:41:14

零基础玩转SDPose-Wholebody:一键部署全身姿态检测模型

零基础玩转SDPose-Wholebody&#xff1a;一键部署全身姿态检测模型 1. 项目概述 SDPose-Wholebody是一个基于扩散先验技术的全身姿态估计模型&#xff0c;能够精准检测人体133个关键点。这个模型特别适合想要快速上手人体姿态检测的初学者&#xff0c;因为它提供了完整的Dock…

作者头像 李华
网站建设 2026/9/27 23:01:53

通义千问轻量模型:开发者API文档检索效率提升35%

通义千问轻量模型&#xff1a;开发者API文档检索效率提升35% 1. 引言&#xff1a;开发者每天浪费在找文档上的时间 如果你是一名开发者&#xff0c;下面这个场景你一定不陌生&#xff1a;为了调用一个API&#xff0c;你需要先找到它的官方文档。你打开搜索引擎&#xff0c;输…

作者头像 李华
网站建设 2026/9/28 21:15:49

深度学习项目训练环境:快速搭建与实战应用

深度学习项目训练环境&#xff1a;快速搭建与实战应用 你是否经历过这样的场景&#xff1a;花三天配环境&#xff0c;调两天报错&#xff0c;跑一小时显存溢出&#xff0c;最后发现是CUDA版本和PyTorch不兼容&#xff1f;或者刚下载完代码&#xff0c;却卡在“ModuleNotFoundE…

作者头像 李华
网站建设 2026/9/30 13:03:30

Qwen2.5-0.5B实测:轻量级模型的强大对话能力展示

Qwen2.5-0.5B实测&#xff1a;轻量级模型的强大对话能力展示 1. 引言 在AI大模型快速发展的今天&#xff0c;很多人都有一个疑问&#xff1a;小参数模型真的能用吗&#xff1f;0.5B参数的模型能做什么&#xff1f;今天我们就来实测阿里巴巴最新推出的Qwen2.5-0.5B-Instruct模…

作者头像 李华