Caffe学习之自定义创建新的Layer层

2023-10-30

caffe源码中已经帮我封装好了各种各样的layer,但是有时候现有的layer不能满足设计的网络要求,这个时候需要自己定义一个新的layer,本文参考here,进行简单讲解,具体方式如下:

一.创建.hpp文件

1.添加你的layer头文件置于 include/caffe/layers/ 下,比如include/caffe/layers/your_layer.hpp

2.your_layer继承选择继承layer.hpp, common_layers.hpp, data_layers.hpp, loss_layers.hpp, neuron_layers.hpp, 或者 vision_layers.hpp其中一种

3.重写virtual inline const char* type() const { return "YourLayerName"; }函数,这个的目的是为了在写net.prototxt时,layer{type:"YourLayerName"}有所对应

4.根据自己layer的需要,对{*}blob部分方法进行重写,以此来限制bottom和top的blob个数。比如 要是重写了 virtual inline int ExactNumBottomBlobs() const { return 1; }就表示限制bottom的blob为1

5.申明
virtual void LayerSetUp(const vector<Blob<Dtype>*>& bottom,const vector<Blob<Dtype>*>& top);
virtual void Reshape(const vector<Blob<Dtype>*>& bottom,const vector<Blob<Dtype>*>& top);
virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,const vector<Blob<Dtype>*>& top);
virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);

6.要是需要GPU加速,则需申明:
virtual void Forward_gpu(const vector<Blob<Dtype>*>& bottom,const vector<Blob<Dtype>*>& top);
virtual void Backward_gpu(const vector<Blob<Dtype>*>& top,const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);

7.其他(根据算法需要的函数以及参数)

可以在/caffe/include/caffe/下找到许多对应的例子,比如inner_product_layer.hpp:

#ifndef CAFFE_INNER_PRODUCT_LAYER_HPP_
#define CAFFE_INNER_PRODUCT_LAYER_HPP_

#include <vector>

#include "caffe/blob.hpp"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Caffe学习之自定义创建新的Layer层 的相关文章

