在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?这是什么意思??我已经尝试了许多固定的选择,但我认为差别不大。我理解广义上的爆炸渐变/渐变剪辑概念,但我不确定如何在求解器中选择固定数字。
答案 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
。