热门标签 | 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层的反向传播原理和实现


推荐阅读
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文介绍了如何使用 Spark SQL 生成基于起始与终止时间的时序数据表。通过 `SELECT DISTINCT goods_id, get_dt_date(start_time, i) as new_dt` 语句,根据不同的时间间隔 `i` 动态填充日期,从而构建出完整的时序数据记录。该方法能够高效地处理大规模数据集,并确保生成的数据表准确反映商品在不同时间段的状态变化。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • TypeScript ESLint: 避免使用隐式 any 类型,建议指定更具体的类型以提高代码可维护性
    在使用 Vue 引入 SVGSpriteLoader 时遇到了问题。具体表现为在 `shims-vue.d.ts` 文件中进行相关配置后,WebStorm 报错。为了解决这一问题,建议避免使用隐式 `any` 类型,而是指定更具体的类型,以提高代码的可维护性和类型安全性。可以通过在 ESLint 配置中禁用隐式 `any` 类型来实现这一目标。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 本文介绍了一种算法,用于计算当前日期在本年度的具体周数。该方法由作者王峰提出,通过私有函数 `weekOfYear` 实现,能够准确地确定当前日期在一年中的周位置。此算法在日历计算和时间管理中具有广泛应用,适用于各种编程语言和应用场景。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 在Docker中,默认情况下,镜像和容器数据存储在`/var/lib/docker`目录下,使用loop设备进行管理。然而,当根分区空间不足时(例如CentOS 7默认安装仅有50GB),可能会导致Docker守护进程启动失败,因为UUID与存储的UUID不匹配。为解决这一问题,可以考虑扩展根分区或更改Docker的数据存储路径,以确保有足够的空间来支持Docker的正常运行。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • 在TypeScript中,我定义了一个名为 `Employee` 的接口,其中包含 `id` 和 `name` 属性。为了使这些属性可选为空,可以通过使用 `| null` 或 `| undefined` 来扩展其类型定义。例如,`id: number | null` 表示 `id` 可以是数字或空值。这种类型的灵活性在处理不确定的数据时非常有用,可以提高代码的健壮性和可维护性。 ... [详细]
  • 《Intel IA-32 架构软件开发人员手册详尽指南》提供了详尽的 IA-32 架构技术文档,涵盖指令集、系统编程和硬件接口等内容,为软件开发人员提供全面的技术支持和参考。该手册不仅包括详细的架构说明,还提供了丰富的编程示例和最佳实践,帮助开发人员更好地理解和应用 IA-32 架构。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
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社区 版权所有