Caffe深入分析(源码)
2017-08-05 13:05
253 查看
Caffe的整体流程图:
1 template <typename Dtype> 2 void SGDSolver<Dtype>::ApplyUpdate() 3 { 4 // 获取当前学习速率 5 Dtype rate = GetLearningRate(); 6 if (this->param_.display() && this->iter_ % this->param_.display() == 0) 7 { 8 LOG(INFO) << "Iteration " << this->iter_ << ", lr = " << rate; 9 } 10 11 // 在计算当前梯度的时候,如果该值超过了阈值clip_gradients,则将梯度直接设置为该阈值 12 // 此处阈值设为-1,即不起作用 13 ClipGradients(); 14 15 // 逐层更新网络中的可学习层 16 for (int param_id = 0; param_id < this->net_->learnable_params().size(); 17 ++param_id) 18 { 19 // 归一化 20 Normalize(param_id); 21 // L2范数正则化添加衰减权重 22 Regularize(param_id); 23 // 随机梯度下降法计算更新值 24 ComputeUpdateValue(param_id, rate); 25 } 26 // 更新权重 27 this->net_->Update(); 28 }
ApplyUpdate
最后将迭代次数++iter_,继续while循环,直到迭代次数完成。 这就是整个网络的训练过程。
相关文章推荐
- caffe源码深入学习6:超级详细的im2col绘图解析,分析caffe卷积操作的底层实现
- caffe源码分析--poolinger_layer.cpp
- Java源码分析:深入探讨Iterator模式
- Java源码分析:深入探讨Iterator模式
- 深入分析Linux内核源码-第五章进程调度(时间片从何而来,如何分配给进程,讲解详细)
- String、StringBuilder、 StringBuffer 深入分析 源码解析
- 深入理解ConcurrentHashMap之源码分析(JDK8版本)
- caffe源码分析--softmax_layer.cpp
- 深入分析HaspMap源码
- Caffe源码分析:solver,Net,layer的依赖关系
- Android源码分析-深入理解setContentView方法
- Java Timer 源码深入分析
- 【深入Java编程】JVM源码分析之堆外内存完全解读
- 深入Tomcat源码分析Session到底是个啥!
- 深入理解Android事件分发机制之源码分析
- 从Caffe源码分析训练过程
- [caffe] 源码分析
- caffe源码分析--data_layer.cpp
- 深入理解Spark 2.1 Core (九):迭代计算和Shuffle的原理与源码分析