作者:zhxfl

邮箱:zhxfl##mail.ustc.edu.cn

主页:http://www.cnblogs.com/zhxfl/p/4155236.html

第1个版本blog在这里:http://www.cnblogs.com/zhxfl/p/4134834.html

第2个版本github:https://github.com/zhxfl/CUDA-CNN

欢迎fork,在第一个版本的时候,我们只是针对手写数字,也就是黑白图片。在第二个版本中,我加入了很多东西。

第二个版本的特性

1、支持rgb图片格式和rgbd图片格式(带有深度信息的图片)训练,带有深度信息的图片可以来源于Kinect。

参考论文Anddrew Y.Ng的论文:Convolutional-Recursive Deep Learning for 3D Object Classification,你可以找到对应的带有深度信息的数据集。

4d的图片不是这个版本的主要目的,但是你确实可以用这个代码来训练4D的数据集。(我在不久的未来会让这个版本更好的支持4D数据的训练)

2、第二个比较突出的特性是你可以看到配置文件的参数更加复杂了,我会对所有参数一一做说明。

 #Comment#

 IS_GRADIENT_CHECKING = false;   #is true when debug#
BATCH_SIZE = 100; #test image size should be divided with no remainder#
NON_LINEARITY = NL_RELU; #NON_LINEARITY CAN = NL_SIGMOID , NL_TANH , NL_RELU#
CHANNELS = 3; #1, 3, 4#
CROP = 0.0; #0<= crop <=imgSize#
SCALE = 0.0; #ImgSize from -13.0 to 13.0#
ROTATION = 0.0; #angle from -13.0 to 13.0#
DISTORTION = 0.0; #just for mnist#
SHOWIMAGE = false; #show the images after transformation# [
LAYER = CONV;
KERNEL_SIZE = 5;
KERNEL_AMOUNT = 7;
WEIGHT_DECAY = 1e-6;
POOLING_DIM = 2;
] [
LAYER = CONV;
KERNEL_SIZE = 5;
KERNEL_AMOUNT = 9;
WEIGHT_DECAY = 1e-6;
POOLING_DIM = 2;
] [
LAYER = FC;
NUM_HIDDEN_NEURONS = 256;
WEIGHT_DECAY = 1e-6;
DROPOUT_RATE = 0.5;
] [
LAYER = FC;
NUM_HIDDEN_NEURONS = 256;
WEIGHT_DECAY = 1e-6;
DROPOUT_RATE = 0.5;
] [
LAYER = SOFTMAX;
NUM_CLASSES = 10;
WEIGHT_DECAY = 1e-6;
]
1)IS_GRADIENT_CHECKING 这是一个debug选项(其原理可以参考斯坦福深度学习的教程)。如果你修改了代码,建议你设置为true。你必须确保(g(s + delta) - g(s - delta)) / 2 约等于g(s)。他可以辅助你判断目前的代码是否存在bug。
2)BASH_SIZE,我们训练的方法是mini-batch,这个数值的设置对于收敛的结果和速度都是有影响的。建议可以尝试50,100,150,200等,你会得到不同的试验结果。 接下来的几个参数都是用来克服overfitting的,对于深度学习而言,训练样本越多,效果会越好。所以我们对于训练数据必须加以扩展。 3)CROP是裁剪参数,假设图像大小为ImgSize,那么是最终训练的数据应该是ImgSize-CROP,裁剪的窗口起点是随机的,也就是一张图片已经变成了CROP*CROP张图片了。
4)ROTATION是旋转,这步操作对于手写数字非常有效,但是你必须确保旋转的角度不要过大,比如13度,那么最后代码训练的图片都会被随机的旋转角度[-13,13],这是一个区间。
5)DISTORTION又称为畸变,这个也比较适合手写数字,参数越大,图片变化越大,从大量实验看,针对手写数据集,设置为3.4是比较合适的,原理参考论文Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis
6)SHOWIMAGE这是一个debug选项,3)-5)都是对图片做一些变化,如果你想知道变化的效果,那么可以把这个参数设置为true,这样你就可以看到变化之后的效果。方便你更好的调整3)-5)这些参数。 目前试验结果
1、对CIFAR-10数据集进行了比较短时间的训练(没有对数据进行变化),测试准确率是81.37%,接近于https://code.google.com/p/cuda-convnet/ 的初步结果,这样一个试验结果已经足够说明代码的正确性了。
我最初的代码是参考http://eric-yuan.me/cnn3/,Eric加入了不少东西,但是针对CIFAR-10他只是得到了71%的正确率,我能够等到更高的正确率归功于CUDA加速,使得我可以设置规模更大的网络,仅此而已。
当然,在我的第三个大版本中,我会确保针对cifar-10数据集,我能够得到接近于所有公开结果中最好的实验结果。
2、针对mnist数据集,依然可以轻易的实现99%以上的正确率。 第3个版本的主要任务。
1、在实现第二个版本的时候,我fix了大量的bug,你要清楚,一个大型项目不可能没有bug的,只要他不影响工作,目前从试验效果看,第二个版本已经稳定了。
2、目前我的网络结构依然太单一了,第3个版本的核心任务就是加入如下两个特性:
1)参考Notes on Convolutional Neural Networks第3.3节,Learning Conbinations of Feature Maps。
2)参考ImageNet Classification with Deep Convolutional Neural Networks第3.3节,Local Response Normalization。
这两个特性是非常重要,可以非常显著提升数据集CIFAR-10的准确率,你会在第3个版本看到这两个特性,并且通过配置文件决定是否使用它们进行训练(因为针对mnist你并不需要这么复杂的特性,加入会降低运算效率)。

