如何选择固定的clipping_gradients值[caffe]

时间:2017-04-09 04:10:27

标签: caffe lstm recurrent-neural-network

在caffe.proto

  // Set clip_gradients to >= 0 to clip parameter gradients to that L2 norm,
  // whenever their actual L2 norm is larger.
  optional float clip_gradients = 35 [default = -1];

我在设置clipping_gradient时遇到问题,我认为它应该是动态的,但如果我们要选择一个固定的数字,我们该如何选择呢? caffe将它设置为35?这是什么意思??我已经尝试了许多固定的选择,但我认为差别不大。我理解广义上的爆炸渐变/渐变剪辑概念,但我不确定如何在求解器中选择固定数字。

1 个答案:

答案 0 :(得分:0)

您可以打印出一些迭代的总和平方渐变的总和,以了解clip_gradients。这可以这样做:

net_->forward();
net_->backward();
const vector<Blob<Dtype>*>& net_params = net_->learnable_params();
float sumsq_diff = 0;
for (int i = 0; i < net_params.size(); ++i) {
    sumsq_diff += net_params[i]->sumsq_diff();
}
std::cout<<"sum of gradient: "<<std::sqrt(sumsq_diff)<<"\n";
net_->update();

有关如何使用clip_gradients的详细信息,请参阅solver.cpp