Caffe代码阅读11:absval_layer层的实现
来源:互联网 发布:沙盘是什么软件 编辑:程序博客网 时间:2024/05/24 01:13
这一层比较简单:主要就是求绝对值,反传部分的代码也很简单
里头用到了caffe_abs这个函数以及caffe_cpu_sign这两个函数
需要注意的是caffe_cpu_sign在math_functions.hpp里头定义得比较特别
在math_functions.hpp里只有caffe_sign,通过一个宏定义生成了caffe_cpu_sign这个函数
整体来说没啥特别的内容,直接上代码吧。
#include <vector>#include "caffe/layers/absval_layer.hpp"#include "caffe/util/math_functions.hpp"namespace caffe {template <typename Dtype>void AbsValLayer<Dtype>::LayerSetUp(const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { NeuronLayer<Dtype>::LayerSetUp(bottom, top); CHECK_NE(top[0], bottom[0]) << this->type() << " Layer does not " "allow in-place computation.";}template <typename Dtype>void AbsValLayer<Dtype>::Forward_cpu( const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { const int count = top[0]->count(); Dtype* top_data = top[0]->mutable_cpu_data(); caffe_abs(count, bottom[0]->cpu_data(), top_data);}template <typename Dtype>void AbsValLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top, const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) { const int count = top[0]->count(); // 前面一层关于本层top的偏导 const Dtype* top_diff = top[0]->cpu_diff(); if (propagate_down[0]) { const Dtype* bottom_data = bottom[0]->cpu_data(); Dtype* bottom_diff = bottom[0]->mutable_cpu_diff(); // 将bottom_data里头的每个元素的正负值复制到bottom_diff caffe_cpu_sign(count, bottom_data, bottom_diff); // 计算偏导数计算关于本层bottom的偏导 // 将关于top的偏导乘以当前层bottom中每个数据的符号 caffe_mul(count, bottom_diff, top_diff, bottom_diff); }}#ifdef CPU_ONLYSTUB_GPU(AbsValLayer);#endifINSTANTIATE_CLASS(AbsValLayer);REGISTER_LAYER_CLASS(AbsVal);} // namespace caffe
0 0
- Caffe代码阅读11:absval_layer层的实现
- Caffe代码阅读8:absval_layer层的实现
- caffe代码阅读3:Filler的实现
- caffe代码阅读7:Caffe中卷积的实现
- caffe代码阅读8: Data_layers的实现细节(各个数据读取层的实现细节) 2016.3.25-28
- caffe卷积层代码阅读笔记
- caffe卷积层代码阅读笔记
- caffe代码阅读1:blob的实现细节-2016.3.14
- caffe代码阅读2:common的实现细节-2016.3.14
- caffe代码阅读5:Layer的实现细节-2016.3.17
- caffe代码阅读6:Filler的实现细节-2016.3.18
- caffe代码阅读7:LayerRegistry的实现细节-2016.3.18
- caffe代码阅读9:SyncedMemory的实现细节-2016.3.28
- caffe代码阅读1:Layer的介绍与实现细节
- caffe代码阅读2:DataTransformer以及io的实现细节
- caffe代码阅读4:LayerRegistry的介绍与实现
- caffe代码阅读5: Data_layers的实现细节
- caffe代码阅读6:SyncedMemory的j介绍与实现
- 数据结构上机实验之顺序查找
- applicationContext_common.xml配置模板mysql
- 如何让linux用户自定义的命令alias永久生效?
- mybatis的配置
- java 线程 同步与锁
- Caffe代码阅读11:absval_layer层的实现
- 格式化操纵算子
- 正则表达式基础
- iOS 通过运行时获取ivars,properties,class methods以及instance methods
- Tarjan算法(LCA)
- cf678E. Another Sith Tournament
- 关于UITableView的Cell复用谈谈我的一些心得
- 华为OJ 中级 字符串排序
- 产品经理要做好什么?