cuda-convnet 在其他数据集上的使用教程

cuda-convnet 是Alex Krizhevsky公开的一套CNN代码,运行于Linux系统上,使用GPU做运算,在cuda-convnet中仅仅提供了Cifar数据集的demo,并且网站上并没有说明cuda-convnet代码是如何用于其它数据库的,所以博主我就尝试修改源码,以用于MNIST数据集上,做一个手写数字的识别CNNdemo

文章分三个部分:

首先,IO模块

其次,修改Layer的参数

最后是里面一些Python文件的说明,博主我也是为了这套代码才学习的Python与Cuda,所以有关python的认识还是很粗浅的,python的学习可以参考廖雪峰的网站

Alex的网站上是提供了三套cifar的数据集——python,matlab以及C,而源代码只支持python格式的。python下的数据存储是使用了“字典”的数据类型,IO是使用了Python中的CPickle模块的dump()与load()函数,其中dump()函数是帮助我们将其他数据库的文件修改成cuda-convnet可接受的,用于数据集的构建,load()函数则是代码中读取数据的函数,存在于源代码的util.py文件中。

简单的说一下python下的cifar数据集的格式吧,分为两个部分,一个是data_batch_i 一个是meta文件,使用cPickle.load()方法来读取data_batch_i得到的是一个字典,有用的关键字是——‘data‘与‘labels‘,其中data一定是按列存储。meta文件存放着有用的关键字为‘label_names’,‘data_mean’,‘num_vis’,‘num_cases_per_batch’。大家可以修改源代码util.py,加入print看一下字典格式,其实源文件里面还有很多其他的信息,但是都没有太多用处。

知道了数据的格式,那么剩下的任务就是写cuda-convnet可以接受的数据了,使用的函数就是上面说的cPickle.dump()

然后说明一下神经网络的结构,由于手写数字的识别并不是很难,所以仅仅用一层卷积层就可以了,如果想参考之前的参数,可以看一下caffe的mnist-tutorial或者是Lecun 98年的那篇文献,我差不多是自己改的,跟前人的参数定的差不多。感觉简单的模型,只要对CNN理解到位,还是可以自己修改参数的。

其中有一个很需要点出来的是神经元neuron的类型,文献里面说RELU的收敛速度要比Logistic快非常多,但是要注意使用RELU会导致的问题就是出现NaN和Inf的错误信息,这个在Alex的源代码网站下面有一群人反应,这应该是因为Relu的值域无界特点导致的,用Logistic一定可以避免这个问题,就是收敛很慢而已,但是Relu什么时候可以使用,博主也在摸索中,应该是需要一定的数学推导的。

最后介绍一下源代码中python文件的重要模块,方便大家来理解这套代码的框架

util.py 下的unpickle函数是非常重要的,可以print dict查看数据字典格式

convdata.py 下提供了三个源代码接受的数据类型CIFARDataProvider,CroppedCIFARDataProvider,DummyConvNetDataProvider,博主仅仅是关注了CIFARDataProvider,这个文件没什么代码值得看的

convnet.py 是整个python程序的入口,看代码最下面便知。这个文件主要是实现了命令行形式的启动程序

data.py 跟 convdata.py差不多,没太多值得看的

gpumodel.py 整个代码的循环模块在这里——train()函数下,有个while循环,懂的人自然懂~

layer.py option.py ordereddict.py这三个文件都没仔细看,目前看来还不需要修改

shownet.py 由于用的是SSH协议访问服务器,所以博主的绘图功能直接不能用了……

差不多介绍完了吧,感觉Alex的这套代码还是不太友好,按理说应该给出一个IO的标准,供后来人测试其他数据集的,没看过caffe,据说可读性要好一些

有什么问题欢迎指出!

时间: 2024-10-09 05:11:45

cuda-convnet 在其他数据集上的使用教程的相关文章

数据结构实践——大数据集上排序算法性能的体验

本文是针对[数据结构基础系列(9):排序]的实践项目. [项目 - 大数据集上排序算法性能的体验] 设计一个函数,产生一个至少5万条记录的数据集合.在同一数据集上,用直接插入排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识. 提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法库,作为我们这门课算法库的收官之作: 提示2:本项目旨在获得对于复杂度不同算法的感性认识,由于数据分布

Microsoft Dynamics CRM 2011 当您在 大型数据集上执行 RetrieveMultiple 查询很慢的解决方法

