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. MVC – 5.MVC设计模式和.NetMVC框架

    MVC模式-设计模式 •控制器(Controller)- 负责转发请求,对请求进行处理. •视图 (View) - 界面设计人员进行图形界面设计. •模型 (Model)-业务逻辑.数据.验证规则.数 ...

  2. How to increase TX Power Signal Strength of WiFi

    转自:https://www.blackmoreops.com/2013/10/27/how-to-increase-tx-power-signal-strength-of-wifi/ This gu ...

  3. SQLAlchemy Core中的异常及事务处理样码

    这部门内容比较简单,立存. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Table, C ...

  4. 【SQL Server】SQL Server基础之存储过程

    SQL Server基础之存储过程  阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...

  5. oracle使用dbms_metadata包取得所有对象DDL语句

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  6. 无题- Anyway,Object-C

    Json String Body see here: working-with-json-in-ios-5also see here: serialize-custom-object-to-json- ...

  7. WPF中查看PDF文件

    需要打开PDF文件时,我们第一印象就是使用Adobe Reader.在开发中,经常会遇到需要展示PDF文件的需求.我们会借助于Adobe Reader的Active控件来实现.不过这需要客户的机器上安 ...

  8. hdu 1517 博弈 **

    博弈题: 题意:2 个人玩游戏,从 1 开始,轮流对数进行累乘,直到超过一个指定的值. 解题思路:如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜如果输入是 10~18 ,因为Oll ...

  9. RTP 与RTCP 解释. 含同步时间戳

    转自:http://blog.csdn.net/wudebao5220150/article/details/13816225 RTP协议是real-time transport protocol的缩 ...

  10. 在linux配置NFS用于RAC的搭建

    rac的共享存储有很多种搭建方式,nfs是其中一种.生产环境一般不采用nfs,多用于测试. nfs搭建步骤大致分为如下: 1.划盘 给节点1挂载一块磁盘,并将磁盘分区,并格式化,再挂载 [root@n ...