caffe中的normalization实现

Caffe归一化层解析(normalize_layer.hpp) 归一化层介绍 归一化层主要作用是将空间或者通道内的元素归一化到0到1之间,具体公式可以表示为: xi=xi(∑1nxi2+eps)12∗scaleix_i = \frac{x_i}{(\sum_{1}^{n}x_i^2+eps)^\frac{1}{2}} * scale_ixi​=(∑1n​xi2​+eps)21​xi​​∗scalei​ 其中$x_i表示对应的元素,eps为了防止数据的溢出... 阅读详情

首先得感谢某牛的:如何在caffe中增加Layer以及caffe中triplet loss layer的实现

所以接下来就按照这个牛的介绍,逐个往里面添加东西就好了。

构造设置函数这里就先忽略,直接进入前馈和反馈的实现。

原理介绍可以参照上一篇normalization的实现原理。

前馈的过程相对来说是比较简单的,代码如下:

template <typename Dtype>
void NormalizationLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
    const vector<Blob<Dtype>*>& top) {
  const Dtype* bottom_data = bottom[0]->cpu_data();
  Dtype* top_data = top[0]->mutable_cpu_data();
  Dtype* squared_data = squared_.mutable_cpu_data(); //这里是用于存储平方的,相当于前馈的x_i^2
  int n = bottom[0]->num();
  int d = bottom[0]->count() / n;
  caffe_sqr<Dtype>(n*d, bottom_data, squared_data);
  for (int i=0; i<n; ++i) {
    Dtype normsqr = caffe_cpu_asum<Dtype>(d, squared_data+i*d);  //把第i个图中的每个平方加起来
    caffe_cpu_scale<Dtype>(d, pow(normsqr, -0.5), bottom_data+i*d, top_data+i*d);  //注意这里的缩放比例有一个 -0.5 次方,也就是前馈的分母
  }
}

反馈:

template <typename Dtype>
void NormalizationLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
    const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {
  const Dtype* top_diff = top[0]->cpu_diff();
  const Dtype* top_data = top[0]->cpu_data();
  const Dtype* bottom_data = bottom[0]->cpu_data();
  Dtype* bottom_diff = bottom[0]->mutable_cpu_diff();
  int n = top[0]->num();
  int d = top[0]->count() / n;
  for (int i=0; i<n; ++i) {
    Dtype a = caffe_cpu_dot(d, top_data+i*d, top_diff+i*d);  //top_diff对应反馈公式中的E对y的偏导,这行相当于实现的是反馈分子中第二项的求和部分
    caffe_cpu_scale(d, a, top_data+i*d, bottom_diff+i*d);  //这里相当于实现了反馈分子中的第二项,结果存入了bottom_diff中
    caffe_sub(d, top_diff+i*d, bottom_diff+i*d, bottom_diff+i*d);  //这里实现了反馈的分子部分,结果还是存入了bottom_diff中
    a = caffe_cpu_dot(d, bottom_data+i*d, bottom_data+i*d);  //这里是在计算分母的根号里面部分,不过其实也可以在前馈的时候,使用保存下来的数据
    caffe_cpu_scale(d, Dtype(pow(a, -0.5)), bottom_diff+i*d, bottom_diff+i*d); //最终实现了整个反馈公式
  }
}

这个代码还有不够精炼的地方,只是做一个参考~ :)


极智AI | 谈谈 caffe 的 bn 和 scale 算子 本文聊一聊 caffe 的 bn 和 scale 算子。 阅读详情

相关推荐

Caffe官方教程中文版

Caffe官方教程的中文版,使用的时候可以参考一下。初学者不建议参考。

在caffe中添加Normalize层

在caffe中添加Normalize层 我的电脑中编译的是caffe官方的源码,但是最近在跑SSD的时候,发现官方的源码中其实是没有Normalize层,所以需要自己添加到Caffe中~ 步骤 1.修改caffe.proto caffe.proto一般是在:caffe_install_root/src/caffe/proto中,其中caffe_install_root就是caffe安装的根目录。打开caffe.proto文件。需要修改的有两处: (1) 找到message LayerParameter,添加

weixin_42206075的博客 460

