基于pycaffe从零开始写mnist(第三篇)——生成deploy.prototxt,做最后的验证

deploy.prototxt和之前的train.prototxt文件内容差不多,因此可以不需要用代码进行生成,直接将不一样的地方进行修改即可

下面是用代码生成的deploy.prototxt

# -*- coding: utf-8 -*-
__author__ = 'xuy'


import caffe

def creat_deploy():
    net = caffe.NetSpec()
    net.conv1 = caffe.layers.Convolution(bottom = 'data', kernel_size = 5, num_output = 20,
                                         weight_filler = dict(type = 'xavier'))
    net.pool1 = caffe.layers.Pooling(net.conv1, kernel_size = 2, stride = 2,
                                     pool = caffe.params.Pooling.MAX)
    net.conv2 = caffe.layers.Convolution(net.pool1, kernel_size = 5, num_output = 50,
                                         weight_filler = dict(type = 'xavier'))
    net.pool2 = caffe.layers.Pooling(net.conv2, kernel_size = 2, stride = 2,
                                     pool = caffe.params.Pooling.MAX)
    net.fc1 =   caffe.layers.InnerProduct(net.pool2, num_output = 500,
                                          weight_filler = dict(type = 'xavier'))
    net.relu1 = caffe.layers.ReLU(net.fc1, in_place = True)
    net.score = caffe.layers.InnerProduct(net.relu1, num_output = 10,
                                          weight_filler = dict(type = 'xavier'))
    net.prob = caffe.layers.Softmax(net.score)
    return net.to_proto()

def write_net(deploy_proto):
    #写入deploy.prototxt文件
    with open(deploy_proto, 'w') as f:
        #写入第一层数据描述
        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(creat_deploy()))

if __name__ == '__main__':
     my_project_root = "/home/xuy/桌面/code/python/caffe/python_mnist/"    #my-caffe-project目录
     deploy_proto = my_project_root + "mnist/deploy.prototxt"
     write_net(deploy_proto)


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

最后对于训练的模型caffemodel进行预测,随机找出测试集当中的一张图片进行测试


# -*- coding: utf-8 -*-
__author__ = 'xuy'

'''

labels_filename的作用是:将数字标签转换回类别名称

'''

import caffe
import os
import numpy as np


# Caffe_root='/home/xuy/caffe-master'
# os.chdir(Caffe_root)#将当前的路径换成了~/caffe

def test(my_project_root, deploy_proto):#对于已经训练好的caffemodel进行测试
    caffe_model = my_project_root + 'mnist_iter_9380.caffemodel'        #caffe_model文件的位置
    img = my_project_root + 'mnist/test/8/00542.png'                    #随机找的一张待测图片
    labels_filename = my_project_root + 'mnist/test/labels.txt'            #类别名称文件,将数字标签转换回类别名称

    net = caffe.Net(deploy_proto, caffe_model, caffe.TEST)                #加载model和deploy

    #图片预处理设置
    transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})  #设定图片的shape格式(1,3,28,28)
    transformer.set_transpose('data', (2,0,1))                            #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28)
    transformer.set_raw_scale('data', 255)                                # 缩放到【0,255】之间
    transformer.set_channel_swap('data', (2,1,0))                       #交换通道,将图片由RGB变为BGR

    im = caffe.io.load_image(img)                                       #加载测试图片
    net.blobs['data'].data[...] = transformer.preprocess('data',im)     #执行上面设置的图片预处理操作,也就是上面四步:1)设定图片格式2)改变维度顺序3)缩放到【0,255】之间4)换颜色通道:RGB->BGR,并将图片载入到blob中

    out = net.forward()                                                    #执行测试,对于deploy.prototxt进行前向传播测试

    labels = np.loadtxt(labels_filename, str, delimiter='\t')           #读取类别名称文件当中的所有labels内容
    prob = net.blobs['prob'].data[0].flatten()                             #取出最后一层(Softmax)属于某个类别的概率值
    # print net.blobs['prob'].data
    order = prob.argsort()[-1]                                          #将概率值排序,取出最大值所在的序号
    print '图片数字为:',labels[order]                                   #将该序号转换成对应的类别名称,并打印

if __name__ == '__main__':
    my_project_root = "/home/xuy/桌面/code/python/caffe/python_mnist/"    #my-caffe-project目录
    deploy_proto = my_project_root + "mnist/deploy.prototxt"            #保存deploy.prototxt文件的位置
    test(my_project_root, deploy_proto)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值