使用Pylearn2构建一个简单的分类器
来源:互联网 发布:生命一个数组 编辑:程序博客网 时间:2024/05/16 17:49
http://blog.csdn.net/tangchenyi/article/details/25076093
使用Pylearn2构建一个简单的分类器
版权声明:本文为博主原创文章,未经博主允许不得转载。
久闻Pylearn大名,最近由于某些原因,想拿Pylearn2来做做实验。Python这门神奇的语言几年前学过点皮毛,对于一个习惯使用C++/Java的人来说,使用Python简直就是一种折磨,特别是阅读别人的代码。这种弱类型语言最让人纠结的就是不好跟踪代码(应该是我不会跟踪)。不喜欢Python还有一个原因,Python虽有多线程,但是此多线程非彼多线程,不管你开多少个线程,它只使用CPU的一个核,多核对它来说完全没用,而且线程越多速度反而越慢。好了,不废话了,回归正题。
Pylearn2的安装及环境搭建这里就不赘述了,网上资料很多的。对Pylearn2的使用说明中文基本没有(反正我没搜到),英文的还是有一写的。为了节省新手(我也是)的时间,这里简单介绍一下使用Pylearn构建一个简单的分类器的方法,会了一个应该其他的就好办了,入门是关键。
本文基于pylearn2-practice进行介绍(之所以不根据Quick-start example来讲是因为它结构比较复杂,而且只有训练,没有预测部分,看了后还是不知道如何使用自己的数据,可能是本人智商不够)。
pylearn2-practice文件组织如下
├── adult
│ ├── test.csv
│ ├── test_v.csv
│ └── train_v.csv
├── adult_dataset.py
├── adult.yaml
├── predict.py
└── README.md
如何使用见README.md
我们先看看训练的配置文件adult.yaml
!obj:pylearn2.train.Train { #使用类pylearn2.train.Train的实例来训练
dataset: &train !obj:adult_dataset.AdultDataset { #使用adult_dataset.AdultDataset来提供训练数据
path: 'adult/train_v.csv', #训练数据文件路径
one_hot: 1
},
model: !obj:pylearn2.models.softmax_regression.SoftmaxRegression { #选择模型, 可以选择的模型包括RBM, softmax_regression, SVM等等
#具体参看http://deeplearning.net/software/pylearn2/features.html#features中的Models
n_classes: 2,
irange: 0.,
nvis: 123,
},
algorithm: !obj:pylearn2.training_algorithms.bgd.BGD {#选择训练算法,具体参看
#http://deeplearning.net/software/pylearn2/features.html#features中的Training algorithms
batch_size: 10000,
line_search_mode: 'exhaustive',
conjugate: 1,
monitoring_dataset:
{
'train' : *train,
'valid' : !obj:adult_dataset.AdultDataset {
path: 'adult/test_v.csv',
one_hot: 1
},
'test' : !obj:adult_dataset.AdultDataset {
path: 'adult/test.csv',
one_hot: 1
}
},
termination_criterion: !obj:pylearn2.termination_criteria.MonitorBased {
channel_name: "valid_y_misclass"
}
},
extensions: [
!obj:pylearn2.train_extensions.best_params.MonitorBasedSaveBest {
channel_name: 'valid_y_misclass',
save_path: "softmax_regression_best.pkl"
},
],
save_path: "softmax_regression.pkl", #训练得到的模型保存到softmax_regression.pkl这个文件
save_freq: 1
}
细心的你可能会发现上面的配置文件其实是给类的构造函数指定参数, 事实上Pylearn2就是使用PyYAML根据上面配置信息实例化一个Train对象.
我们再看看adult_dataset.py
Adultataset继承于DenseDesignMatrix, 通过函数_load_data将训练/测试数据加载到X, y中, x基本没有变化, 但是y进行了相应的变换, 类别数决定了y的维数, 每一维代表一种类别,假如某条数据属于第N类,则y的第N维为1, 其他维为0(这里第N维从1开始计数,而不是从0开始计数). 然后将X, y赋给父类的X,y, 如果设置了preprocessor还需要执行preprocessor.再看看predict.py.
然后就是对测试数据分批次(如果测试数据不是特别多, 内存够大的话就没必要分批次),
接着是构建 Theano function(深入了解见Theano说明文档)
X = model.get_input_space().make_batch_theano() #X为输入的特征
Y = model.fprop(X) #fprop(x)使用模型预测
from theano import tensor as T
y = T.argmax(Y, axis=1)
from theano import function
f = function([X], y)
然后就是调用 f 对 x 进行预测了
到这里,分类器构建完成, 这么看来,其实还是蛮简单的, 虽然简单,但是我可是花了大半天的功夫, 一开始花了大量时间看Quick-start example(结果还是一头雾水).由此说明一篇好的文档非常重要, 不然你就慢慢去摸索吧.
感谢zygmuntz的无私奉献
- 使用Pylearn2构建一个简单的分类器
- 使用Pylearn2构建一个简单的分类器
- Pylearn2的使用简介
- Pylearn2的使用简介
- Hudson--一个使用简单的构建系统
- 使用Python构建一个基于k-means的文档分类器
- 结合构建的简单贝叶斯分类器谈谈认识
- deeplearning----学习一个简单的分类器
- 使用原生的函数构建一个简单的网络请求
- 使用rpcgen构建分布式程序的一个简单例子
- 使用rpcgen构建分布式程序的一个简单例子
- 使用Maven构建一个简单的java工程
- 构建一个简单的jquery定时器,方便随时拿来使用。
- 使用Maven构建一个简单的java工程
- 使用MVVM构建一个简单的WPF应用
- 使用mininet构建一个简单的路由实验
- 构建一个简单的用户界面
- 构建一个简单的用户界面
- UVA10391:Compound Words(复合词)
- Pylearn2的使用简介
- 阶乘和阶乘逆元
- JPA Entity的生命周期
- Altium Designer13原理图中元件垂直、水平镜像翻转
- 使用Pylearn2构建一个简单的分类器
- 1 算法笔记(王晓东)
- C#关于类(1)
- iOS 8开发入门--序言(2)
- Android适配—百分比布局库(android-percent-support-lib-sample)
- 史上最简单的 MyBatis 教程(二)
- ubuntu下使用qemu模拟ARM(六)------驱动程序编译进内核方法
- PHP基础知识-函数
- Socket编程--自己动手的HTTP代理服务器