利用caffe的python接口创建层

这篇是一个汇总的博客:

主要参考:

1)http://wentaoma.com/2016/08/10/caffe-python-common-api-reference/

2)http://blog.csdn.net/c406495762/article/details/70306550

3)https://stackoverflow.com/questions/41344168/what-is-a-python-layer-in-caffe


4)在写Innerproduct层(全连接层)的时候,因为该层定义了两个param{lr_mult:1},因此在python编程环境当中会导致变量冲突

看了如下链接得到解决:https://github.com/gombru/pycaffeCNNTemplate/blob/master/create_net.py


frozen_weight_param = dict(lr_mult=0, decay_mult=0)
frozen_bias_param = dict(lr_mult=0, decay_mult=0)
 
weight_param = dict(lr_mult=1, decay_mult=1)
bias_param = dict(lr_mult=2, decay_mult=0)
 
#Attention to this multipliers
boosted_weight_param = dict(lr_mult=10, decay_mult=1)
boosted_bias_param = dict(lr_mult=20, decay_mult=0)
 
learned_param = [weight_param, bias_param]
boosted_param = [boosted_weight_param, boosted_bias_param]
froozen_param = [frozen_weight_param, frozen_bias_param]

net.ip1 = caffe.layers.InnerProduct(net.train_data,

                                    param=froozen_param,#这里通过定义一个list,来整合到param的字典
                                                                                    num_output=100,

                                    weight_filler=dict(type='xavier'),bias_filler=dict(type='constant'))

将这些变量直接变成list形式


-------------------------------------------------------------------------------------------------

基于pycaffe接口生成《深度学习——caffe之经典模型详解与实战》P297的fk_train.prototxt

这里要进行说明:由于水平有限,不能生成train_val.prototxt,只能分别生成train.prototxt以及val.prototxt,主要原因是:在train以及val的变量当中遇到了同名变量问题:

net.data以及net.label,都表示train以及val文件,导致python当中第二层不能准确识别,因此我把它拆分成了两个文件:train.prototxt以及val.prototxt


import caffe


# from caffe import layers as L
# from caffe import params as P



frozen_weight_param = dict(lr_mult=1)#权重
frozen_bias_param = dict(lr_mult=2)#偏执值
froozen_param = [frozen_weight_param, frozen_bias_param]



def fk_layer():
    net=caffe.NetSpec()
    net.train_data,net.train_label=caffe.layers.HDF5Data(
        ntop=2,#因为是两个输出值:net.train_data,net.train_label,因此需要指定ntop=2
        name='fk-data',#这里指定的是层的名字
        hdf5_data_param={
                            'source': './train.txt',
                            'batch_size': 64
                            },
            include={
                    'phase': caffe.TRAIN
                    })



    # net.val_data,net.val_label=caffe.layers.HDF5Data(
    #     ntop=2,
    #     name='fk-val',
    #     hdf5_data_param={
    #         'source': './val.txt',
    #         'batch_size': 100
    #     },
    #     include={
    #         'phase': caffe.TEST
    #     })
    net.ip1 = caffe.layers.InnerProduct(net.train_data,

                                        param=froozen_param,#这里通过定义一个list,来整合到param的字典,也就是:param=[]
                                        num_output=100,

                                        weight_filler=dict(type='xavier'),bias_filler=dict(type='constant'))

    net.relu1 = caffe.layers.ReLU(net.ip1
                                 ,in_place=True#如果不加这句话或者设置为false,那么该层的bottom是ip1,top是relu;如果加上这句话的话,bottom和top都是ip1
                                  )
    net.ip2=caffe.layers.InnerProduct(net.ip1,param=froozen_param,num_output=30, weight_filler=dict(type='xavier'),bias_filler=dict(type='constant'))
    net.loss=caffe.layers.EuclideanLoss(net.ip2,net.train_label)

    return net.to_proto()

with open('fk_train.prototxt', 'w') as f:
    f.write(str(fk_layer()))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值