《智能系统与技术丛书 深度学习实践:基于Caffe的解析》—2.8.4安装gflags
2.8.4 安装gflags
首先下载gflags的发布版,下载地址为https://github.com/gflags/gflags/releases。大家可以选择任意版本,这里以下载2.2.0版为例,2.2.0版本的具体下载地址为https://github.com/gflags/gflags/archive/v2.2.0.tar.gz,此版本发布于2016年12月。
这里将gflags下载到D:\workCode\gflags-2.2.0目录下,下面来看一下如何使用cmake建立这个库的工程,具体步骤如下。
首先,选择需要构建的工程版本,这里选择VS2015 Win64,因为我们要为Caffe做基础库,所以需要选择64位的版本,如图2-69所示。
这样就进入了生成工程的具体的操作步骤。我们可以看到,图2-70显示了VS2015的安装路径。
图 2-70
等待几秒钟之后就可以看到Configuring done,然后点击图2-71中的“Generate”按钮,等待出现Generating Done。
图 2-71
接下来点击“Open Project”按钮,打开VS工程,然后编译Solution,如图2-72所示。
图 2-72
点击编译之后,正常情况下是会显示如图2-73所示的编译过程,最后会显示编译成功。
图 2-73
编译之后可以生成如图2-74所示的目录,Debug和Release分别是调试和发布的库,可以根据需要进行连接。
图 2-74
gflags一般用于解析命令行参数。下面来看一段具体的示例小程序,这里是将下面的程序编译成一个演示用的小的运行文件。
#include <iostream>
#include <gflags/gflags.h>
using namespace std;
DEFINE_string(conf_path, "../conf/setup.property", "program configure file.");
DEFINE_int32(port, 10080, "program listen port");
DEFINE_bool(test_bool, true, "run test_bool mode");
int main(int argc, char** argv)
{
gflags::ParseCommandLineFlags(&argc, &argv, true);
cout << "confPath = " << FLAGS_ conf_path << endl;
cout << "port = " << FLAGS_port << endl;
if (FLAGS_ test_bool) {
cout << "run background ..." << endl;
}
else {
cout << "run foreground ..." << endl;
}
cout << "Good bye!" << endl;
gflags::ShutDownCommandLineFlags();
return 0;
}
(1)设定命令行参数
直接运行所得到的就是设定的默认参数(结合代码仔细一看,就能知道参数的默认值了)。
设定参数默认值的方式具体如下。
1)可以用“–参数名=参数值”的方式来设定参数值。
02)对于bool类型的参数,除了上述方式外,还可以用“–参数名”的方式设定为true(即不带值), 使用“–no参数名”的方式设定为false。
不过,为了统一,建议都使用前面给出的第1种方法来设定参数。
下面给出调用前面那个小程序所得到的一些结果:
./demo --port=8888 --confPath=./setup.ini --test_bool =true
confPath = ./setup.property
port = 8888
run background ...
Good bye!
./demo -port=8888 -confPath=./setup.ini -test_bool =false
confPath = ./setup.property
port = 8888
run foreground ...
Good bye!
./demo -port=8888 -confPath=./setup.ini -test_bool
confPath = ./setup.property
port = 8888
run background ...
Good bye!
./demo -port=8888 -confPath=./setup.ini -notest_bool
confPath = ./setup.property
port = 8888
run foreground ...
Good bye!
(2)从文件读入“命令行”参数
如果我们的程序比较复杂,配置项非常多,也就是说命令行参数很多,每次启动都要一个一个地输入,那岂不是极其麻烦?事实上,gflags已经帮我们解决了,用“ –flagfile=命令行文件”的方式就可以了。下面给出一个例子,新建一个param.cmd文件,param.cmd就是上面所说的命令行文件,具体内容如下:
--port=8888
--confPath=./setup.property
--daemon=true
然后键入命令“./demo --flagfile=param.cmd”,得到的结果具体如下所示:
./demo --flagfile=param.cmd
confPath = ./setup.property
port = 8888
run foreground ...
Good bye!
到此,关于gflags的内容就介绍完毕了。Caffe依赖Boost、LMDB、LevelDB、glog、gflags、OpenCV、BLAS等库,其中Boost库最为庞大,功能也最多,OpenCV专注于计算机视觉,LMDB和LevelDB是两个高性能的内存数据库,BLAS最小,主要专注于完成矩阵运算,glog完成日志功能,gflags处理命令行参数解析,这些库我们在其他工程中也可以使用,接下来还是开始Caffe的使用之旅吧。
- 点赞
- 收藏
- 关注作者
评论(0)