caffe源码 全连接层
图示全连接层

- 如上图所示,该全链接层输入n * 4,输出为n * 2,n为batch
- 该层有两个参数W和B,W为系数,B为偏置项
- 该层的函数为F(x) = W*x + B,则W为4 * 2的矩阵,B 为 1 * 2 的矩阵
从公式理解全连接层
假设第N层为全连接层,输入为Xn,输出为Xn+1,其他与该层无关的信息可以忽略
- 该层公式有Xn+1 = Fn(Xn) = W * Xn + B
前向传播
- 已知Xn,Xn+1 = W * Xn + B, 为前向传播
反向传播
反响传播这里需要求两个梯度,loss 对 W的梯度 和 loss 对 B 的梯度,
- loss 对 W 的梯度
- 具体公式如下:
- 具体公式如下:
- loss 对 B 的梯度
- 具体公式如下:
- 具体公式如下:
- 上面两个梯度都用到了loss 对 该层输出的梯度,所以在这层应该把loss 对该层输入的梯度传递到上一层。
- 具体公式如下:
- 具体公式如下:
caffe中innerproduct的代码
前向传播
这一步在代码里面分为两步:
- Xn+1 = W * Xn,如下图:
- Xn+1 = Xn+1 + B,如下图:
- 和上面推导的一样
反向传播
这里需要求三个梯度,loss 对 W的梯度 ,loss 对 B的梯度, loss 对 Xn的梯度
- loss 对 W 的梯度
- 公式:
- 代码:
- 以上公式和推导的公式有点区别,后面加多loss 对W 的梯度,实现的是累积梯度
- 公式:
- loss 对 B 的梯度
- 公式:
- 代码:
- 以上公式和推导的公式有点区别,后面加多loss 对B 的梯度,实现的是累积梯度
- 公式:
- loss 对 Xn 的梯度,:
- 公式:
- 代码:
- 公式和推导的并无区别
- 公式:
caffe源码 全连接层的更多相关文章
- caffe之(四)全连接层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- caffe怎么把全连接层转成convolutional层
caffe中有把fc层转化为conv层的,其实怎么看参数都是不变的,对alex模型来说,第一个fc层的参数是4096X9216,而conv的维度是4096x256x6x6,因此参数个数是不变的,只是需 ...
- caffe源码 池化层 反向传播
图示池化层(前向传播) 池化层其实和卷积层有点相似,有个类似卷积核的窗口按照固定的步长在移动,每个窗口做一定的操作,按照这个操作的类型可以分为两种池化层: 输入参数如下: 输入: 1 * 3 * 4 ...
- Caffe源码阅读(1) 全连接层
Caffe源码阅读(1) 全连接层 发表于 2014-09-15 | 今天看全连接层的实现.主要看的是https://github.com/BVLC/caffe/blob/master/src ...
- caffe源码 卷积层
通俗易懂理解卷积 图示理解神经网络的卷积 input: 3 * 5 * 5 (c * h * w) pading: 1 步长: 2 卷积核: 2 * 3 * 3 * 3 ( n * c * k * k ...
- caffe中全卷积层和全连接层训练参数如何确定
今天来仔细讲一下卷基层和全连接层训练参数个数如何确定的问题.我们以Mnist为例,首先贴出网络配置文件: name: "LeNet" layer { name: "mni ...
- caffe源码阅读
参考网址:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 1.caffe代码层次熟悉blob,layer,net,solve ...
- caffe源码学习
本文转载自:https://buptldy.github.io/2016/10/09/2016-10-09-Caffe_Code/ Caffe简介 Caffe作为一个优秀的深度学习框架网上已经有很多内 ...
- Caffe源码中caffe.proto文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件. 在src/caffe/proto目录下有一个 ...
随机推荐
- Git仓库的提交记录乱成一团,怎么办?
大家好,今天和大家聊聊git当中一个非常好用的功能--区间选择,它可以帮我们处理看起来非常复杂的提交记录.从而帮助我们很快找到我们需要的内容. 如果大家有参与过多人协同的项目开发,比如十几个人甚至更多 ...
- python菜鸟教程学习3:基础语法
菜鸟教程对应网址:https://www.runoob.com/python3/python3-basic-syntax.html 编码:python3用UTF-8编码,所有字符串都是unicode字 ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
- HotSpot类模型之ArrayKlass
上一篇分析了 HotSpot类模型之InstanceKlass ,这次主要分析表示java数组类型的C++类. 1.ArrayKlass类 ArrayKlass继承自Klass,是所有数组类的抽象基类 ...
- 学习Validator验证框架总结
在项目开发中许多地方需要加以验证,对于使用if-else简单粗暴一个一个验证,spring的validation封装了Javax ValidationI校验参数,大大缩减了代码量. 以前的分层验证,从 ...
- Mac太卡了怎么办?用CleanMyMac四招让它飞起来
许多小伙伴使用Mac后都反馈电脑不如想象中的流畅,甚至有点卡顿的现象,原因可能是因为无用的应用占据了过多的内存,或者是系统盘垃圾过多,导致的电脑卡顿现象. 今天小编教给大家几招,让自己的Mac能够一键 ...
- Guitar Pro的10个非常实用的技巧(下)
Guitar Pro 7具有许多功能和编辑选项,只需点击几下即可随时创建与编辑我们的乐谱,.以下就为大家介绍10个Guitar Pro中实用的技巧,可以大大的节省我们的时间. 上次在<Guita ...
- CorelDRAW 2017提示已安装另一版本导致安装失败的解决办法
Coreldraw提示"由于您已安装了另一版本,因此无法安装本产品.要安装本产品,您必须首先卸载现有版本"的情况在Coreldraw X8及Coreldraw 2017上都存在,下 ...
- php数组学习记录01
array_change_key_case array_change_key_case - 将数组中的所有键名修改为全大写或小写 <?php $input_array = array(" ...
- 从递归到memo到动态规划
//memo,记忆化搜索 class Solution { int[][] memo; public boolean wordBreak(String s, List<String& ...