深度学习 CNN CUDA 版本2的更多相关文章

  1. 深度学习-CNN+RNN笔记

    以下叙述只是简单的叙述,CNN+RNN(LSTM,GRU)的应用相关文章还很多,而且研究的方向不仅仅是下文提到的1. CNN 特征提取,用于RNN语句生成图片标注.2. RNN特征提取用于CNN内容分 ...

  2. 深度学习-使用cuda加速卷积神经网络-手写数字识别准确率99.7%

    源码和运行结果 cuda:https://github.com/zhxfl/CUDA-CNN C语言版本参考自:http://eric-yuan.me/ 针对著名手写数字识别的库mnist,准确率是9 ...

  3. 深度学习——CNN

    整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 思想 filter尺寸 ...

  4. 小刘的深度学习---CNN

    前言: 前段时间我在树莓派上通过KNN,SVM等机器学习的算法实现了门派识别的项目,所用到的数据集是经典的MNIST.可能是因为手写数字与印刷体存在一些区别,识别率并是很不高.基于这样的情况,我打算在 ...

  5. 经典深度学习CNN总结 - LeNet、AlexNet、GoogLeNet、VGG、ResNet

    参考了: https://www.cnblogs.com/52machinelearning/p/5821591.html https://blog.csdn.net/qq_24695385/arti ...

  6. 深度学习-CNN tensorflow 可视化

    tf.summary模块的简介 在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程.利用Matpltlib进行可视化.利用TensorFlow自 ...

  7. python数据可视化、数据挖掘、机器学习、深度学习 常用库、IDE等

    一.可视化方法 条形图 饼图 箱线图(箱型图) 气泡图 直方图 核密度估计(KDE)图 线面图 网络图 散点图 树状图 小提琴图 方形图 三维图 二.交互式工具 Ipython.Ipython not ...

  8. 深度学习-theano-windows -cuda-环境搭建

    本文将具体介绍深度学习之cuda的环境搭建 工具:支持CUDA的显卡(安装cuda6.5),VS2013.Anaconda. 步骤: 1.安装cuda6.5 这个不具体介绍,网上有很多文章.注意选择你 ...

  9. win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)

    在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...

随机推荐

  1. VB逆向

    大家或许有所察觉了,随着我们课程的不断深入学习,我们感觉自身逆向的“内功”也在不断的增进! 我们从爆破入手,到现在逐步大家进入程序的内部,认识不同编译器开发的程序,探索不同的加密逻辑. 前边,我们的例 ...

  2. Generating Huge reports in JasperReports

    There are certain things to care while implementing the Jasper Reports for huge dataset to handle th ...

  3. hdu 4291 A Short problem

    数学题,找循环节!! 首先g(g(g(n)))=g(x) mod 1e9+7 则可知x有循环节1e9+7; 之后x=g(g(n)),则可算出g(n)的循环节,在算出n的循环节就可以了!! 代码如下: ...

  4. 在RedHat5.4 LINUX 安装mySQL数据库

    linux下mysql 最新版安装图解教程 1. 查看当前安装的linux版本 通过上图中的数据可以看出安装的版本为RedHat5.4,所以我们需要下载RedHat5.4对应的mysql安装包

  5. UR #13 Yist

    第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...

  6. live555源码研究(五)------DynamicRTSPServer类

    一.类DynamicRTSPServer作用 1,提供RTSP服务 二.类DynamicRTSPServer继承关系图

  7. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-007-给flowl加权限控制<secured>

    States, transitions, and entire flows can be secured in Spring Web Flow by using the <secured> ...

  8. MyEclipse 启动tomcat时报错:Cannot change deployment state from ERROR to REDEPLOYING.ds

    myeclipse 启动tomcat时报错:Cannot change deployment state from ERROR to REDEPLOYING.ds - 刘琦的专栏 - 博客频道 - C ...

  9. Python高级特性

    比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: 这是正确的姿势

  10. MySQL 普通索引、唯一索引和主索引

    1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn ...