在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?什么意思??我已经尝试了一些固定的选择,但我看不出有太大的区别。我在广义上理解爆炸梯度/梯度裁剪的概念,但是我不确定我应该如何在求解器中选择一个固定的数字。
发布于 2017-04-12 03:14:12
您可以打印出某些迭代的平方和梯度的和,以了解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。
https://stackoverflow.com/questions/43302943
复制相似问题