pycaffe 常用API记录

Classification:Instant Recognition with caffe

对官方的教程进行一些解释

    import caffe#导入caffe模块
    caffe.set_mode_cpu()#设置cpu模式

    #通过模型文件复原网络
    net=caffe.Net(model_def,#prototext文件地址
                  model_weights,#caffemodel文件地址
                  caffe.TEST)#使用TEST模式

    #读取mean.npy文件
    import numpy as np
    mu=np.load(file)
    mu.mean(1).mean(1)#得到每个channel的平均像素值BGR
    print 'mean-subtracted values:',zip('BGR',mu)

    #通过使用caffe.io模块,对已知图像进行预处理
    #首先实例化一个transform对象,使用data层的输入数据shape作为初始化参数
    transformer=caffe.io.Transformer({'data': net.blobs['data'].data.shape})
    transformer.set_transpose('data',(2,0,1))#227x227x3->3x227x227
    transformer.set_mean('data',mu)
    transformer.set_raw_scale('data',255)
    transformer.set_channel_swap('data',(2,1,0))#和set_transpose()注意区别
    #对输入图像进行预处理
    #首先设置大小
    net.blobs['data'].reshape(50,3,227,227)
    image=caffe.io.load_image(file)#载入图像
    transformed_image=transformer.preprocess('data',image)#!!!关键调用
    plt.imshow(image)

    #执行分类
    #首先向data层装入图像
    net.blobs['data'].data[...]=transfarmed_image
    #执行前向运算
    output=net.forward()
    #挑选出batch中对应于第一幅图像的预测结果
    output_prob=output['prob'][0]#'prob'为输出层名
    print 'predicted class is: ',output_prob.argmax()

    #输出每层的名字和数据形状
    for layer_name,blob in net.blobs.iteritems():
        print layer_name+'\t'+str(blob.data.shape)
    #输出每层层名和参数形状,param[0] for weights, param[1] for biases
    for layer_name,param in net.params.iteritems():
        print layer_name+'\t'+str(param[0].data.shape,str(param[1].data.shape)
    #该教程后面还有一些集中显示每一层输出的函数,可以了解了解

你可能感兴趣的:(caffe教程,caffe)