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目录下有一个 ...
随机推荐
- linux后台开发常用调试工具
一.编译阶段 nm 获取二进制文件包含的符号信息 strings 获取二进制文件包含的字符串常量 strip ...
- tcp ESTABLISHED 接收数据
tcp_rcv_established函数的工作原理是把数据包的处理分为2类:fast path和slow path,其含义显而易见.这样分类的目的当然是加快数据包的处理,因为在正常情况下,数据包是按 ...
- lua调用dll demo
使用的是lua5.3 DllMain.cpp 1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" { 4 #in ...
- Windows查找JDK的路径
第一步:确定是否安装JDK 在控制台输入: java -version 此时说明你电脑安装了JDK. 第二步:查找路径 然后在控制台输入: java -verbose 输出结果: 最后两行就是相应的j ...
- oracle 11.2.0.4静默安装
oracle 11.2.0.4静默安装 1.安装包 1.1.上传安装包 xshell可用rz命令,选择安装包. mobaxterm可用左侧栏上传功能. 2.安装准备 2.1.关闭防火墙.SELinux ...
- MyBatis 使用手册
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XM ...
- MySQL 四种隔离级别详解,看完吊打面试官
转发链接:https://zhuanlan.zhihu.com/p/76743929 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就 ...
- 小而精的 Docker 项目,为什么要使用 Docker? Docker 容器
前言 为什么要使用 Docker? Docker 容器的启动在秒级 Docker 对系统资源利用率高,一台主机上可以同时运行数千个 Docker 容器. Docker 基本不消耗系统资源,使得运行在 ...
- 源码分析:CountDownLatch 之倒计时门栓
简介 CountDownLatch 是JDK1.5 开始提供的一种同步辅助工具,它允许一个或多个线程一直等待,直到其他线程执行的操作完成为止.在初始化的时候给定 CountDownLatch 一个计数 ...
- Golang 实现 Redis(6): 实现 pipeline 模式的 redis 客户端
本文是使用 golang 实现 redis 系列的第六篇, 将介绍如何实现一个 Pipeline 模式的 Redis 客户端. 本文的完整代码在Github:Godis/redis/client 通常 ...