Caffe "Unknown solver type : SGD"

5
在Windows 10下构建Caffe(最新版本,仅CPU版本),以在VS C++项目中使用。为了使一切正常工作,需要做一些麻烦的事情。但是,在创建Solver类的实例时出现错误。
SolverParameter solverParam;
ReadSolverParamsFromTextFileOrDie("solver.prototxt", &solverParam);
boost::shared_ptr<Solver<float>> solver(SolverRegistry<float>::CreateSolver(solverParam));

输出:

WARNING: Logging before InitGoogleLogging() is written to STDERR
F0601 14:21:42.943118 10832 solver_factory.cpp:29] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown solver type: SGD (known types: )
*** Check failure stack trace: ***

solver.prototxt 内容:

net: "model.prototxt"
base_lr: 0.02
lr_policy: "step"
gamma: 0.5
stepsize: 500000
display: 10
max_iter: 5000
snapshot: 1000000
snapshot_prefix: "XORProblem"
solver_mode: CPU
test_iter: 1
test_interval: 2000
什么是原因?
2个回答

0

看起来你根本没有定义求解器的类型。
尝试添加

type: "SGD"

回到你的'solver.prototxt'

默认情况下,求解器类型应该是"SGD",但有两种定义方式:一种是使用{{link1:solver_type: SGD}},另一种是使用{{link2:type: "SGD"}}。第一种选项在注释中被标记为“已弃用”,所以我猜这会给你带来麻烦。
尝试通过显式设置求解器类型来避免默认设置,使用非弃用方法。

更新:
查看Windows分支{{link3:readme}},似乎存在一个在Windows下编译共享库的问题,特别是与求解器相关的问题。
我相信你遇到的问题与该问题有关。


加入“type”为“SGD”并没有改变任何东西。 - D .Stark
@D.Stark,你确定你的构建顺利吗?你运行了所有的测试吗?似乎Caffe没有注册任何求解器。 - Shai
不,我不确定。 - D .Stark
@D.Stark 先执行 make test,然后再执行 make runtest(或类似的命令)。 - Shai
你是指在构建库之后运行的测试吗?在构建之前,我在build_win.cmd中指定了RUN_TESTS=1。所有测试都成功通过了。 - D .Stark
就我所理解的,我从Caffe.sln中构建了“runtest”,并且一切顺利。 - D .Stark

0

我通过将 "caffe/solvers/sgd_solver.cpp" 包含在 "caffe.cpp" 中解决了这个问题。


2
你能否请多解释一下? - BobMorane

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