Making Solver available in pycaffe

32 views
Skip to first unread message

Sören Klemm

unread,
Sep 21, 2017, 11:56:00 AM9/21/17
to Caffe Users
Hi,

I have written my own extension of SGDSolver, let's call it FOOSolver and it's working fine in the C++ implementation. However, its seems not to be available in pycaffe. 
I have manually added an entry to python/caffe/_caffe.cpp:
  bp::class_<AdamSolver<Dtype>, bp::bases<Solver<Dtype> >,
    shared_ptr<AdamSolver<Dtype> >, boost::noncopyable>(
        "AdamSolver", bp::init<string>());
  bp::class_<FOOSolver<Dtype>, bp::bases<Solver<Dtype> >,
    shared_ptr<FOOSolver<Dtype> >, boost::noncopyable>(
        "FOOSolver", bp::init<string>());

  bp::def("get_solver", &GetSolverFromFile,
      bp::return_value_policy<bp::manage_new_object>());

So after make clean, make all, make pycaffe I  get:
>>> import caffe
>>> from caffe._caffe import Solver as SolverBaseClassInfo
>>> [cls.__name__ for cls in vars()['SolverBaseClassInfo'].__subclasses__()]
['SGDSolver', 'NesterovSolver', 'AdaGradSolver', 'RMSPropSolver', 'AdaDeltaSolver', 'AdamSolver', 'FOOSolver']
which looks promising.
However:
>>> solver=caffe.FOOSolver('solver.prototxt')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'FOOSolver'

So what is the correct way to make a new solver class available in pycaffe?

Thanks for any help,
Soeren
Reply all
Reply to author
Forward
0 new messages