caffe实现自己的层
http://blog.csdn.net/xizero00/article/details/52529341
将这篇博客所讲进行了实现
1.LayerParameter也在caffe.proto文件中
2.头文件直接复制博客的,命名为image_scale_layer.hpp,然后放在caffe/include/caffe/layers下
3.实现文件也是直接复制博客的,命名为image_scale_layer.cpp,放在caffe/src/caffe/layers下
4.制作minist的lmdb数据,放在examples/mnist下,这个部分另一篇博客已经总结
5.在examples目录下创建文件夹imagescale,复制博客中网络的prototxt,并放在这个目录下
6.复制博客中solver的prototxt,放在examples/imagescale目录下
7.复制博客的bash文件,放在caffe目录下。然后运行这个bash文件就完成
按照博客的流程, 最后在运行shell脚本时出现了错误:
我的solver的确在那个目录下,我也不知道为何会报这个错误。之后我将脚本的命令直接输入在终端,即:
./build/tools/caffe train --solver=examples/imagescale/solver.prototxt
会出现以下错误
这时我反应过来应该是我没有生成mnist_train_lmdb这个文件,按照之前博客的方式生成之后再执行这个命令就正确了。但执行那个脚本还是报一样的错误。
之前我按照上一个博客的命令sudo sh ./examples/mnist/create_mnist.sh 生成mnist_train_lmdb,会报下面的错误:
因为我是远程访问的服务器,所以会造成现在这种permission denied的情况
总结整个流程:1.实现自己层的.hpp文件,并放在include/caffe/layers目录下
2.实现自己层的.cpp或.cu,并放在src/caffe/layers目录下。注意:
需要在.cpp添加注册的宏定义:1.INSTANTIATE_CLASS(MyNeuronLayer);
2.REGISTER_LAYER_CLASS(MyNeuron);
如果有my_neuron_layer.cu,则添加:INSTANTIATE_LAYER_GPU_FUNCS(MyNeuronLayer);
都是在cpp的末尾加
如果不加,会报以下错误:
3.修改src/caffe/proto/caffe.proto文件,这个文件要修改两个地方:在LayerParameter加ID号,添加实现类所需要的参数。这样你在编写 train.prototxt 或者 test.prototxt 或者 deploy.prototxt 时就能把新 Layer 的描述写进去,便于修改网络结构和替换其他相同功能的 Layer 了
4.编译
5.你还可以在src/caffe/test/中增加layer的测试代码,对所写的layer前传和反传进行测试,就像另一篇自己写的博客caffe单独测试添加的layer,但写测试代码
有点麻烦
http://www.cnblogs.com/zf-blog/p/6551278.html
中间写的过程怎么知道自己写的正确不正确,怎么去debug是我需要继续思考的
caffe实现自己的层的更多相关文章
- caffe添加python数据层
caffe添加python数据层(ImageData) 在caffe中添加自定义层时,必须要实现这四个函数,在C++中是(LayerSetUp,Reshape,Forward_cpu,Backward ...
- caffe之(五)loss层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- caffe之(二)pooling层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- (原)torch和caffe中的BatchNorm层
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6015990.html BatchNorm具体网上搜索. caffe中batchNorm层是通过Batc ...
- caffe源码 卷积层
通俗易懂理解卷积 图示理解神经网络的卷积 input: 3 * 5 * 5 (c * h * w) pading: 1 步长: 2 卷积核: 2 * 3 * 3 * 3 ( n * c * k * k ...
- caffe win添加新层
1.编写.h和.cpp .cu文件 将.hpp文件放到路径caffe-windows\caffe-master\include\caffe\layers下 将.cpp文件和.cu放到路径caffe-w ...
- caffe 中 python 数据层
caffe中大多数层用C++写成. 但是对于自己数据的输入要写对应的输入层,比如你要去图像中的一部分,不能用LMDB,或者你的label 需要特殊的标记. 这时候就需要用python 写一个输入层. ...
- 【撸码caffe 五】数据层搭建
caffe.cpp中的train函数内声明了一个类型为Solver类的智能指针solver: // Train / Finetune a model. int train() { -- shared_ ...
- caffe(5) 其他常用层及参数
本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置. 1.softmax-loss so ...
随机推荐
- 数据库sqlite3的使用-ios中引用方法
一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二.具体说明 新建一个项目,在项目的主界面 ...
- django flask缓存memcache的key生成方法介绍
去年的一个django项目中,使用了memcache作为系统缓存,并实现多台机器上的缓存共享.配置的cache如下图所示: 最近在项目调试过程中,发现memcache在进行缓存时,使用的key并不是实 ...
- Pimple研究及PHP框架搭建
此文参考PHP容器--Pimple运行流程浅析 和 利用 Composer 一步一步构建自己的 PHP 框架,如有不清楚的,请参考原文. Pimple貌似在PHP社区里非常流行,听闻是个非常轻量化并且 ...
- Android SDK更新以及ADT更新出现问题的解决办法(转载)
转自:http://zyueqi.iteye.com/blog/1474323 问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl. ...
- 鸭子类型(Duck Typing)
鸭子类型(Duck Typing) 动态类型.没有类型检验.不关注类型,关注方法 相当于静态类型语言的多态 这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如PHP.Python.Ruby ...
- 景女神与她的托福(BFS+状压)
景女神与她的托福 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submis ...
- 微信小程序中如何使用setData --- 修改数组对象、修改对象
看代码吧~ 这是修改对象 this.setData({ allStageIndex: e.detail.value, [`projectDetailsData.stage`]: this.data.a ...
- MongoDB集群跨网络、跨集群同步方案
MongoDB集群跨网络.跨集群数据同步有以下几个方案,此处只是简单介绍,不过详细描述. 1.MongoDB自带的复制方案 优点:实施简单,不需要额外的技术栈 缺点:网络双向可连通. 2.CDC同步方 ...
- 【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解
01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(co ...
- Go 连接PostgreSQL数据库
先在PostgreSQL数据库中建一个表,可以使用PostgreSQL官方的pgAdmin来完成: CREATE TABLE userinfo ( uid serial NOT NULL, usern ...