热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

1.全连接层反向传播设CC为loss全连接层输入:(bottom_data)aa全连接层输出:(top_data)zz假设aa维度K_,zz维度N_,则权值矩阵维度为N_行*K_列

1.全连接层反向传播

C为loss
全连接层输入:(bottom_data) a
全连接层输出:(top_data) z
假设 a维度K_, z维度N_,则权值矩阵维度为N_行*K_列,batchsize=M_
全连接层每个输出zi=b+jwijaj

1.1bottom_diff计算:

对bottom_data求导:Caj=iCziziaj=iziwij(batchsize=1时)
当batchsize不为1时,需要分别获得各个样本下的结果,组成矩阵:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

1.2weight_diff计算:

对weight求导:Cwij=Cziziwij=ziaj
当batchsize不为1时,需要将各个样本下的结果进行求和:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

1.3bias_diff计算:

对bias进行求导:Cb=iCzizib=izi(batchsize=1时)
当batchsize不为1时,需要分别获得各个样本下的结果,组成向量:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

2.Pooling层反向传播

2.1 Max Pooling:

图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
首先,在前向传播时,在输出新的feature map的同时,还要记录每个输出点对应于前一层feature map中的位置,放入mask或者top_mask中(top_mask是指,该mask存放在top_data里当作输出的一部分)
max pooling 前向传播caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
在反向传播时:将top_diff按照记录下来的index返回到输入层中,即只对前向传播时选中的一些位置进行误差传播,如下图:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
max pooling 反向传播caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

2.2 Average Pooling

前向传播较简单,block内数值的平均值作为输出,每个输出值对应固定的输入block,如图:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
反向传播,将输出层各个位置的梯度,平均分配到其对应的输入block中,如图:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
average pooling 反向传播caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

3.Relu层反向传播

由Relu定义可得其导数:

f(x)={xx>0αxx0,f(x)={1x>0αx0

其中α默认为0
则Relu反向传播只需判断原始输入数据是否大于0,若大于0则将top_diff直接传到前层,否则将top_diff乘上α传到前层,如图:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现
Relu层反向传播caffe实现:
图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现


推荐阅读
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Title: Extracting Title, Keywords, and Summary from Content
    Summary: This task requires extracting the title, keywords, and summary from a given content. The title should be more than 30 characters long, the keywords should be at least 10, and the summary should be between 150 and 200 words. ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • ;(function(window){***[dateDiff算时间差]*@param{[typeNumber]}hisTime[历史时间戳, ... [详细]
  • Non-ASCIIhelponitsownisOK: ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • QuestionThereareatotalofncoursesyouhavetotake,labeledfrom0ton-1.Somecoursesmayhaveprerequi ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • Answer:Theterm“backslash”isonofthemostincorrectlyusedtermsincomputing.People ... [详细]
author-avatar
mobiledu2502917293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有