Link:https://github.com/neopenx/Dragon

起因

最近看了Hinton的Dropout,发现原来的乱代码只能在Softmax层前面加Dropout。索性把整个Theano封装了一遍了。

瞄了几眼Github上的Theano的另外一个封装Keras,然后按照自己风格手写了(看别人源码头疼)

Theano目前真是日薄西山了。Bengio做出了之后就不管了。直接去搞Pylearn2了

关键是Pylearn2还没有Caffe友好,CVPR15上,Caffe还展开了铺天盖地的宣传攻势。

尽管Github上各路大神各种Fork,但是最大问题是,CUDA部分根本没人能写。

由于Theano的工作方式类似函数式语言,像个黑盒子,留给User的空间也只有矩阵运算。

For循环之类的逻辑语句,就得重写CUDA。

特别是在CNN上,很多都是2012年后提出的非常重要的改善,不知道为什么不写了:

• Avg Pooling

• Overlapping Pooling

• Pooling with Padding

• Local Connected Layer

• Convolution with Maxout

• Convolution with Padding

所以,目前除了Bengio组自己搞的Pylearn2外,大部分Theano的封装项目看起来都差不多。就是把教程封装一下。

目前的实现

1. Layer

• DataLayer

• SoftmaxLayer

• FullyConnectedLayer

• ConvolutionLayer

• PoolingLayer(MAX)

• AutoEncodeLayer(Denoising)

• DropoutLayer

2. Alogorithm

• Mini_Batch

• Pre_Training

3. Activation

• Logistic

• Tanh

• ReLu

• Softplus

4. Weight_Init

• Xavier(Logistic&Tanh)

• Gaussian (Zero Mean)

数据处理

1.1 数据制作

在 data.process 下的 build_data(filename="data.pkl"):

这是个对二进制bin文件转换成python的pkl函数:

bin格式数据排布参照cifar10:http://www.cs.toronto.edu/~kriz/cifar.html

第一字节为label,后面每个字节代表一个pixel。

同时,参照了Caffe中强制计算mean的做法,顺带计算出了mean.pkl

1.2 数据输入

在 data.process 下的 loadData():

采用Theano的DL教学中的标准格式:

trainSet_X,trainSet_Y=sharedDataSet(trainSet)
vaildSet_X,vaildSet_Y=sharedDataSet(vaildSet)
dataSet=[(trainSet_X,trainSet_Y),(vaildSet_X,vaildSet_Y)]

不过默认还读取了mean.pkl

样例

1. Cifar10_CNN

from layer.core import *
from algorithm.SGD import Mini_Batch
from data.process import loadData
from layer.model import Model
if __name__ == '__main__':
dataSet=loadData()
cifar=Model(batch_size=100,lr=0.001,dataSet=dataSet,weight_decay=0.004)
neure=[32,32,64,64]
batch_size=100
cifar.add(DataLayer(batch_size,(32,32,3)))
cifar.add(ConvolutionLayer((batch_size,3,32,32),(neure[0],3,3,3),'relu','Gaussian',0.0001))
cifar.add(PoolingLayer())
cifar.add(ConvolutionLayer((batch_size,neure[0],15,15),(neure[1],neure[0],4,4),'relu','Gaussian',0.01))
cifar.add(PoolingLayer())
cifar.add(ConvolutionLayer((batch_size,neure[1],6,6),(neure[2],neure[1],5,5),'relu','Gaussian',0.01))
cifar.add(PoolingLayer())
cifar.add(FullyConnectedLayer(neure[2]*1*1,neure[3],'relu','Gaussian',0.1))
cifar.add(DropoutLayer(0.5))
cifar.add(SoftmaxLayer(neure[3],5,'Gaussian',0.1))
cifar.build_train_fn()
cifar.build_vaild_fn()
algorithm=Mini_Batch(model=cifar,n_epochs=100,load_param='cnn_params.pkl',save_param='cnn_params.pkl')
algorithm.run()