症状 当您在 Microsoft Dynamics CRM 2011 年大型数据集上执行 RetrieveMultiple 查询时,您会比较慢. 原因 发生此问题是因为大型数据集缓存 RetrieveMultiple 查询 Microsoft SQL 查询计划.RetrieveMultiple 优化的基本的深度,则需要读取权限"本地的深度"和"深层防御"读取权限. 解决方案 重要:此部分. 方法或任务包含一些介绍如何修改注册表的步骤.但是,如果不正确地修改了注册表,

用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型

我的环境 DPM源码版本:voc-release3.1 VOC开发包版本:VOC2007_devkit_08-Jun Matlab版本:MatlabR2012b c++编译器:VS2010 系统:Win7 32位 learn.exe迭代次数:5万次 数据集:INRIA 人体数据集,等 步骤一,首先要使voc-release3.1目标检测部分的代码在windows系统下跑起来: 在Windows下运行Felzenszwalb的Deformable Part Models(voc-release4.

在Kaggle手写数字数据集上使用Spark MLlib的朴素贝叶斯模型进行手写数字识别

昨天我在Kaggle上下载了一份用于手写数字识别的数据集,想通过最近学习到的一些方法来训练一个模型进行手写数字识别.这些数据集是从28×28像素大小的手写数字灰度图像中得来,其中训练数据第一个元素是具体的手写数字,剩下的784个元素是手写数字灰度图像每个像素的灰度值,范围为[0,255],测试数据则没有训练数据中的第一个元素,只包含784个灰度值.现在我打算使用Spark MLlib中提供的朴素贝叶斯算法来训练模型. 首先来设定Spark上下文的一些参数: val conf = new Spar

用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检测模型

步骤一,首先要使voc-release4.01目标检测部分的代码在windows系统下跑起来: 参考在window下运行DPM(deformable part models) -(检测demo部分) 步骤二,把训练部分代码跑通,在VOC数据集上进行测试,如下文: 在windows下运行Felzenszwalb的Deformable Part Model(DPM)源码voc-release3.1来训练自己的模型 但是其中的learn.cpp代码有误,其中319行check(argc == 8)通不

NASNet学习笔记——?? 核心一:延续NAS论文的核心机制使得能够自动产生网络结构; ?? 核心二:采用resnet和Inception重复使用block结构思想; ?? 核心三:利用迁移学习将生成的网络迁移到大数据集上提出一个new search space。

from:https://blog.csdn.net/xjz18298268521/article/details/79079008 NASNet总结 论文:<Learning Transferable Architectures for Scalable Image Recognition> 注 ??先啥都不说,看看论文的实验结果,图1和图2是NASNet与其他主流的网络在ImageNet上测试的结果的对比,图3是NASNet迁移到目标检测任务上的检测结果,从这图瞬间感觉论文的厉害之处了,值

MNIST数据集上卷积神经网络的简单实现(使用PyTorch)

设计的CNN模型包括一个输入层,输入的是MNIST数据集中28*28*1的灰度图 两个卷积层, 第一层卷积层使用6个3*3的kernel进行filter,步长为1,填充1.这样得到的尺寸是(28+1*2-3)/1+1=28,即6个28*28的feature map 在后面进行池化,尺寸变为14*14 第二层卷积层使用16个5*5的kernel,步长为1,无填充,得到(14-5)/1+1=10,即16个10*10的feature map 池化后尺寸为5*5 后面加两层全连接层,第一层将16*5*5

在 Windows 上安装 Hadoop 教程(转)

在 Windows 上安装 Hadoop 教程 一见 2010.1.6 www.hadoopor.com/[email protected] 1. 安装 JDK 不建议只安装 JRE,而是建议直接安装 JDK,因为安装 JDK 时,可以同时安装 JRE. MapReduce 程序的编写和 Hadoop 的编译都依赖于 JDK,光 JRE 是不够的. JRE 下载地址:http://www.java.com/zh_CN/download/manual.jsp JDK 下载地址:http://jav

树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA

目录: 1. 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装 2. 树莓派Odroid等卡片式电脑上搭建NAS教程系列2-SSH连接访问 3. 树莓派Odroid等卡片式电脑上搭建NAS教程系列3-挂载HDD硬盘+节电设置 4. 树莓派Odroid等卡片式电脑上搭建NAS教程系列4-FTP安装 5. 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装 6. 树莓派Odroid等卡片式电脑上搭建NAS教程系列6-miniDLNA 该文章首发于浩瀚