Caffe 学习笔记(8): 生成 deploy 文件

引言

如果要把训练好的模型拿来测试新的图片,那么必须要一个 depoly.prototxt 文件,这个文件实际上和 test.prototxt 文件差不多,只是头尾不相同而已。 deploy 文件没有第一层的数据输入层,也没有最后的 accuracy 层,但最后多一个 softmax 概率层。

python代码生成 deploy 文件:(以 mnist 为例)

from caffe import layers as L,params as P,to_proto
root='/home/xxx/'
deploy=root+'mnist/deploy.prototxt'    #文件保存路径

def create_deploy():
    #少了第一层,data层
    conv1=L.Convolution(bottom='data', kernel_size=5, stride=1,num_output=20, pad=0,weight_filler=dict(type='xavier'))
    pool1=L.Pooling(conv1, pool=P.Pooling.MAX, kernel_size=2, stride=2)
    conv2=L.Convolution(pool1, kernel_size=5, stride=1,num_output=50, pad=0,weight_filler=dict(type='xavier'))
    pool2=L.Pooling(conv2, pool=P.Pooling.MAX, kernel_size=2, stride=2)
    fc3=L.InnerProduct(pool2, num_output=500,weight_filler=dict(type='xavier'))
    relu3=L.ReLU(fc3, in_place=True)
    fc4 = L.InnerProduct(relu3, num_output=10,weight_filler=dict(type='xavier'))
    #最后没有accuracy层,但有一个Softmax层
    prob=L.Softmax(fc4)
    return to_proto(prob)
def write_deploy(): 
    with open(deploy, 'w') as f:
        f.write('name:"Lenet"\n')
        f.write('input:"data"\n')
        f.write('input_dim:1\n')
        f.write('input_dim:3\n')
        f.write('input_dim:28\n')
        f.write('input_dim:28\n')
        f.write(str(create_deploy()))
if __name__ == '__main__':
    write_deploy()

运行该文件后,会在mnist 目录下,生成一个 deploy.prototxt 文件。

这个文件不推荐用代码来生成,反而麻烦,大家在熟悉 prototxt 文件后可以将 test.prototxt 复制一份,修改相应的部分即可,相比较而言更加方便。

 

你可能感兴趣的:(Caffe)