我想在损失层中,当迭代次数达到某个特定值时,改变损失计算方法。
为了实现这个目标,我认为我需要获取当前的学习率或迭代次数,然后使用if
语句来决定是否改变损失计算方法。
回答:
你可以在Caffe类中添加一个成员变量来保存当前的学习率或迭代次数,并在你想要的层中访问它。
例如,要在你想要的地方获取当前的迭代次数,你需要进行3个关键修改(为了简化):
-
在common.hpp中:
class Caffe { public: static Caffe& Get(); ...//一些其他公共成员 //返回当前的迭代次数 inline static int current_iter() { return Get().cur_iter_; } //设置当前的迭代次数 inline static void set_cur_iter(int iter) { Get().cur_iter_ = iter; } protected: //保存当前迭代次数的变量 int cur_iter_; ...//一些其他受保护的成员 }
-
在solver.cpp中:
template <typename Dtype> void Solver<Dtype>::Step(int iters) { ... while (iter_ < stop_iter) { Caffe::set_cur_iter(iter_ ); ...//剩余操作 } }
-
在你想要访问当前迭代次数的地方:
template <typename Dtype> void SomeLayer<Dtype>::some_func() { int current_iter = Caffe::current_iter(); ...//你想要的操作 }