基于Theano的DL的开源小框架:Dragon
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的更多相关文章
- (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
- 分享一个以前写的基于C#语言操作数据库的小框架
一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...
- 利用jdbc简单封装一个小框架(类似DBUtils)
利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
- 两个基于C++/Qt的开源WEB框架
1.tufao 项目地址: https://github.com/vinipsmaker/tufao 主页: http://vinipsmaker.github.io/tufao/ 介绍: Tufão ...
- 基于Theano的深度学习框架keras及配合SVM训练模型
https://blog.csdn.net/a819825294/article/details/51334397 1.介绍 Keras是基于Theano的一个深度学习框架,它的设计参考了Torch, ...
- 任务驱动,对比式学习.NET开发系列之开篇------开源2个小框架(一个Winform框架,一个Web框架)
一 源码位置 1. Winform框架 2. web框架 二 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分人学习软件开发技术是通过看书,看视频,听老师上课的方式.这些方式有一个共同点即按知 ...
- 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data
还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...
- GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架
Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...
随机推荐
- 20145206邹京儒《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
20145206<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验内容及步骤 1.使用JDK编译.运行简单的Java程序: 建立实验目录: 在IDEA ...
- 微信支付 - V3支付问题
参考资料:http://www.2cto.com/weixin/201506/407690.html 1.微信公众号支付出错: 当前页面的URL未注册: get_brand_wcpay_reque ...
- Linux安装mysql最新版本纪要
http://blog.csdn.net/frt007/article/details/50184143 http://blog.csdn.net/wb96a1007/article/details/ ...
- C#关键字ref和out
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Di ...
- Delphi数组
参考:http://www.cnblogs.com/huangjacky/archive/2009/12/21/1628833.html 数组就是一堆相同特性数据的一个组合,也就是每个元素的类型必须是 ...
- Shell编程基础教程4--控制流结构
4.控制流结构 4.1.控制结构 4.2.if then else语句 格式: if 条件1 //如果条件1为真 then 命令1 //那么,执行命令1 el ...
- 【JAVA线程间通信技术】
之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了 ...
- Myeclipse的web工程和Eclipse互相转换
eclipse的web工程转myeclipse的web工程1.原eclipse工程叫netschool 2.在myeclipse中新建一个工程叫netschool 并在新建的时修改 web root ...
- bootstrap表单带验证
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- C++ find 函数用法
头文件 #include <algorithm> 函数实现 template<class InputIterator, class T> InputIterator find ...