基于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框架,提供各种各样的图像处理滤镜,并且支持照相机 ...
随机推荐
- javascript事件与event对象的属性
javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...
- Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks
什么时候使用Service 服务类型 开启服务 后台运行 服务通信 附加资源 什么时候使用Service: @.任何与用户界面无关的操作,可移到后台线程,然后由一个Service来控制这个线程. 服务 ...
- Pyqt 中__init__(self,parent==None) parent理解
参考: 在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent.这种parent-child关系主要用于两个方面: 没有parent的QWidget类被认 ...
- html5 方框内的小球
html5 方框内的小球 版本一 <!DOCTYPE html> <html> <head lang="en"> <meta charse ...
- C# 创建Windows Service
当我们需要一个程序长期运行,但是不需要界面显示时可以考虑使用Windows Service来实现.这篇博客将简单介绍一下如何创建一个Windows Service,安装/卸载Windows Servi ...
- WPF QuickStart系列之线程模型(Thread Model)
这篇博客将介绍WPF中的线程模型. 首先我们先来看一个例子,用来计算一定范围内的素数个数. XAML: <Grid> <Grid.RowDefinitions> <Row ...
- [JavaCore] 取得类的字节码、取得类的装载器
三种方式取得类的字节码: 1. 类名.class BranchInfoService.class 2. 对象名.getClass() branchInfoService.getClass() 3. C ...
- 第二十一篇:SOUI中的控件注册机制
Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...
- Java优化之输出十万以内的质数
(1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...
- System.Web.Caching.Cache类 缓存
1.文件缓存依赖 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender ...