caffe添加新层教程
来源:互联网 发布:vnc server使用的端口 编辑:程序博客网 时间:2024/05/21 10:42
说明:本文转自 http://blog.csdn.net/shuzfan/article/details/51322976
时间节点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添加新的层
- 你对ChemOffice Professional 16.0了解多少
- 51单片机的LED与数码管的驱动
- 用了springmvc为何JS,CSS等文件就是访问不到
- JavaScript趣题:深度比较对象
- 封装各种生成唯一性ID算法的工具类
- caffe添加新层教程
- InstallShield2015打包程序在win7下权限问题
- Android Studio之基本Gradle使用
- CSS长度单位:px和pt的区别
- 机器学习-周志华老师新书
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- Android 记住密码和自动登录界面的实现的几篇参考文章
- iOS开发总结-UITableView 自定义cell和动态计算cell的高度
- java学习日记_91:IO流之File文件操作