源码和运行结果

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%)的 。

最新文章

  1. eclipse 高亮代码
  2. Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios )
  3. java eclipse打jar包和执行jar中的main函数
  4. 利用 Excel 公式进行数据整理
  5. C#中Monitor类、Lock关键字和Mutex类
  6. BZOJ-2037 Sue的小球 DP+费用提前
  7. Wcf for wp8 使用iis Express 承载Wcf服务部署发布网站(三)
  8. js命名空间笔记
  9. 阿里云服务器Node环境配置
  10. CentOS6.5修改mysql数据文件路径
  11. JS鼠标滑轮事件的写法和按键的事件
  12. The Kernel Newbie Corner: Kernel Debugging with proc "Sequence" Files--Part 3
  13. 又是干货,这个春节感觉吃饱了。各方面---RHCS集群理论
  14. rsync同步配置
  15. NYOJ 330 一个简单的数学
  16. 如何通过css设置表格居中
  17. cesium 之自定义气泡窗口 infoWindow 篇
  18. linux学习:wget与lynx用法整理
  19. ModelAndView返回json对象的方法
  20. 【干货】Jquery.Datables与Bootstrap3的组合使用

热门文章

  1. VB将PDF流写入ACCESS数据库,通过AcroPDF控件读出PDF流之实现
  2. nginx上用fastcgi配置python环境
  3. 宜昌IT软件资源汇总
  4. 咦,为DJANGO的ORM的QUERYSET增加数据列的样码,很好用哟
  5. 【前端学习】【CSS选择器】
  6. highChartTable 切换
  7. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过
  8. 117. Populating Next Right Pointers in Each Node II
  9. VPN column: PPTP(2)--PPTP协议解析
  10. js构造函数式编程