没有合适的资源?快使用搜索试试~ 我知道了~
学习报告1
需积分: 0 0 下载量 51 浏览量
2022-08-04
00:37:56
上传
评论
收藏 978KB PDF 举报
温馨提示
试读
20页
1.背景介绍1.1. 选题动机自 1943 年神经元模型提出至今,神经网络已经经历了三个历史阶段。依托于大规模数据集和大量计算资源,深度学习技术如今在众多领域都
资源详情
资源评论
资源推荐
GPGPU-简单卷积神经网络的并行加速优化
1
简单卷积神经网络的并行加速优化
1. 背景介绍
1.1. 选题动机
自 1943 年神经元模型提出至今,神经网络已经经历了三个历史阶段。依托
于大规模数据集和大量计算资源,深度学习技术如今在众多领域都表现出统治级
的地位。我所在的计算机视觉方向便是其一,传统的视觉方法几乎销声匿迹,取
而代之的是以卷积神经网络为代表的深度学习方法。
深度学习的兴起伴随着其编程语言的迭代,现阶段有很多的深度学习框架可
以被研究者和从业者使用,比如 Tensorflow, Pytorch, Caffe, Keras 等,这些框架
提供了很多的接口,使得深度学习的开发难度相对减小,效率大大提高。但当进
入到深层次的科研阶段或者工业界的落地阶段时,算法往往需要研究员和从业者
进行底层的编码以进行新方法的实现或代码的优化。
本项目基于此理念,复现了一个纯 C++实现的简单卷积神经网络,在理解的
基础上进行了 CUDA 编程,引入 GPU 并行加速模块,加深了对多卷积神经网络
的理解和底层实现。
1.2. 网络框架
卷积神经网络是深度学习网络中代表性的网络结构之一,其将深度神经网络
的大量全连接层替换为具有局部性的卷积操作。如图 1-1 所示,本项目实现了具
有卷积层、池化层、全连接层等网络层的简单卷积神经网络,其中卷积层、池化
层、全连接层间可以相互嵌套,形成深层神经网络。
图 1-1 卷积神经网络
GPGPU-简单卷积神经网络的并行加速优化
2
1.3. 数据集与实验设计
1.3.1. 数据集
本项目使用了 Mnist 手写数字数据集[1],一般以该数据集作为视觉方向网络
测试的典范数据集。训练集包含了 60,000 个样本,测试集包含了 10,000 个样本,
图片大小为 28*28*1。
图 1-2 Mnist 手写数字数据集
1.3.2. 实验设计
本项目的实验环境为 Visual Studio 2019, CUDA11.2 和 GeForce GTX 1080 Ti。
实验环节对单个训练周期的时间进行统计,网络包括 1 个卷积层(5×5×32)、 1
个池化层(2×2×32)、 1 个全连接层(1024)和 1 个 SoftMax 层( 10)。 以 Batch
Size=16,5 次训练迭代 debug 模式下的运行平均值作为单次训练周期的时长,通
过对不同模块采用 CPU/GPU 运算,对比不同配置下的代码执行效率,反映优化
效率。
后经老师指点,增大训练数据,将 Batch Size 增大到 1024,同时以 50 次训
练迭代的时长进行计算。由于增大数据量后程序运行时间较长,对每一单步并行
的改进不再测试,对串、并及优化后的代码分别测试,实验结果处保留各次记录。
GPGPU-简单卷积神经网络的并行加速优化
3
2. 项目框架及算法实现
本项目的串行代码实现参考了 lygyue 的 github 项目 SimpleDeep
LearningFramework[2],项目共包含 stdafx.h, targetver.h, MnistFileManager.h, Sdlf.h,
SdlfModel.h, SdlfLayer.h, SdlfCalculator.h, SdlfCalculatorCPU.h,
SdlfCalculatorCUDA.h, SdlfFunction.h, SdlfFunctionCUDA.h, KernelCPU.h,
KernelCUDA.h 和 Common.h 共计 11 个头文件,以及 stdafx.cpp, train.cpp,
MnistFileManager.cpp, SdlfModel.cpp, SdlfLayer.cpp, SdlfCalculator.cpp,
SdlfCalculatorCPU.cpp, SdlfCalculatorCUDA.cpp, SdlfFunction.cpp,
SdlfFuncitonCUDA.cpp 和 Kernel.cu 共计 10 个源码文件,大部分头文件与源码文
件相对应,头文件主要负责相关结构体、类和函数等数据结构的定义,源码文件
对头文件中的结构体、类、函数等进行实现。其中带有 CUDA 字样的文件为并
行过程的代码实现,其余文件为串行过程代码,下面给出主要框架及各文件的简
单介绍。
2.1. 框架概述
Stdafx.h/cpp, targetver.h 是项目无关的 VS 文件;Common.h 定义了项目通用
的内存管理、错误处理等宏和方法;MnistFileManager.h/cpp 定义实现了数据集
的处理;Sdlf.h 定义了模型控制相关的基准结构体及其方法,包括网络模型
(SdlfModel)、网络层(SdlfLayer)、网络计算(SdlfCalculator)和函数计算
(SdlfFunction)等,用于后续的继承与实现,如图 2-1 所示:
图 2-1 项目代码关系图
1) 网络模型在 SdlfModel.h 中被继承,定义了整个网络模型中可能会用到
的模型控制方法,包括模型的建立,训练与测试过程的进行,各层间的
调度等,其方法在 SdlfModel.cpp 中被具体实现;
剩余19页未读,继续阅读
图像车间
- 粉丝: 22
- 资源: 298
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0