Caffe源码解析—核函数
目录
forward_cpu_gemm
forward_cpu_bias
backward_cpu_bias
weight_cpu_gemm
backward_cpu_gemm
其余函数参考链接
forward_cpu_gemm
output = weights * input
weight: N x K input: K x M output: N x M
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::forward_cpu_gemm(const Dtype* input,const Dtype* weights, Dtype* output, bool skip_im2col) {const Dtype* col_buff = input;if (!is_1x1_) {if (!skip_im2col) {conv_im2col_cpu(input, col_buffer_.mutable_cpu_data());}col_buff = col_buffer_.cpu_data();}for (int g = 0; g < group_; ++g) {caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, conv_out_channels_ /group_, conv_out_spatial_dim_, kernel_dim_ / group_,(Dtype)1., weights + weight_offset_ * g, col_buff + col_offset_ * g,(Dtype)0., output + output_offset_ * g);}
}
forward_cpu_bias
output = bias * bias_multiplier_
bias:N x 1
bias_multiplier_:1 x M的单位向量
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::forward_cpu_bias(Dtype* output,const Dtype* bias) {caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasNoTrans, num_output_,height_out_ * width_out_, 1, (Dtype)1., bias, bias_multiplier_.cpu_data(),(Dtype)1., output);
}
backward_cpu_bias
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::backward_cpu_bias(Dtype* bias,const Dtype* input) {caffe_cpu_gemv<Dtype>(CblasNoTrans, num_output_, height_out_ * width_out_, 1.,input, bias_multiplier_.cpu_data(), 1., bias);
} 计算关于bias的导数
weight_cpu_gemm
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::weight_cpu_gemm(const Dtype* input,const Dtype* output, Dtype* weights) {const Dtype* col_buff = input;if (!is_1x1_) {conv_im2col_cpu(input, col_buffer_.mutable_cpu_data());col_buff = col_buffer_.cpu_data();}for (int g = 0; g < group_; ++g) {caffe_cpu_gemm<Dtype>(CblasNoTrans, CblasTrans, conv_out_channels_ / group_,kernel_dim_ / group_, conv_out_spatial_dim_,(Dtype)1., output + output_offset_ * g, col_buff + col_offset_ * g,(Dtype)1., weights + weight_offset_ * g);}
}//计算关于weight的导数用于更新。
backward_cpu_gemm
template <typename Dtype>
void BaseConvolutionLayer<Dtype>::backward_cpu_gemm(const Dtype* output,const Dtype* weights, Dtype* input) {Dtype* col_buff = col_buffer_.mutable_cpu_data();if (is_1x1_) {col_buff = input;}for (int g = 0; g < group_; ++g) {caffe_cpu_gemm<Dtype>(CblasTrans, CblasNoTrans, kernel_dim_ / group_,conv_out_spatial_dim_, conv_out_channels_ / group_,(Dtype)1., weights + weight_offset_ * g, output + output_offset_ * g,(Dtype)0., col_buff + col_offset_ * g);}if (!is_1x1_) {conv_col2im_cpu(col_buff, input);}计算关于bottom data的导数以便传给下一层
其余函数参考链接
Caffe源码解析—核函数相关推荐
- 深度学习框架Caffe源码解析
作者:薛云峰(https://github.com/HolidayXue),主要从事视频图像算法的研究, 本文来源微信公众号:深度学习大讲堂. 原文:深度学习框架Caffe源码解析 欢迎技术投稿. ...
- Caffe源码解析5:Conv_Layer
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ Vision_layer里面主要是包括了一些关于一些视觉上的操 ...
- caffe源码解析—image_data_layer层
caffe data layer相关层的继承结构 image-data-layer层关键代码注释 DataLayerSetUp函数 //将imagelist中的图片以 image+label格式 读入 ...
- Caffe源码解析4: Data_layer
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ data_layer应该是网络的最底层,主要是将数据送给blo ...
- Caffe源码解析2:SycedMem
from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5150554.html 转载请注明出处,楼燚(yì)航的blog,http://www.c ...
- Caffe源码解析1:Blob
from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 转载请注明出处,楼燚(yì)航的blog,http://www.c ...
- Caffe源码解析(一) —— caffe.proto
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 caffe.proto是caffe数据结构定义的主要文件,本文主要是在caffe.proto代码的基础上加上了部分 ...
- 零基础学caffe源码 ReLU激活函数
零基础学caffe源码 ReLU激活函数 原创 2016年08月03日 17:30:19 1.如何有效阅读caffe源码 1.caffe源码阅读路线最好是从src/cafffe/proto/caffe ...
- win版本caffe源码libcaffe研究
版权声明:本文为博主在研究工作中经验分享,包括研究成果,欢迎交流和批评:其中参考资料的标注难免会有疏漏之处,如有请告知,立马更正,谢谢:未经博主允许不得转载. [cpp] view plain co ...
最新文章
- Nature:依靠锰的氧化实现细菌的化能自养生长
- python set 排序_python set 排序_如何在Python中使用sorted()和sort()
- 怎样在html中实现图层重叠,javascript – 在HTML5画布中实现图层
- OC extern和变量
- uni-app 实现微信授权登录
- python3多线程第三方库_Python3标准库:concurrent.futures管理并发任务池
- Eclipse的Spring库导入
- 恶意软件利用Windows故障诊断平台传播
- 远程出发jenkins jobs
- 【react】 react 中 前后端数据的交互方式 (原生的ajax、jq的ajax、axios、fetch )...
- 【滤波器】基于matlab低通滤波器(LPF)设计【含Matlab源码 323期】
- 计算机课代表中段考总结,中段考试总结与反思
- php获取真实图片后缀
- 自适应网页(响应式布局)+弹性布局
- Excel中数字、数值和文本的区别
- SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And 0.5MB Model Size
- 十八、绘制游戏背景图片
- 浅谈MYSQL增量备份
- java调用CMD完成文件复制
- ae导出gif插件_GifGun v1.7.5 一键快速让AE导出输出GIF动态图脚本
热门文章
- Java 接口和抽象类可以被new么?
- 浅谈 温故知新——HTML5!
- typedef 与 define
- 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。
- C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标
- iOS之深入解析objc_msgSend消息转发机制的底层原理
- 【数据结构与算法】之深入解析“两数之和”的求解思路与算法示例
- HarmonyOS之常用布局TableLayout的使用
- LeetCode Algorithm 面试题 16.10. 生存人数
- TUST 数据库原理 试卷(A)