深度学习 CNN CUDA 版本2

作者: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、第二个比较突出的特性是你可以看到配置文件的参数更加复杂了,我会对所有参数一一做说明。

 1 #Comment#
 2
 3 IS_GRADIENT_CHECKING = false;   #is true when debug#
 4 BATCH_SIZE = 100;               #test image size should be divided with no remainder#
 5 NON_LINEARITY = NL_RELU;        #NON_LINEARITY CAN = NL_SIGMOID , NL_TANH , NL_RELU#
 6 CHANNELS = 3;                   #1, 3, 4#
 7 CROP = 0.0;                     #0<= crop <=imgSize#
 8 SCALE = 0.0;                    #ImgSize from -13.0 to 13.0#
 9 ROTATION = 0.0;                 #angle from -13.0 to 13.0#
10 DISTORTION = 0.0;               #just for mnist#
11 SHOWIMAGE = false;              #show the images after transformation#
12
13 [
14 LAYER = CONV;
15 KERNEL_SIZE = 5;
16 KERNEL_AMOUNT = 7;
17 WEIGHT_DECAY = 1e-6;
18 POOLING_DIM = 2;
19 ]
20
21 [
22 LAYER = CONV;
23 KERNEL_SIZE = 5;
24 KERNEL_AMOUNT = 9;
25 WEIGHT_DECAY = 1e-6;
26 POOLING_DIM = 2;
27 ]
28
29 [
30 LAYER = FC;
31 NUM_HIDDEN_NEURONS = 256;
32 WEIGHT_DECAY = 1e-6;
33 DROPOUT_RATE = 0.5;
34 ]
35
36 [
37 LAYER = FC;
38 NUM_HIDDEN_NEURONS = 256;
39 WEIGHT_DECAY = 1e-6;
40 DROPOUT_RATE = 0.5;
41 ]
42
43 [
44 LAYER = SOFTMAX;
45 NUM_CLASSES = 10;
46 WEIGHT_DECAY = 1e-6;
47 ]
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 Analysis6)SHOWIMAGE这是一个debug选项,3)-5)都是对图片做一些变化,如果你想知道变化的效果,那么可以把这个参数设置为true,这样你就可以看到变化之后的效果。方便你更好的调整3)-5)这些参数。

目前试验结果1、对CIFAR-10数据集进行了比较短时间的训练(没有对数据进行变化),测试准确率是72.79%,接近于https://code.google.com/p/cuda-convnet/ 的初步结果,这样一个试验结果已经足够说明代码的正确性了。如果你想让结果更好,可以尝试对图片做一些变换,并且调整网络的规模进行训练,只要足够耐心你可以利用我的代码得到80%左右的正确率。  我最初的代码是参考http://eric-yuan.me/cnn3/,Eric加入了不少东西,但是针对CIFAR-10他只是得到了65%的正确率,我能够等到更高的正确率归功于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你并不需要这么复杂的特性,加入会降低运算效率)。
时间: 2024-08-29 13:30:50

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

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 1,卷积神经网络-CNN 基础知识 三个要点 1: 首先将输入数据看成三维的张量(Tensor) 2: 引入Convolution(卷积)操作,单元变成卷积核,部分连接共享权重 3:引入Pooling(采样)操作,降低输入张量的平面尺寸 ,1.1 张量(Tensor) 高,宽度,深度,eg:彩色图像:rgb,3个深度,图

小刘的深度学习---CNN

前言: 前段时间我在树莓派上通过KNN,SVM等机器学习的算法实现了门派识别的项目,所用到的数据集是经典的MNIST.可能是因为手写数字与印刷体存在一些区别,识别率并是很不高.基于这样的情况,我打算在PC端用CNN试一试MNIST上的识别率. 正文: 一张图展示CNN 导入基础包 import tensorflow as tf from sklearn.datasets import load_digits import numpy as np 导入数据集 digits = load_digit

深度学习-CNN tensorflow 可视化

tf.summary模块的简介 在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程.利用Matpltlib进行可视化.利用TensorFlow自带的可视化工具TensorBoard进行可视化.这三种方法,在前面博客中都有过比较详细的介绍.但是,TensorFlow中最重要的可视化方法是通过tensorBoard.tf.summary和tf.summary.FileWriter这三个模块相互合作来完成的. tf.summary模块的定义位于s

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

一.可视化方法 条形图 饼图 箱线图(箱型图) 气泡图 直方图 核密度估计(KDE)图 线面图 网络图 散点图 树状图 小提琴图 方形图 三维图 二.交互式工具 Ipython.Ipython notebook Plotly 三.Python IDE类型 PyCharm,指定了基于Java Swing的用户界面 PyDev,基于SWT的用户界面(适用Eclipse) IEP(Interactive Editor for Pyhton),交互式编辑器 Enthought中的Canopy:以PyQt

IJCAI_论文-深度学习-Deep Learning for Event-Driven Stock Prediction

Deep Learning for Event-Driven Stock Prediction Reading time:2019/3/30-2019/4/12  Theme:Deep learning; CNN; NLP Abstract: We propose a deep learning method for eventdriven stock market prediction. First, events are extracted from news text, and repre

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

在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1060的显卡,可以用来更快地跑深度学习算法.以前用公司HP的工作站配置过dlib,GPU是Quadro K420,用dlib自带的人脸识别算法(ResNet)测试过,相比较1060的速度确实要快上很多.dlib.cuda和cudnn的版本经常会更新,每次重新配置环境会遇到一些问题,在这里记下来吧.

Deep Learning(深度学习)学习笔记整理系列之(四)——CNN

[email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-04-08 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈

深度学习之在iOS上运行CNN

1 引言 作为曾经的iOS开发者,在研究深度学习的时候,总有一个想法就是在iPhone上运行深度学习,不管是在手机上训练还是利用训练好的数据进行测试. 因为iOS的开发环境支持C++,因此,只要你的代码是C/C++,本质上就可以在iOS上运行. 怎么才能更快更好地在iOS上运行CNN呢? 2 方法1:通过Matlab转码 Matlab自带转成c的工具,如果你研究过UFLDL的深度学习教程,就知道如何在Matlab上使用CNN,那么,转换成c后,放到iOS的开发环境中,然后将参数存成txt格式再读

手把手教你搭建深度学习平台——避坑安装theano+CUDA

python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用python的发行版Anaconda. Step1 安装Anaconda 这里不建议使用python3.4以后的Anaconda版本,因为太新的版本(python3.5)不支持python/matlab混合编程.所以为了以后方便,建议使用python2.7的Anaconda版本.Anaconda安装完成后,n