本地部署DeepSeek-Coder-6.7B 离线版的完整指南:打造适配当前系统的AI助手

《DeepSeek-Coder-6.7B本地部署指南》详细介绍了如何离线部署这款专注于代码生成的AI模型。文章涵盖硬件要求(推荐8核CPU、32GB内存、NVIDIA RTX3080显卡)、软件依赖(Python3.8+、CUDA11.0+、PyTorch1.9+)以及具体安装步骤,包括模型下载、路径配置和GPU加速设置。重点说明如何通过输入系统配置文档和使用说明书,让模型生成适配特定系统的代码,并提供了参数调优和模型微调的方法。该指南旨在帮助开发者在本地安全高效地使用AI助手,实现代码自动生成与优化,提升

欢迎来到我的优快云博客!我专注于技术创新和数字化转型,特别是在低代码平台、人工智能和大数据分析领域的探索与应用。通过深入分析各种行业案例,帮助企业加速数字化进程,提升运营效率与创新能力。在这里,您将找到关于低代码平台、AI技术、数据分析与 1493

caffe中的normalization_layer

caffe-ssd里面有normalization的实现,包括.hpp,.cpp,.cu。其实现的是L2-normalization  L2正则化的公式是:    现在来看caffe的代码实现。  首先是caffe.proto,这里面定义了normalization_parameter  message NormalizeParameter {  optional bool acros

ZhikangFu的专栏 2963

从Frenet坐标系到多项式拟合:Lattice Planner核心原理拆解与调参指南

本文深入解析了自动驾驶轨迹规划中Lattice Planner的核心原理,重点阐述了其在Frenet坐标系下解耦横纵向规划、利用五次和四次多项式拟合轨迹的数学基础。文章提供了从坐标系转换、采样策略到成本函数设计的完整工程实践指南,并分享了关键的参数调优经验,旨在帮助开发者高效实现稳定、平滑且安全的轨迹规划。

tech5的博客 1111

小样本物体检测

Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector 关键:提出了一个小样本数据集:数据集 步骤: 提取support img为一过滤特征 使用support img的特征来过滤query img,最后将过滤后的特征输入RPN网络中 RPN网络层的输出,会进行多头判断,使用全局信息检测,使用局部信息检测,一对多检测 Attention-Based Region Proposal Network Increme

qq_21157073的博客 5266

Caffe 层级结构

文章目录一、层的基本数据结构三、数据层三、视觉层四、激活函数层五、损失及准确率层六、特殊层七、参考资料 一、层的基本数据结构 message LayerParameter { optional string name = 1; optional string type = 2; repeated string bottom = 3; repeated string top ............

Man 1843

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 322

caffe中batch_norm层代码详细注解

caffe batch_norm 层代码详细注解

Mr.Gao的博客 1万+

mac(apple silicon)arm64安装spm12详细教程

3.下载matlab runtime R2023b for macOS (macA64),注意必须下载这个,只下载matlab是不可以的。默认安装目录是/Applications/MATLAB/MATLAB_Runtime/R2023b。注意最后的命令,路径根据自己的matlab_runtime安装位置进行调整,然后就可以安装成功了。5. 解压spm12.zip,解压后将文件夹拖到应用程序下(Applications)2.下载spm12,这个版本可兼容mac芯片!6.打开mac终端,输入。

weixin_62332001的博客 2024

【雷达仿真 | FMCW TDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)】

1、FMCW叫做调频连续波,调频连续波有步进调频连续波(SFMCW)、线性调频连续波(LFMCW),以及其他非线性调频连续波。LFMCW有锯齿波和三角波等等;锯齿波有恒定调制周期的锯齿波和非恒定周期的锯齿波。Introduction to mmwave sensing:FMCW radars.pdf和The fundamentals of millimeter wave sensors。2、MIMO是多输入多输出(Multiple input Multiple output),也就是多发多收。

【调皮连续波】雷达技术领域知识博主 1万+

Batch Normalization Caffe版实现解析

建议先看论文Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,这样会对本文有更好的理解; 同时使用Batch Normalization的GoogLENet也被称为Inception v2;Batch Normalization Caffe版实现解析BatchN

lanran2的博客 7248

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 285

caffe中BatchNorm层和Scale层实现批量归一化(batch-normalization)注意事项

caffe中实现批量归一化(batch-normalization)需要借助两个层:BatchNorm 和 Scale BatchNorm实现的是归一化 Scale实现的是平移和缩放 在实现的时候要注意的是由于Scale需要实现平移功能,所以要把bias_term项设为true 另外,实现BatchNorm的时候需要注意一下参数use_global_stats,在训练的时候设为false,...

weixin_NineDays66 1845

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Caffe normalization层实现

http://blog.youkuaiyun.com/thy_2014/article/details/52635896 http://blog.youkuaiyun.com/thy_2014/article/details/52639324

andylei777的博客 844

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Group Normalization 反向传播 BP推导(适用于caffe实现)

何凯明大神最近出的Group Normalization,文章中就自带了TF的实现代码,非常简洁,但是对于少数还在不得不使用caffe的人来说还得自己手动推导BP公式,网上找了很久都没有找到,此处花了一些时间推了一下,欢迎指正。 实际上推导出来后才发现GN的反向传播和Instance Norm基本一样,区别仅仅在于最后求Mean的范围,IN是针对一个channel进行求解,GN则是在一个...

Mingjian_LI的博客 1590

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Caffe中的normalization_layer

转自:http://blog.youkuaiyun.com/zqjackking/article/details/69938901 caffe-ssd里面有normalization的实现,包括.hpp,.cpp,.cu。其实现的是L2-normalization L2正则化的公式是: 现在来看caffe的代码实现。 首先是caffe.proto,这里面定义了normalizat...

Suan2014的博客 1216

基于Caffe的DeepID2实现(中)

  小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写。有了Data层,下一步则是如何去使用生成好的训练数据。也就是这一篇的内容。 小喵的博客:http://www.miaoerduo.com 博客原文:http://www.miaoerduo.com/deep-learning/基于caffe的deepid2实现(中).html 二、精髓,DeepID2 Loss...

weixin_30722589的博客 104

【caffe转向pytorch】caffe的BN层+scale层=pytorch的BN层

caffe里面用BN层的时候通常后面接一下scale层,原因如下: caffe 中为什么bn层要和scale层一起使用 这个问题首先你要理解batchnormal是做什么的。它其实做了两件事。 1) 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。 2)y=alpha×x_norm + beta,对归一化后的x进行比例缩放和位移。其中alpha和...

