caffe添加新层教程
来源:互联网 发布:棕色牛津鞋搭配 知乎 编辑:程序博客网 时间:2024/05/18 03:35
时间节点2016.04,即caffe重大更新后(每一种层都对应一个同名cpp和hpp文件)。
描述一下本次要实现层的功能:
正向直接copy传播,反向时将梯度放缩指定倍。
这个层对一些特定的网络结构有很重要的辅助作用,比如有时我们的网络存在分支,但我们不希望某一分支影响之前层的更新,那么我们就将梯度放缩0倍。
(1)创建HPP头文件diff_cutoff_layer.hpp
不同功能类型的层所引的头文件也不同,具体大家可以到“caffe/include/caffe/layers”目录下找相似的现成的文件参考 。我们这次写的hpp文件最后也要放在这个目录下。
注意:下面注释包起来的部分为需要注意的部分。
特别注意:命名的时候应严格一致和注意大小写,这一点是导致很多人加层失败的主要原因。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
(2)创建diff_cutoff_layer.cpp文件
CPP文件应当位于src/caffe/layers下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
(3)修改src\caffe\proto\caffe.proto文件
这里我们要为我们新写的层添加参数和消息函数。
【1】由于我们的层有一个diff_scale参数,因此我们首先应该在message LayerParameter {}中添加新参数信息。添加信息时,首先要制定一个唯一ID,这个ID的可选值可以由这句话看出:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
由上图可以看出,可选的ID为143。
于是我们就可以添加这样一行:
- 1
- 1
【2】在任意位置添加消息函数
- 1
- 2
- 3
- 1
- 2
- 3
【3】 在message V1LayerParameter {}中添加以下内容
在enum LayerType {}中添加唯一ID,只要在这里不重复即可。
- 1
- 1
外面接着添加,同样ID也是只要不重复即可
- 1
- 1
【4】 在message V0LayerParameter {}添加参数定义
- 1
- 1
(4)最后重新编译caffe即可
使用方法举例如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(5)忠告与建议
(1)一定要注意大小写、一定要注意大小写、一定要注意大小写
(2)不会写、不确定,就去找caffe现有的层来参考模仿
(3)caffe数据操作的函数定义在src/caffe/util/math_functions.cpp,
大家也可以参考这位同学的博客
http://blog.csdn.net/seven_first/article/details/47378697
- caffe添加新层教程
- caffe添加新层教程
- caffe添加新层教程
- caffe添加新层教程
- caffe添加新层教程
- Caffe源码中添加新层 详细教程
- windows-caffe添加新层
- caffe添加新层windows
- caffe 添加一个新层
- Caffe-Windows添加新层
- caffe中添加新层
- caffe添加一个新层
- caffe添加新的层
- caffe添加新层windows
- caffe添加新层windows
- 在caffe中添加新的层
- caffe 添加新的网络层
- 为caffe添加新的层
- Android7.0中文文档(API)--- TabHost
- openstack-network-instances
- django中出现莫名其妙奇妙的错误,发现是python版本的问题
- python中序列、列表的使用
- Spark integration ElasticSearch
- caffe添加新层教程
- opencv在输出不同文件格式输出的时候文件空间的大小不一样
- cmake学习
- C#控制格式符
- eclipse关闭Updating Error Reporting Database
- PHPCMS V9两步实现修改后台管理登陆路径方法分享
- SSD:Single Shot MultiBox Detector 详解
- Devops 前途无量
- spring基于java config的支持方法级别的参数校验