随机推荐

  • IDC:云效产品能力No.1,领跑中国DevOps市场

    近日 全球领先的专业市场调查机构国际数据公司 IDC 发布了 IDC MarketScape 中国 DevOps 平台市场厂商评估 2022 报告 此报告中对中国主流 DevOps 云厂商从战略 Strategies 能力 Capabili
  • 详解rem布局-利用rem布局实现移动端高清显示

    目录 目录 一 初探rem布局 1 1 rem是什么 1 2 rem实现新闻字体 小中大 设置 二 利用rem布局实现移动端高清显示 一 初探rem布局 1 1 rem是什么 rem是CSS3新增的一个相对单位 root em 根em 这个
  • Android图片加载神器之Fresco,基于各种使用场景的讲解

    Fresco是Facebook开源Android平台上一个强大的图片加载库 也是迄今为止Android平台上最强大的图片加载库 优点 相对于其他开源的第三方图片加载库 Fresco拥有更好的内存管理和强大的功能 基本上能满足所有的日常使用场
  • TurboPower Async Professional 在Delphi2010及Delphi7中的安装

    这里我们介绍一下TurboPower Async Professional 串口控件的安装方法 Delphi 2010 1 下载http sourceforge net projects tpapro 2 解压 在Delphi2010下找到
  • python正则表达式爬取【豆瓣电影top250】(新手向)

    最近在学崔大的 网络爬虫开发与实战 学到正则表达式那块儿 便迎来了自己的第一个实战项目 话不多说 正式进入正文 本次爬虫工具使用的是pycharm 已经提前安装好了所有包 安装方式 file Settings Project Interpr
  • 双亲委派机制及其部分源码分析

    双亲委派机制 双亲委派机制 我理解的 双亲委派机制 简单来讲就是 类加载器加载类的时候是 自顶向下 的过程来加载 详情如下 在某个加载器进行类加载是 会逐级向上找到他最终的父类 BootstrapClassLoader 先进行加载 逐级向下
  • List元素移除-迭代器删除

    Exception in thread main java util ConcurrentModificationException异常解决方案 使用迭代器方式删除List元素内容 当直接用List的remove移除元素时 会报如上异常 比
  • Hinton关于RBM的代码注解之(三)mnistclassify.m

    mnistclssify m clear all close all maxepoch 50 最大迭代次数 numhid 500 numpen 500 numpen2 2000 对应的1 2 3层隐含层单元的个数 fprintf 1 Con
  • C++ 的封装、继承、多态

    面向对象的三个基本特征 面向对象的三个基本特征是 封装 继承 多态 封装可以隐藏实现细节 使得代码模块化 继承可以扩展已存在的代码模块 类 多态则是为了实现另一个目的 接口重用 它们的目的都是为了 代码重用 封装 目的 隐藏实现细节 使得代
  • Python 控制 Raspberry Pi 云台多舵机

    多舵机控制 使用 Python 和云台机制构造进行 Raspberry Pi 相机定位 所需材料 在本教程中 我们将探索如何在 Raspberry Pi 上使用 Python 控制多个舵机 我们的目标是使用云台机制来定位相机 PiCam 如
  • 【测试开发】基于 MeterSphere 的接口测试流程

    基于 MeterSphere 的接口测试流程 MeterSphere 接口测试模块提供了 接口定义 接口自动化 等接口测试相关功能 用户可以使用树状多级模块来分级分组管理项目下的接口列表 创建执行接口用例测试接口 组合编排多个接口用例进行场
  • 电子产品推荐系统的设计与实现

    其他项目 点击作者主页 目录 1 系统简介 2 系统相关技术 2 1 JSP技术 2 2 B S架构 2 3 MySQL数据库技术 2 4 SSM 3 需求分析 3 1 系统功能需求分析 3 2 系统非功能需求分析 4 系统设计 4 1 系
  • websocket协议

    WebSocket是一种在Web应用程序中实现实时双向通信的协议 一种在单个TCP连接上进行全双工通信的协议 它使得客户端和服务器之间的数据交换变得更加简单 允许服务端主动向客户端推送数据 WebSocket 与 HTTP 2 一样 其实都
  • Java如何对一个对象进行深拷贝?

    深拷贝实现代码 https github com wudashan java deep copy 介绍 在Java语言里 当我们需要拷贝一个对象时 有两种类型的拷贝 浅拷贝与深拷贝 浅拷贝只是拷贝了源对象的地址 所以源对象的值发生变化时 拷
  • 【Transformers】第 1 章 :Hello Transformers

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • QWidget: Must construct a QApplication before a QWidget 请按任意键继续. . .

    系列文章目录 文章目录 系列文章目录 前言 一 错误原因 前言 一 错误原因 在调试examples工程时 遇到编译报错 QWidget Must construct a QApplication before a QWidget 根据字面
  • 打开软件或游戏出现找不到d3dcompiler_43.dll文件如何解决?

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 43 dll文件进行安装
  • SpringBoot的日志配置 logging.file.path和logging.file.name不能同时生效

    这里写自定义目录标题 logging file path和logging file name logging file path和logging file name logging file path data logs lra sdk l
  • day20 网络编程(上)

    day20 网络编程 上 课程目标 掌握网络相关的基础知识并可以基于Python开发程序 基于网络进行数据传输 课程概要 网络必备基础 网络编程 Python代码 B S和C S架构 1 必备基础 你必须了解的网络相关设备和基础概念 1 1
  • Caffe学习之自定义创建新的Layer层

    caffe源码中已经帮我封装好了各种各样的layer 但是有时候现有的layer不能满足设计的网络要求 这个时候需要自己定义一个新的layer 本文参考here 进行简单讲解 具体方式如下 一 创建 hpp文件 1 添加你的layer头文件