- 浏览: 694642 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
1、使用第三方修改后的wormhole工程
原始工程wormhole:https://github.com/dmlc/wormhole
文档:https://media.readthedocs.org/pdf/wormhole/latest/wormhole.pdf
在线文档:https://wormhole.readthedocs.io/en/latest/
下面的这个虽然比较新,但是。。。根本没开发完成!!!
difacto: https://github.com/dmlc/difacto
第三方修改过的:
https://github.com/CNevd/Difacto_DMLC
因为tracker原因,该项目在我自己搭建的hadoop(单机)上没问题,但是公司平台上运行不起来
tracker最终使用的是dmlc core的tracker(直接复制tracker文件夹即可,但是参数名称有变化);
最终使用的修改过tracker后的工程:https://github.com/cherishlc/Difacto_DMLC
2、找不到glog库的问题
注意:也可使用编译选项make USE_GLOG=0 从而不依赖glog
到https://github.com/google/glog 下载一下,编译
注意:如果./autogen.sh && ./configure && make && make install命令的最后一步安装因权限问题无法解决,可以通过设置LD_LIBRARY_PATH, LIBRARY_PATH 等环境变量解决:
3、编译
以下编译选项打开了HDFS开关,并且不依赖glog
make USE_HDFS=1 USE_GLOG=0 -j8
4、yarn任务提交
调用链:
TODO
/Difacto_DMLC/dmlc-core/yarn/src/org/apache/hadoop/yarn/dmlc/Client.java
5、logistic regression代码阅读
6、关于logistic loss
从下面的代码中可以看到,输入中的label只区分是否大于0,大于0则认为是正样本,否则为负样本
至于logistic regression中标签取0\1和取1,-1的区别(实际上没有区别,只是loss的形式不同,但loss的值是完全一样的),
可以参考博客:https://www.cnblogs.com/bentuwuying/p/6616680.html
7、数据读取
0、在工程目录搜索libsvm文件名,可以发现libsvm格式的解析类位于dmlc-core/src/data/libsvm_parser.h中,解析方法为ParseBlock()
但是解析函数是被谁调用的呢?博主按如下方式进行的查找:
1、上文提到,真正执行训练的是src/linear/async_sgd.h中的AsgdWorker类,训练函数为ProcessMinibatch();在其中没有找到数据读取的相关函数
2、AsgdWorker类的父类为solver::MinibatchWorker, 位于src/solver/minibatch_solver.h中
3、ProcessMinibatch()虚函数在solver::MinibatchWorker的Process()方法中被调用,这里可以看到dmlc::data::MinibatchIter<FeaID> reader; 这个reader就是读取数据的类了,该类位于src/base/minibatch_iter.h中。
4、reader传递给ProcessMinibatch()函数的数据为reader.Value()
5、reader.Value()返回reader的成员变量out_blk_; out_blk_在成员函数Next()的末尾被设为out_blk_ = mb_.GetBlock();
6、继续追溯,mb_在成员函数Next()中通过Push()方法被设置,在Push方法中,mb_通过in_blk_设置;而Next方法中有一句in_blk_ = parser_->Value();
至此,数据流分析完毕
reader(比如LibSVMParser)
=> solver::MinibatchWorker的 in_blk_ => mb_ => out_blk_
=> AsgdWorker::ProcessMinibatch() mb 通过localize=> data
=> loss->Init(data->GetBlock(), *val, nt_); 声明loss,并将data赋值到其中
因而,如果想修改libsvm数据的解析方式及使用方式,需要修改的地方有:
数据读取:LibSVMParser类中的ParseBlock()函数
将读取的数据分片: MinibatchIter类中的Push函数
数据本地化:Localizer类中的RemapIndex()函数
计算梯度时使用样本权重:LogitLoss中的CalcGrad函数
原始工程wormhole:https://github.com/dmlc/wormhole
文档:https://media.readthedocs.org/pdf/wormhole/latest/wormhole.pdf
在线文档:https://wormhole.readthedocs.io/en/latest/
下面的这个虽然比较新,但是。。。根本没开发完成!!!
difacto: https://github.com/dmlc/difacto
第三方修改过的:
https://github.com/CNevd/Difacto_DMLC
因为tracker原因,该项目在我自己搭建的hadoop(单机)上没问题,但是公司平台上运行不起来
tracker最终使用的是dmlc core的tracker(直接复制tracker文件夹即可,但是参数名称有变化);
最终使用的修改过tracker后的工程:https://github.com/cherishlc/Difacto_DMLC
2、找不到glog库的问题
注意:也可使用编译选项make USE_GLOG=0 从而不依赖glog
到https://github.com/google/glog 下载一下,编译
注意:如果./autogen.sh && ./configure && make && make install命令的最后一步安装因权限问题无法解决,可以通过设置LD_LIBRARY_PATH, LIBRARY_PATH 等环境变量解决:
export GLOG_HOME=/home/user/glog # g++ 引用的头文件路径 export EXTRA_INCLUDES=$GLOG_HOME/src # g++ 引用的lib文件路径 export LIBRARY_PATH=$LIBRARY_PATH:$GLOG_HOME/.libs # 运行程序时查找的动态链接库路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GLOG_HOME/.libs
3、编译
以下编译选项打开了HDFS开关,并且不依赖glog
make USE_HDFS=1 USE_GLOG=0 -j8
export MAKEDMLC="make USE_HDFS=1 USE_GLOG=0 -j8" cd dmlc-core; $MAKEDMLC; cd - cd ps-lite; $MAKEDMLC; cd - cd src/linear; $MAKEDMLC
4、yarn任务提交
调用链:
TODO
/Difacto_DMLC/dmlc-core/yarn/src/org/apache/hadoop/yarn/dmlc/Client.java
5、logistic regression代码阅读
#训练数据的内部存储格式; 以稀疏矩阵形式存储 src/solver/minibatch_solver.h: using Minibatch = dmlc::RowBlock<FeaID>; dmlc-core/include/dmlc/data.h: template<typename IndexType> struct RowBlock { #index 比如 第0个特征的 FeaID为0 src/linear/async_sgd.h:using FeaID = ps::Key;
#真正执行训练的地方 src/linear/async_sgd.h: virtual void ProcessMinibatch(const Minibatch& mb, const Workload& wl) { 线性模型的计算是在ProcessMinibatch函数中的loss->Init函数: src/linear/loss.h: loss->Init(data->GetBlock(), *val, nt_); void Init(const RowBlock<unsigned>& data, const std::vector<V>& w, int nt) { data_ = data; Xw_.resize(data_.size); SpMV::Times(data_, w, &Xw_, nt_); // linear model here nt_ = nt; init_ = true; } 线性部分(不包括sigmoid)的计算是在SpMV::Times函数,其实就是个 乘法+累加的运算 其定义在: src/base/spmv.h 关键代码: if (D.value) {//D为dmlc::RowBlock<unsigned>; D.value不为空,说明在libsvm 格式的训练文件中, 0 1:0.5 2:1中权重有不为1的情况; 这时,线性模型就会考虑这些权重!!! for (size_t j = D.offset[i]; j < D.offset[i+1]; ++j) y_i += x[D.index[j]] * D.value[j]; } else { for (size_t j = D.offset[i]; j < D.offset[i+1]; ++j) y_i += x[D.index[j]]; }
6、关于logistic loss
从下面的代码中可以看到,输入中的label只区分是否大于0,大于0则认为是正样本,否则为负样本
至于logistic regression中标签取0\1和取1,-1的区别(实际上没有区别,只是loss的形式不同,但loss的值是完全一样的),
可以参考博客:https://www.cnblogs.com/bentuwuying/p/6616680.html
定义在src/linear/loss.h: template <typename V> class LogitLoss 最终调用的是:src/base/binary_class_evaluation.h: V LogitObjv() V LogitObjv() { V objv = 0; #pragma omp parallel for reduction(+:objv) num_threads(nt_) for (size_t i = 0; i < size_; ++i) { V y = label_[i] > 0 ? 1 : -1; V score = y * predict_[i]; if (score < -30) objv += -score; else if (score <= 30) objv += log( 1 + exp( - score )); } return objv; }
7、数据读取
0、在工程目录搜索libsvm文件名,可以发现libsvm格式的解析类位于dmlc-core/src/data/libsvm_parser.h中,解析方法为ParseBlock()
但是解析函数是被谁调用的呢?博主按如下方式进行的查找:
1、上文提到,真正执行训练的是src/linear/async_sgd.h中的AsgdWorker类,训练函数为ProcessMinibatch();在其中没有找到数据读取的相关函数
2、AsgdWorker类的父类为solver::MinibatchWorker, 位于src/solver/minibatch_solver.h中
3、ProcessMinibatch()虚函数在solver::MinibatchWorker的Process()方法中被调用,这里可以看到dmlc::data::MinibatchIter<FeaID> reader; 这个reader就是读取数据的类了,该类位于src/base/minibatch_iter.h中。
4、reader传递给ProcessMinibatch()函数的数据为reader.Value()
5、reader.Value()返回reader的成员变量out_blk_; out_blk_在成员函数Next()的末尾被设为out_blk_ = mb_.GetBlock();
6、继续追溯,mb_在成员函数Next()中通过Push()方法被设置,在Push方法中,mb_通过in_blk_设置;而Next方法中有一句in_blk_ = parser_->Value();
至此,数据流分析完毕
reader(比如LibSVMParser)
=> solver::MinibatchWorker的 in_blk_ => mb_ => out_blk_
=> AsgdWorker::ProcessMinibatch() mb 通过localize=> data
=> loss->Init(data->GetBlock(), *val, nt_); 声明loss,并将data赋值到其中
因而,如果想修改libsvm数据的解析方式及使用方式,需要修改的地方有:
数据读取:LibSVMParser类中的ParseBlock()函数
将读取的数据分片: MinibatchIter类中的Push函数
数据本地化:Localizer类中的RemapIndex()函数
计算梯度时使用样本权重:LogitLoss中的CalcGrad函数
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 828在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1873解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5487boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 19891、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11764主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8599上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17618MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 60701、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19671、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3382初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2322现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3764调用CUDA的核函数时指定block 和 thread大小,该 ... -
创建及使用DLL
2014-09-29 15:22 1240此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2168在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 18721、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 2018调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ... -
C++(MSVC) 下查看call strack trace;查看函数是否被inline
2014-09-20 15:08 1298最近写C++程序,,各种 ...
相关推荐
摘要:本文由DMLC分布式深度机器学习开源项目(中文名深盟)开发者联合撰写,介绍DMLC已有的xgboost、cxxnet、Minerva、ParameterS
《Difacto_DMLC: 分布式机器学习框架深度解析》 在现代大数据时代,机器学习已经成为数据科学的核心组成部分,而分布式机器学习框架则在处理大规模数据集时发挥着至关重要的作用。Difacto_DMLC是一个专为大规模机器...
DMLC-Core是支持所有DMLC项目的骨干库,为构建高效且可扩展的分布式机器学习库提供了基础。 开发者频道 什么是新的 内容 已知的问题 RecordIO格式不能跨不同的处理器字节序移植。 因此,不可能将RecordIO文件保存...
本文将详细解释如何在Ubuntu操作系统上编译XGBoost以适应JVM环境,并使用生成的JAR包。 首先,为了在JVM环境中使用XGBoost,我们需要确保系统已经安装了必要的依赖。这包括Java Development Kit (JDK) 和Apache ...
为了支持大规模的模型训练,美团可能使用了DMLC(Distributed Machine Learning Community)库,尤其是其分布式通信组件,如ReduceScatter。同时,LightGBM通过MPI(Message Passing Interface)或Socket进行分布式...
在现代数据分析与机器学习领域,XGBoost作为一个高效的、分布式梯度增强库,因其出色的性能和易用性而广受青睐。特别是在Windows环境下,对于许多非专业程序员或者初学者来说,能够直接使用的免编译版本的XGBoost...
xgboost是C++开源分布式机器学习系统DMLC的Boosting模型,单机采用多线程来加速树的构建,并依赖DMLC的另一个部件rabbit来进行分布式计算。xgboost提供了 Python和R语言接口。本文档由参与贡献的王超和陈帅华撰写。 ...
xgboost是C++开源分布式机器学习系统DMLC的Boosting模型,单机采用多线程来加速树的构建,并依赖DMLC的另一个部件rabbit来进行分布式计算。xgboost提供了 Python和R语言接口。本文档由参与贡献的王超和陈帅华撰写。
编译完成后,将生成的`dmlc.lib`文件路径添加到CXXNet的附加依赖项中。 - **Rabit**: 类似于DMLC-Core,也需单独编译成lib库。 #### 二、解决编译错误 即使完成了上述步骤,直接编译CXXNet仍然可能会遇到一些问题...
xgboost 0.4版本编译后32位&64位,按下面链接里的说法,0.47版本不支持Windows,所以对0.4版本用vs2015社区版进行32位和64位编译,分别用于32位操作系统/32位python和64位操作系统/64位python,xgboost最新版本0.6,...
启动分布式训练,可以使用DMLC(Distributed Machine Learning Container)工具,设置相应的环境变量,如`DMLC_ROLE`、`DMLC_PS_ROOT_URI`、`DMLC_PS_ROOT_PORT`、`DMLC_NUM_SERVER`和`DMLC_NUM_WORKER`。...
模型库 所有模型都托管在并在CC0下获得许可。 该模型是ILSVRC2012数据集上的预训练模型。 该模型在ILSVRC2012-Validation Set上能够达到54.5%的Top-1准确性和78.3%的Top-5准确性。 该模型是ILSVRC2012数据集上的...
XGBoost,全称Extreme Gradient Boosting,是由DMLC团队开发的一款高效、灵活且可扩展的梯度提升库,广泛应用于机器学习领域,尤其是数据挖掘、推荐系统、图像识别等多个场景。它以其高效的计算性能和优秀的模型精度...
上运行,几乎呈线性加速 该库由分布式参数服务器分布式支持 无需 GPU 编程即可轻松扩展 cxxnet 建立在 开发人员可以编写 numpy 样式的模板表达式来扩展库一次 mshadow 将为用户生成高性能的 CUDA 和 CPU 代码 它带来...
XGBoost基于DMLC(Distributed Machine Learning Cluster)项目,它允许用户进行分布式训练,并提供了丰富的参数调整选项以优化模型性能。以下是XGBoost及其核心库DMLC-core中可修改的一些关键参数: **DMLC-core...
这个标题揭示了一个专门用于存储Web数据的仓库,其中包含了与DMLC(分布式机器学习库)项目相关的文档图像。这表明这个仓库可能是开发者、研究人员或者数据科学家用来共享和访问与DMLC项目相关的各种Web资源的平台。...
包含最先进的深度学习模型的简明实现 该项目保持最小的依赖,使其可移植且易于构建 超越单一 GPU 和单一机器 该库可在多个 GPU 上运行,几乎呈线性加速 该库由分布式参数服务器分布式支持 无需 GPU 编程即可轻松扩展...