源码和运行结果

cuda:https://github.com/zhxfl/CUDA-CNN

C语言版本参考自:http://eric-yuan.me/

针对著名手写数字识别的库mnist,准确率是99.7%,在几分钟内,CNN的训练就可以达到99.60%左右的准确率。

参数配置

网络的配置使用Config.txt进行配置##之间是注释,代码会自动过滤掉,其他格式参考如下:

#Comment#
#NON_LINEARITY CAN = NL_SIGMOID , NL_TANH , NL_RELU#
##
##
##
## IS_GRADIENT_CHECKING = false;
BATCH_SIZE = ;
NON_LINEARITY = NL_RELU; [
LAYER = CONV;
KERNEL_SIZE = ;
KERNEL_AMOUNT = ;
WEIGHT_DECAY = 1e-;
POOLING_DIM = ;
] [
LAYER = CONV;
KERNEL_SIZE = ;
KERNEL_AMOUNT = ;
WEIGHT_DECAY = 1e-;
POOLING_DIM = ;
] [
LAYER = FC;
NUM_HIDDEN_NEURONS = ;
WEIGHT_DECAY = 1e-;
DROPOUT_RATE = 0.5;
] [
LAYER = FC;
NUM_HIDDEN_NEURONS = ;
WEIGHT_DECAY = 1e-;
DROPOUT_RATE = 0.5;
] [
LAYER = SOFTMAX;
NUM_CLASSES = ;
WEIGHT_DECAY = 1e-;
]

1)目前代码支持多个卷积层,多个全链接层。

2)卷积层默认带有池化层,池化算法目前只支持最大值池化。

3)卷积层的卷积核大小只支持奇数。

4)全链接层支持Dropconnect。(配置里面写的是dropout,后面会纠正这个的)

5)weight_decay这个参数如果你不知道是做什么,也可以先不理会,先用这个值就行了。

编译代码

1)代码目前依赖cuda-6.0以及opencv,如果你不想去装opencv,可以将util.cu和util.h所有有关opencv的代码都去掉,整个代码只有这里使用到opencv,而且只是由于我在开发过程中需要显示图片来调试而已。

2)代码直接可以导入nsight然后编译运行。同时也可以再vs2010里面编译运行。

代码特性

1)我们对数据做了处理,每次进行训练之前,都会随机的进行旋转、尺度变换、畸变和裁剪。下图是两个例子,实际上,这样做非常有效,使得我们的准确能够更高

2)整个代码采用cuda进行加速,其中我们用到了cublas.lib和curand.lib两个库,一个是矩阵运算一个是随机数的生成。我一次性申请了所有需要使用的内存,在程序开始运行之后,就不存在任何CPU和GPU之间的数据交换,事实证明这样非常有效。程序的性能比原来作者C语言版本快了数十倍左右(如果网络比较大,可以达到一百倍左右的加速比)。我们每个epos使用1600ms,处理了60000张图片,也就是训练一张图片大概是0.0266ms。

3)实际上,如果训练多个网络,然后进行投票,准确率可以达到99.82%,这个结果是目前为止所有公开发表结果中最好(99.79%)的 。

深度学习-使用cuda加速卷积神经网络-手写数字识别准确率99.7%的更多相关文章

  1. 深度学习面试题12:LeNet(手写数字识别)

    目录 神经网络的卷积.池化.拉伸 LeNet网络结构 LeNet在MNIST数据集上应用 参考资料 LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务.自那时起 ...

  2. TensorFlow 卷积神经网络手写数字识别数据集介绍

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池 ...

  3. 基于Numpy的神经网络+手写数字识别

    基于Numpy的神经网络+手写数字识别 本文代码来自Tariq Rashid所著<Python神经网络编程> 代码分为三个部分,框架如下所示: # neural network class ...

  4. 深度学习(一):Python神经网络——手写数字识别

    声明:本文章为阅读书籍<Python神经网络编程>而来,代码与书中略有差异,书籍封面: 源码 若要本地运行,请更改源码中图片与数据集的位置,环境为 Python3.6x. 1 import ...

  5. 吴裕雄 python 神经网络——TensorFlow 卷积神经网络手写数字图片识别

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_N ...

  6. caffe的python接口学习(4)mnist实例手写数字识别

    以下主要是摘抄denny博文的内容,更多内容大家去看原作者吧 一 数据准备 准备训练集和测试集图片的列表清单; 二 导入caffe库,设定文件路径 # -*- coding: utf-8 -*- im ...

  7. 神经网络手写数字识别numpy实现

    本文摘自Michael Nielsen的Neural Network and Deep Learning,该书的github网址为:https://github.com/mnielsen/neural ...

  8. keras基于卷积网络手写数字识别

    import time import keras from keras.utils import np_utils start = time.time() (x_train, y_train), (x ...

  9. 【问题解决方案】Keras手写数字识别-ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

    参考:台大李宏毅老师视频课程-Keras-Demo 在载入数据阶段报错: ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接 Google之 ...

随机推荐

  1. jquery mobile validation

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  2. hdu 1176

    简单DP  类似于在一个矩形中求最长路径 /************************************************************************* > ...

  3. express中ejs模板引擎

    1.在 app.js 中通过以下两个语句设置了 引擎类型 和页面模板的位置: app.set('views', __dirname + '/views'); app.set('view engine' ...

  4. 10 things you should know about NoSQL databases

    For a quarter of a century, the relational database (RDBMS) has been the dominant model for database ...

  5. MAC下编译FFMPEG

    1.下载ffmpeg,我使用xcode自带的git下载. 或者直接下载压缩包: 2.下载gas-preprocessor脚本 https://raw.github.com/mansr/gas-prep ...

  6. Android Paint中setTextSize

    界面适配的时候发现Paint.setTextSize与TextView.setTextSize传入的单位不一致.Paint.setTextSize传入的单位是px,TextView.setTextSi ...

  7. Spring RestTemplate介绍

    http://www.cnblogs.com/rollenholt/p/3894117.html RestTemplate 这篇文章打算介绍一下Spring的RestTemplate.我这边以前设计到 ...

  8. etc/ld.so.conf的使用说明

    这个文件记录了编译时使用的动态链接库的路径.默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 &g ...

  9. AndroidManifest.xml 详情对应介绍

    ——————————————————————————————————————————————————————————————————————————SETTING设置功能消息免打搅 com.tence ...

  10. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)5-----Assembly.Unload

    http://www.blogcn.com/user8/flier_lu/index.html?id=2164751&run=.04005F8 CLR 产品单元经理(Unit Manager) ...