"InitGoogleLogging"是什么?

10

我一直在修改来自Caffe深度学习库的 C++示例程序,并注意到第234行上的这段代码似乎没有被再次引用。

::google::InitGoogleLogging(argv[0]);

提供的参数是一个prototxt文件,它定义了我调用的深度学习模型的参数。让我困惑的是,这一行的结果去哪里了?我知道它们最终会在程序中被使用,因为如果我在prototxt文件中犯了一个错误,程序就会崩溃。然而,我很难看到数据如何传递给执行分类任务的类。

1
不,传递给initGoogleLogging的参数是在命令行上传递给应用程序的第一个参数。这通常是正在执行的程序文件的路径(几乎总是但仍不保证)。您应该从Google Logging库的文档开始阅读。 - Captain Obvlious
1
澄清一下,我的意思是我传递给initGoogleLogging的参数是来自命令行参数的prototxt文件。我困惑的是当我在代码中没有看到再次引用initGoogleLogging时,这实际上是如何在Caffe程序中使用的。 - Jack Simpson
还在Ceres文档中找到了它:http://ceres-solver.org/nnls_tutorial.html#hello-world - Dorian
奇怪的是,这个函数似乎什么也没做,例如在Ceres中:https://github.com/ceres-solver/ceres-solver/blob/e51e9b46f6ca88ab8b2266d0e362771db6d98067/internal/ceres/miniglog/glog/logging.h#L149。它甚至有注释`// Do nothing; this is ignored.`。 - Ela782
1个回答

12
首先,argv[0] 不是你传递给可执行文件的第一个参数,而是 可执行文件名。 因此,您将可执行文件名传递给 ::google::InitGoogleLogging 而不是 prototxt 文件。
'glog' 模块(即 google 日志记录)使用这个名字来修饰它输出的日志条目。
其次,caffe 使用 google 日志记录 (又名 'glog') 作为其日志记录模块,因此必须在运行 caffe 时初始化此模块。这就是为什么您会看到这个代码:
::google::InitGoogleLogging(argv[0]);

在你的代码中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接