Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
X2Paddle
提交
aebd40bc
X
X2Paddle
项目概览
PaddlePaddle
/
X2Paddle
大约 1 年 前同步成功
通知
328
Star
698
Fork
167
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
26
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
X2Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
26
Issue
26
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
aebd40bc
编写于
8月 09, 2019
作者:
S
SunAhong1993
提交者:
GitHub
8月 09, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create add_caffe_custom_layer.md
上级
7bd948a1
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
57 addition
and
0 deletion
+57
-0
add_caffe_custom_layer.md
add_caffe_custom_layer.md
+57
-0
未找到文件。
add_caffe_custom_layer.md
0 → 100644
浏览文件 @
aebd40bc
## 如何转换Caffe自定义Layer
本文档介绍如何将Caffe自定义Layer转换为PaddlePaddle模型中对应的实现, 用户可根据自己需要,添加代码实现自定义层,从而支持模型的完整转换。
***步骤一 编译caffe.proto**
*
使用脚本./tools/compile.sh将caffe.proto(包含所需的包含自定义Layer信息)编译成我们所需的目标语言(Python)
使用方式:
```
bash ./toos/compile.sh /home/root/caffe/src/caffe/proto
# /home/root/caffe/src/caffe/proto为caffe.proto的存放路径,生成的caffe_pb2.py也将保存在该路径下
```
***步骤二 添加自定义Layer的实现代码**
*
-
进入./x2paddle/op_mapper/caffe_custom_layer,创建实现代码的文件,例如mylayer.py
-
仿照./x2paddle/op_mapper/caffe_custom_layer中的其他文件,在mylayer.py中主要实现3个函数:
1.
`def mylayer_shape(input_shape, ...)`
| 参数 | 类型 | 说明 |
| :---------: | :--: | :---------: |
| input_shape | list | 每个元素代表该层每个输入数据的shape |
| 其余 | 默认为None | 命名为Caffe模型的model.prototxt中mylayer_param中每个参数的名字 |
功能:计算出mylayer的输出shape
返回:一个list,其中每个元素代表每个输出数据的shape
2.
`def mylayer_layer(inputs, input_shape=None, name=None, ...)`
| 参数 | 类型 | 说明 |
| :---------: | :--: | :---------: |
| inputs | list | 每个元素代表该层每个输入数据 |
| input_shape | list(默认为None) | 每个元素代表该层每个输入数据的shape |
| name | str(默认为None) | mylayer的名字 |
| 其余 | 默认为None | 命名为Caffe模型的model.prototxt中mylayer_param中每个参数的名字 |
功能:运用PaddlePaddle完成组网来实现
`mylayer`
的功能
返回:一个Variable或Tensor,为组网后的结果
3.
`def mylayer_weights(name, data=None)`
| 参数 | 类型 | 说明 |
| :---------: | :--: | :---------: |
| name | str | mylayer的名字 |
| data | list(默认为None) | 由Caffe模型的model.caffemodel获得的关于mylayer的参数 |
功能:为每个参数(例如kernel、bias等)命名;同时,若Caffe中该层参数与PaddlePaddle中参数的格式不一致,则需要的变换操作也在该函数中实现。
返回:一个list,包含每个参数的名字。
-
在mylayer.py中注册
`mylayer`
,主要运用下述代码实现:
```
register(kind='Mylayer', shape=mylayer_shape, layer=mylayer_layer, weights=mylayer_weights)
# kind为在model.prototxt中mylayer的type
```
-
在./x2paddle/op_mapper/caffe_custom_layer/
\_\_
init
\_\_
.py中引入该层的使用
```
from . import mylayer
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录