程序媛 2869

Batch Normalization

https://mlnote.com/2016/12/20/Neural-Network-Batch-Normalization-and-Caffe-Code/ http://geek.youkuaiyun.com/news/detail/160906

谢军的博客 393

2016.4.2 对于caffe BN代码分析

对于caffe BN代码分析         其实主要是为了先读一读代码,然后改一改,所以为了读这个代码,首先要掌握两个基本内容:BN的算法流程以及BLAS基本知识。BN算法流程见参考文献[1 2]。BLAS的基本知识的索引见上一篇博客。bn_layer.cpp  <span style="font-family:等线;mso-ascii-font-family: Calibri;mso-as

Zhaohui1995_Yang的专栏 3658

caffe-batch norm层理解

1、成员变量 Blob&lt;Dtype&gt; mean_,variance_,temp_,x_norm; //temp_保存(x-mean_x)^2 bool use_global_stats_;//标注训练与测试阶段 Dtype moving_average_fraction_; int channels_; Dtype eps_; // 防止分母为0 // 中...

zhanghenan123的博客 749

CAFFE源码学习笔记之batch_norm_layer

一、前言 网络训练的过程中参数不断的变化导致后续的每一层输入的分布也发生变化,而学习的过程使得每一层都需要适应输入的分布。所以就需要谨慎的选择初始化,使用小的学习率,这极大的降低了网络收敛的速度。为了使每层的输入分布大致都在0均值和单位方差,需要对每层的输入进行归一化。 为了使 二、源码分析 1、layersetup函数 batch_norm参数:message BatchNorm

sinat_22336563的博客 6952
上一篇: normalization的实现原理
下一篇: caffe和最新的tensorflow的依赖protobuf不兼容问题
thy_2014
博客等级 码龄12年 37粉丝 26原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值