2. Cifar10_MLP

from layer.core import *
from algorithm.SGD import Mini_Batch
from data.process import loadData, loadScaleData
from layer.model import Model
if __name__ == '__main__':
dataSet=loadScaleData('data.pkl')
cifar=Model(batch_size=100,lr=0.01,dataSet=dataSet,weight_decay=0.0)
neure=[1000,1000,1000]
batch_size=100
cifar.add(DataLayer(batch_size,32*32*3))
cifar.add(FullyConnectedLayer(32*32*3,neure[0],'relu','Gaussian',0.1))
cifar.add(DropoutLayer(0.2))
cifar.add(FullyConnectedLayer(neure[0],neure[1],'relu','Gaussian',0.1))
cifar.add(DropoutLayer(0.2))
cifar.add(FullyConnectedLayer(neure[1],neure[2],'relu','Gaussian',0.1))
cifar.add(DropoutLayer(0.2))
cifar.add(SoftmaxLayer(neure[2],10))
cifar.pretrain()
cifar.build_train_fn()
cifar.build_vaild_fn()
algorithm=Mini_Batch(model=cifar,n_epochs=100,load_param='mlp_params.pkl',save_param='mlp_params.pkl')
algorithm.run()

基于Theano的DL的开源小框架:Dragon的更多相关文章

  1. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  2. 分享一个以前写的基于C#语言操作数据库的小框架

    一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...

  3. 利用jdbc简单封装一个小框架(类似DBUtils)

    利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...

  4. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese

  5. 两个基于C++/Qt的开源WEB框架

    1.tufao 项目地址: https://github.com/vinipsmaker/tufao 主页: http://vinipsmaker.github.io/tufao/ 介绍: Tufão ...

  6. 基于Theano的深度学习框架keras及配合SVM训练模型

    https://blog.csdn.net/a819825294/article/details/51334397 1.介绍 Keras是基于Theano的一个深度学习框架,它的设计参考了Torch, ...

  7. 任务驱动,对比式学习.NET开发系列之开篇------开源2个小框架(一个Winform框架,一个Web框架)

    一 源码位置 1. Winform框架 2. web框架 二 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分人学习软件开发技术是通过看书,看视频,听老师上课的方式.这些方式有一个共同点即按知 ...

  8. 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data

    还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...

  9. GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架

    Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...

随机推荐

  1. javascript事件与event对象的属性

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  2. Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks

    什么时候使用Service 服务类型 开启服务 后台运行 服务通信 附加资源 什么时候使用Service: @.任何与用户界面无关的操作,可移到后台线程,然后由一个Service来控制这个线程. 服务 ...

  3. Pyqt 中__init__(self,parent==None) parent理解

    参考: 在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent.这种parent-child关系主要用于两个方面: 没有parent的QWidget类被认 ...

  4. html5 方框内的小球

    html5 方框内的小球 版本一 <!DOCTYPE html> <html> <head lang="en"> <meta charse ...

  5. C# 创建Windows Service

    当我们需要一个程序长期运行,但是不需要界面显示时可以考虑使用Windows Service来实现.这篇博客将简单介绍一下如何创建一个Windows Service,安装/卸载Windows Servi ...

  6. WPF QuickStart系列之线程模型(Thread Model)

    这篇博客将介绍WPF中的线程模型. 首先我们先来看一个例子,用来计算一定范围内的素数个数. XAML: <Grid> <Grid.RowDefinitions> <Row ...

  7. [JavaCore] 取得类的字节码、取得类的装载器

    三种方式取得类的字节码: 1. 类名.class BranchInfoService.class 2. 对象名.getClass() branchInfoService.getClass() 3. C ...

  8. 第二十一篇:SOUI中的控件注册机制

    Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...

  9. Java优化之输出十万以内的质数

    (1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...

  10. System.Web.Caching.Cache类 缓存

    1.文件缓存依赖 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender ...