Caffe的Layer,Net,Solver概念--mnist例子

来源:互联网 发布:物流软件大全 编辑:程序博客网 时间:2024/06/05 05:22

学Caffe:
1.Data
2.Net Layer
3.Solver
4.Pycaffe
5.Tools

Layer

Layer可以看做一个类,这个类是用c++实现的,这个类中有许多方法,如:
Layersetup
forward_cpu
backword_cpu
forward_gpu
bacward_gpu
不管是数据层,还是卷积层,全连接层,都是这个类的对象。所以如果想用python实现一个自定义的layer的话,需要继承caffe.Layer,实现上面的那些方法:

class CustomLayer(caffe.Layer):    def setup(self,bottom,top):        params = eval(self.param_str)        pass    def forward(self,bottom,top):        pass    def backward(self,top,propagate_down,bottom):        pass

Net & Solver

Net 可以看做是一堆layer的组合,Solver是迭代算法

solver = caffe.SGDSolver("")#在python中通过SGDSolver读取配置文件,生成solver对象Solver = caffe.get_solver("")solver.step(num)#迭代次数solver.solve()#命令行敲train实际上就是调用solver.solve()solver.net #成员变量,从solver中拿到训练用的netSolver.test_nets[0]#从solver中拿到测试用的net,测试用的net有多个,一般调用第一个Solver.net.forward()#调用net的forward过程
solver.net.blobs['data']#blobs是caffe自定义的一种数据结构,相当于一个字典solver.net.blobs['ip1']solver.net.blobs['ip1'].data#j节点数据solver.net.blobs['ip1'].diff#误差传播,微分项solver.net.params['ip1'][0],[1]#【0】代表权值和【1】代表偏置solver.net.params['ip1'][0].datasolver.net.params['ip1'][0].diff

DummyData
在 /caffe/src/caffe/proto可以看到每一个参数有哪些选项

Layer{    name:'data'    type:'DummyData'    top:'data'    dummy_data_param{        shape:{dim:10 dim:1 dim:28 dim:28}        data_fillter:{type:'gaussian'}    }}

ImageData

Layer{ name:'data' type:'ImageData' top:'data' top:'label' image_data_param{     source:"xxx"     batch_size:200     new_height:28     new_width:28 }}
原创粉丝点击