| 100 | |
| 101 | template <typename Dtype> |
| 102 | void SGDSolver<Dtype>::ApplyUpdate() { |
| 103 | CHECK(Caffe::root_solver()); |
| 104 | Dtype rate = GetLearningRate(); |
| 105 | if (this->param_.display() && this->iter_ % this->param_.display() == 0) { |
| 106 | LOG(INFO) << "Iteration " << this->iter_ << ", lr = " << rate; |
| 107 | } |
| 108 | ClipGradients(); |
| 109 | for (int param_id = 0; param_id < this->net_->learnable_params().size(); |
| 110 | ++param_id) { |
| 111 | Normalize(param_id); |
| 112 | Regularize(param_id); |
| 113 | ComputeUpdateValue(param_id, rate); |
| 114 | } |
| 115 | this->net_->Update(); |
| 116 | } |
| 117 | |
| 118 | template <typename Dtype> |
| 119 | void SGDSolver<Dtype>::Normalize(int param_id) { |