caffe添加新的层

caffe添加新的神经层

第一步:
创建新定义的头文件include/caffe/layers/my_neuron_layer.hpp

可以参考其他层的框架头文件等,继承神经层这个类

重新Layer名的方法:virtual inline const char* type() const{return "MyNeuron";}

如果只是需要cpu方法的话,可以注释掉forward_gpu()和backward_gpu()这两个方法

第二步:

创建对应src/caffe/src/my_neuron_layer.cpp的源文件

可以参考其他层的框架头文件等

重写方法LayerSetUp,实现能从prototxt读取参数,如果不需要读取参数则可以不重写

重写方法Reshape,如果对继承类没有修改的话,可以不用重写

重写方法Forward_cpu;caffe中自带有一些数学运算的函数。caffe中计算是矩阵运算

重写方法Backward_cpu(非必须)

如果要GPU支持,则需要创建src/caffe/src/my_neuron_layer.cu。同理重写方法

Forward_gpu/Backward_gpu(非必须)

第三步:

在proto/caffe.proto中注册新的Layer

message LayerParameter{

...

++optional MyNeuronParameter

mysquare_param=150;不能重复的标志号

...

}

...

++message MyNeuronParameter{

++optional float power =1{default=2};layer中的参数

++

}

...

message V1LayerParameter{

...

++MYNEURON=40;增加一个参数的设置

...

}

第四步myneuron_layer.cpp添加注册的宏定义

INSTANTIATE_CLASS(MyNeuronLayer);

REGISTER_LAYER_CLASS(MyNeuron);

如果有my_neuron_layer.cu,则添加

INSTANTIATE_LAYER_GPU_FUNCS(MyNeuronLayer);

第五步

重新编译caffe

第六步测试

可以写一个只有输入层和自定义层的prototxt

然后测试一下

测试程序如下:

import numpy as np
import matplotlib.pyplot as plt
import os 
import sys
import caffe

deploy_file="./deploy.prototxt"
test_data="5,jpg"
if __name__ ='__main__':
    net = caffe.Net(deploy_file,caffe.TEST)
    transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})
    transformer.set_transpose('data',(2,0,3))
    img= caffe.io.load_image(test_data,color=False)
    net.blobs['data'].data[...]=transformer.preprocess('data',img)
    print net.blobs['data'].data
    out = net.forward()
    print out['data_out']

 

其他:

自定义数据层

1、创建新定义的头文件include/caffe/layers/my_data_layer.hpp

重新Layer名的方法:virtual inline const char* type() const {return "MyData";}

2、重写LayerSetup,ShuffleImage,load_batch

3、proto/caffe.proto注册新得Layer

//my new data parameter

optional MyDataParameter my_data_param = 50

//my new data layer for infer image data

optional MyDataPatameter my_data_param=150

...

message MyDataParameter{

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值