当前位置:首页>> >>


基于CUDA的卷积神经网络算法实现毕业设计(源码和文档).rar

收藏

资源目录
    文档预览:
    编号:20180825164902334    类型:共享资源    大小:31.93MB    格式:RAR    上传时间:2018-08-25
      
    60
    金币
    关 键 词:
    基于 CUDA 卷积 神经网络 算法 实现 毕业设计 源码 文档
    资源描述:
    毕 业 设 计题目:基于 CUDA 的卷积神经网络算法实现学 生: 章飞 学 号: 201206060234 学 院: 电气与信息工程学院 专 业: 计算机科学与技术 指导教师: 齐勇 2016 年 6 月 19 日基于 CUDA 的卷积神经网络算法实现摘 要卷积神经网络是近年来人工智能领域取得重大突破的一种重要手段,给出了图像识别、语音识别和自然语言处理领域中关键问题的优化解决方案,尤其适合处理图像方面的任务,如人脸识别和手写体识别。手写数字识别是用卷积神经网络解决的经典问题,采用一般方法训练出来的神经网络达到了 97%的识别率,几乎与人类的识别精度一致,但在执行速度上没有人类识别得快。在实际商业应用中不可避免地会遇到数据量过大的问题,如在手写数字识别中有 60000 条规格为 28*28 单位像素的训练样本需要训练,这样会导致执行速度较慢,CPU 在处理这样包含大量高精度浮点数的任务时,其消耗的时间是不可接受的,在训练期要花费数小时的时间。针对上述问题,该文将构建基于 CUDA 架构的编程环境,采用 CUDA/C++编程实现卷积神经网络算法,将卷积神经网络算法应用于手写数字识别问题中,在选择合适的网络模型和相关参数的情况下,利用 GPU 的高度并发性能,提高卷积神经网络训练数据的速度。通过对 GPU 实现和 CPU 实现进行对比实验,验证对卷积神经网络算法进行 CUDA 并行化训练和识别是可行有效的,实验表明在普通 PC 机上采用 GPU 实现的卷积神经网络算法比 CPU 实现的卷积神经网络算法虽然在准确率上仅提升了0.29%,但在速度上加快了 15%。关键词:CUDA,卷积神经网络,深度学习,并行计算IConvolutional neural network Based on CUDAABSTRACTConvolutional neural network is a major breakthrough in the field of artificial intelligence in recent years, an important means of image recognition given to optimize speech recognition and natural language processing solutions, especially for process images tasks, such as human face recognition and handwriting recognition. Handwritten numeral recognition is a classic problem with the convolutional neural network to solve, using the general method of trained neural network reaches 97% recognition rate, with almost the same human recognition accuracy, but the speed of execution without human recognition quickly. In practical commercial applications will inevitably encounter the problem of data overload, as there are 60,000 training sample size is 28 * 28 pixel units need to be trained in digital handwriting recognition, this will result in slower performance, CPU in when processing tasks such contains a lot of high-precision floating-point number, the elapsed time is unacceptable, in the training period to spend a few hours.To solve these problems, this paper will build a CUDA architecture-based programming environment using CUDA / C ++ programming to implement the convolution neural network algorithm. The convolution neural network algorithm is applied to handwritten numeral recognition problem. After selecting an appropriate network model and related parameters, the use of highly concurrent GPU performance, convolution neural network training to improve the speed of data. Then use the model to achieve the GPU and CPU to complete some comparative tests to verify the fact that using the CUDA to parallel implementing convolution neural network algorithm for training and recognition is feasible and effective, experiments show that on the common PC the neural network algorithm convolution convolution neural network algorithm to achieve GPU than CPU implementations on the speed by 15%, on the accuracy improved 0.29%.Key words:CUDA, CNN, Deep Learning, Parallel ComputingII目 录摘 要 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙IABSTRACT∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙II目 录 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙III1 绪论 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙11.1 深度学习的发展和现状 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙11.2 研究意义 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙22 人工神经网络和卷积神经网络的结构及算法 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙42.1 人工神经网络 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙42.1.1 神经元 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙42.1.2 多层前馈网络 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙42.1.3 BP 算法 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙52.2 卷积神经网络 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙62.2.1 局部连接与权值共享 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙72.2.2 网络结构 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙72.2.3 卷积层 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙82.2.4 采样层 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙83 CUDA 平台介绍 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙103.1 CUDA 简介 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙103.2 CUDA 编程 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙103.2.1 CUDA 的执行模型 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙103.2.2 常用函数及用法 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙113.3 CUDA 开发环境搭建 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙114 数据方阵化处理及网络模型设计 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙134.1 数据方阵化 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙134.1.1 手写数字数据库 MNIST 介绍 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙134.1.1 手写数字数据库 MNIST 的数据方阵化 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙144.2 网络模型设计 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙154.2.1 网络结构 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙154.2.2 权重初始化方式 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙174.2.3 激活函数的选择 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙194.2.4 实验总结 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙205 卷积神经网络并行化设计及实现 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙21III5.1 基于 CUDA 的卷积神经网络的训练过程 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙215.1.1 网络初始化 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙225.1.2 网络前向传播过程 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.1.3 网络的反向传播过程 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.1.4 网络的权值和偏置更新过程 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.1.5 保存训练结果 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.2 并行化分析及实现 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.2.1 并行化分析 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙245.2.2 梯度下降算法的实现 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙255.2.3 全连接层的前馈和反馈实现 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙275.2.4 Softmax 回归算法的实现 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙275.3 对比实验 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙296 结论 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙31致 谢 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙32参 考 文 献 ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙33陕西科技大学毕业设计说明书 01 绪论1.1 深度学习的发展和现状深度学习(Deep Learning)从 2006 年 Hinton 在 Science 上的论文算起,深度学习发展至今才十年。在这短短几年时间里,深度学习颠覆了语音识别、图像分类、文本理解等众多领域的算法设计思路,渐渐形成了一种从训练数据出发,经过一个端到端(end-to-end)的模型,然后直接输出得到最终结果的一种新模式。这不仅让一切变得更加简单,而且由于深度学习中的每一层都可以为了最终的任务来调整自己,最终实现各层之间的通力合作,因而可以大大提高任务的准确度。随着大数据时代的到来以及 GPU 等各种更加强大的计算设备的发展,深度学习如虎添翼,可以充分利用各种海量数据(标注数据、弱标注数据或者仅仅数据本身) ,完全自动地学习到抽象的知识表达,即把原始数据浓缩成某种知识。当然,深度学习不见得是最完美的框架,离最终所谓的智能也还差得很远,而且目前还基本没有理论上的有效性解释。但是无论如何,深度学习之风已经势不可挡。深度学习本质上其实就是多层神经网络,而神经网络在几十年前大家就开始研究了。神经网络的一层,其实就是一个线性变换加上一个简单的非线性操作,而多层神经网络其实就是多个简单的非线性函数的复合。一层、两层的网络用途比较有限,往往很难刻画输入与输出之间的复杂关系。但是深层的网络,历史上又一直无法进行有效训练。卷积神经网络在当前的图像识别语音分析领域成为热点,这主要源于卷积神经网络多层次的处理和生物神经网络相似,权值共享等特性减少了网络训练中的参数。深度学习的经典模型卷积神经网络(CNN)其实在上世纪八九十年代就出现了,而且其中 LeNet-5 模型在简单的手写体识别问题上已经取得了很大的成功。但是当时的计算能力无法支持更大规模的网络,而 LeNet-5 在复杂物体识别上的表现也并不好。这主要是因为:深层网络由于是高度非线性的,有着太多的局部极值,很难保证能够得到一个可以接受的好的解;优化策略的核心就是梯度下降法,但对于一个深层的网络,它的函数的梯度也非常复杂,于是,误差反向传播算法就经常在参数初始值选择不当的时候产生梯度消失或者梯度爆炸现象,导致优化无法正常进行;数据集过小,对于训练一个深层的网络来说,往往会造成过拟合的问题;计算能力的限制,对于数量众多的参数训练,往往要花费几个月的时间。直到 2012 年的 ImageNet 比赛中,Hinton和他的学生 Alex 等人参赛,把准确率提高到 84.7%。当然,他们的成功借助了ImageNet 这个足够大的数据集,借助了 GPU 的强大计算能力,借助了比较深层的CNN 网络,借助了随机梯度下降(SGD)和 Dropout 等优化技巧,借助了训练数据扩基于 CUDA 的卷积神经网络算法实现 1充策略(Data Augmentation) 。但无论如何,他们靠着深度学习震惊了机器学习领域,从此大量的研究人员开始进入这个领域,一发不可收拾。2013 年是 89%,2014 年是93.4%,截止到 2015 年 5 月份,ImageNet 数据集的精度已经达到了 95%以上,某种程度上跟人的分辨能力相当了。深度学习在很多学术领域,比非深度学习算法往往有 20-30%成绩的提高。很多大公司也逐渐开始出手投资这种算法,并成立自己的深度学习团队,其中投入最大的就是谷歌,2008 年 6 月披露了谷歌脑项目。2014 年 1 月谷歌收购 DeepMind,然后 2016年 3 月其开发的 Alphago 算法在围棋挑战赛中,战胜了韩国九段棋手李世石,证明深度学习设计出的算法可以战胜这个世界上最强的选手。在硬件方面,Nvidia 最开始做显示芯片,但从 2006 及 2007 年开始主推用 GPU 芯片进行通用计算,它特别适合深度学习中大量简单重复的计算量。目前很多人选择Nvidia 的 CUDA 工具包进行深度学习软件的开发。微软从 2012 年开始,利用深度学习进行机器翻译和中文语音合成工作,其人工智能小娜背后就是一套自然语言处理和语音识别的数据算法。百度在 2013 年宣布成立百度研究院,其中最重要的就是百度深度学习研究所。Facebook 和 Twitter 也都各自进行了深度学习研究,其中前者携手纽约大学教授 Yann Lecun,建立了自己的深度学习算法实验室;2015 年 10 月,Facebook宣布开源其深度学习算法框架,即 Torch 框架。Twitter 在 2014 年 7 月收购了Madbits,为用户提供高精度的图像检索服务。工业与学术界的数据科学家已将 GPU 用于机器学习以便在各种应用上实现开创性的改进,这些应用包括图像分类、视频分析、语音识别以及自然语言处理等等。尤其是深度学习,人们在这一领域中一直进行大力投资和研究。深度学习是利用复杂的多级深度神经网络来打造一些系统,这些系统能够从海量的未标记训练数据中进行特征检测。 虽然机器学习已经有数十年的历史,但是两个较为新近的趋势促进了机器学习的广泛应用: 海量训练数据的出现以及 GPU 计算所提供的强大而高效的并行计算。人们利用 GPU 来训练这些深度神经网络,所使用的训练集大得多,所耗费的时间大幅缩短,占用的数据中心基础设施也少得多。GPU 还被用于运行这些机器学习训练模型,以便在云端进行分类和预测,从而在耗费功率更低、占用基础设施更少的情况下能够支持远比从前更大的数据量和吞吐量。将 GPU 加速器用于机器学习的早期用户包括诸多规模的网络和社交媒体公司,另外还有数据科学和机器学习领域中一流的研究机构。与单纯使用 CPU 的做法相比,GPU 具有数以千计的计算核心、可实现 10-100 倍应用吞吐量,因此 GPU 已经成为数据科学家处理大数据的处理器。陕西科技大学毕业设计说明书 21.2 研究意义在球技术突飞猛进,人们在日常生活中获取信息越来越方便,同时也产生出了海量的数据信息。在这样的大背景下,人们利用计算机对我们现有的数据通过一些处理得到一定的规律,处理之后我们可以利用学到的规律能够得到数据背后有意义的东西,不仅仅是眼前所见的数据,而是数据包含的真正的意义,这一过程就被称为机器学习。其主要用途就是通过对提供数据的处理,然后找到这个数据的分类,或是对数据进行回归,进行数值的预测。生活中随处可见机器学习的用途:搜索引擎对搜索结果的排序问题,人们使用搜索人们使用搜索引擎的时候,搜索引擎会记录下人们的搜索习惯,以及人们在搜索结果中点击的内容,经过长时间的累积,搜索引擎就会根据你的日常运用搜索引擎的习惯猜测你所从事的行业,根据这些内容重新排序搜索的结果,将适合你的搜索结果推送给你,这就用到了机器学习; 生活中这样的应用有人脸识别、手写识别、垃圾邮件过滤、购买商品推荐、购买行为预测等等,因此,机器学习对于对于科学来说具有重要意义,是人们必不可少的,对机器学习的研究有深远的意义。卷积神经网络是目前机器学习领域的热点,因为其网络结构与视觉神经系统中的感受野相似,因此尤为适合处理图像方面的任务。虽然卷积神经网络在准确度等方面有着不错的表现,但在实际运用时不可避免会遇到输入数据量过大,网络层数过大,导致运算速度慢的问题,即使是当前最先进的 CPU,其消耗的时间也都是不可接受的。近几年 GPU 通用并行技术得到了飞速的发展,因为其计算核心的数量远远多于 CPU,在高度并行的计算问题上,GPU 的计算效率要远高于 CPU。CUDA 是由英伟达公司推出的 GPU 通用并行计算平台,不仅提供了一系列 API 使得开发人员能够绕过 GPU 的图形 API 来直接访问 GPU 的硬件,还提供了一个 C 语言编译器,使得开发人员能够使用 C 语言来进行快速的开发。基于 CUDA 的代码就可以运行在 GPU 上,使得卷积神经网络算法在 GPU 上的开发成为可能。对于深度学习来说,在输入的数量较大时,运行速度慢。堆砌硬件的方式是有尽头的,出路只有软件方式。GPU 的主频没有 CPU 快,但擅长浮点线性代数处理。需要研究 CPU 和 GPU 怎么配合,才能尽可能地提高神经网络的训练速度。本文将实现基于 CUDA 的卷积神经网络算法,加快网络的训练和识别速度,这在现阶段互联网飞速发展,需要处理海量数据的情况下具有重要的意义。基于 CUDA 的卷积神经网络算法实现 32 人工神经网络和卷积神经网络的结构及算法2.1 人工神经网络2.1.1 神经元感知器在 20 世纪五、六十年代由科学家 Frank Rosenblatt 发明,其主要基于生物学神经系统中神经元的工作原理。人工神经元(Neuron)是构成人工神经网络的基本单元。人工神经元和感知器非常类似,它模拟生物神经元的特性,接受一组输入信号并产生输出。生物神经元有一个阈值,当神经元所获得的输入信号的积累效果超过阈值时,它就处于兴奋状态;否则,处理抑制状态。人工神经元使用一个非线性的激活函数,输出一个活性值。假定神经元接受 n 个输入 ,用状态 z 表示一个神经元所获得的输入信号 x 的加权和,输出为),.(21nxx该神经元的活性值 a。具体定义如下: bxwT(2-1))(zfa(2-2)其中,w 是 n 维的权重向量,b 是偏置。典型的激活函数有 sigmoid 型函数、tanh型函数、relu 型函数等。2.1.2 多层前馈网络前馈神经网络是最早发明的简单人工神经网络。所谓神经网络是指将多个单一神经元连接在一起,将一个神经元的输出作为下一个神经元的输入。包含多个隐藏层的神经网络。如图 2-1 所示。input layer outp layerhiden layr 1hiden layr 2图 2-1 多层前馈神经网络结构图使用下面的记号描述网络:L:神经网络层数。:表示第 层神经元的个数。lnl陕西科技大学毕业设计说明书 4:表示第 -1 层到第 层的权重矩阵。)(lwll:表示从 -1 层的第 j 个神经元到第 层的第 i 个神经元的连接上的权重。)(lij l:表示第 -1 层到第 层的偏置。)(lbll:表示第 层的神经元状态。z:表示第 层的神经元活性值。)(lal:表示第 层神经元的激活函数。lf前馈神经网络通过下面公式进行信息传播。将参数矩阵化,使用矩阵-向量运算方式,就可利用线性代数的优势将神经网络快速求解。 )()1()( lll bawz(2-3)lzf(2-4)2.1.3 BP 算法机器学习中模型预测结果与实际标签的差距的方程叫做代价函数(cost function)。 机器学习训练的目的是找到一系列的参数,使得对于全部训练数据与类别,代价函数的值最小。就手写数字识别来说,对于训练数据有 60000 的模型,训练目的是使得所有60000 条数据的预测与实际差距最小。对于有一个带标签的固定样本集 ,共 n 个样例。)},(),.(),{( ()2()1 myxyx可以使用批量梯度下降的方法等优化方法训练神经网络。具体来讲,对于单个样例(x,y),它的代价函数如下: 2,|)(|21),;(yxhyxbwCbw(2-5)这是一个方差代价函数。给定一个包含m个样例的数据集,可以定义整体代价函数为: 12)(1)(2,;(),( lnlijljimi iyxbb(2-6)以上公式中的第一项是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减少权重的幅度,防止过度拟合现象的发生。自觉地看,规范化的效果是让网络倾向于学习小一点的权重。大的权重只有能够给出代价函数第一项足够的提升时才能允许,换言之,规范化可以当做寻找小的权重和最小化原始的代价函数之间的折中。权重衰减参数用于控制公式中前后两项的相对重要性。如果使用梯度下降算法来最小化代价函数 ),(bwC,可以使用下面的方法更新参数: ),())()(wlijlijlij(2-7)
    展开阅读全文
    1
      金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:基于CUDA的卷积神经网络算法实现毕业设计(源码和文档).rar
    链接地址:http://www.gold-doc.com/p-97669.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
    copyright@ 2014-2018 金牌文库网站版权所有
    经营许可证编号:浙ICP备15046084号-3
    收起
    展开