CNN 学习系列之 perdict 以及可视化

在完成training 之后,我们要看下train 的model 的效果如何。所以我们可以把perdict 的结果画出来,这些效果会比较容易看。

但是由于caffe原来的c++ 接口都是通过命令行来看的,它的结果不是很直观,所以我们有下列几种方法来改进:
1. 可以修改train_val.prototxt 文件中的layer。 通过添加一个accuracy layer:

layer {
  name: "loss3/top-1"
  type: "Accuracy"
  bottom: "fc8_classifier"
  bottom: "label"
  top: "loss3/top-1"
  include {
    phase: TRAIN
  }
}

这样我们可以通过在命令行print accuracy 的方法来看我们每次迭代之后的模型在训练集上的正确率。
之后我们可以用同样的方法来对测试集进行操作,这样就可以得到我们的模型在测试集上面的正确率了。
这种方法虽然比较简单,但是如果我们想要保存我们的预测结果的话,就没办法做到了。
2. 所以我们可以使用caffe 的python接口,写一个脚本来解决这个问题。直接上代码会比较直观:

#!/usr/bin/python
import numpy as np
import matplotlib.pyplot as plt
caffe_root = '/Users/apple/Desktop/caffe'
import sys
sys.path.insert(0, caffe_root + 'python')
import caffe
# caffe 的python接口默认是在caffe的python文件夹下的,所以这里要先进入到它的python文件夹中。
from scipy.ndimage import imread
caffe.set_mode_gpu()

#这里是deploy.prototxt 文件的路径
model_def = '/path/to/deploy.prototxt'
#这里是训练好的caffemodel 的文件路径
model_weights = '/path/to/*.caffemodel'
net = caffe.Net(model_def,
                model_weights,
                caffe.TEST)

mu = np.load('/Users/apple/Desktop/my_mean.npy')
mu = mu.mean(1).mean(1)

transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})
transformer.set_transpose('data',(2,0,1))
transformer.set_mean('data', mu)
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2,1,0))

file = open('/path/to/input_of_your_testdata', 'r')
file1 = open('/path/to/output/', 'w')
all_lines = file.readlines()
image_file = []
Id = 0
for line in all_lines:
    d = line.split('\n')
    image_file = "/Users/apple/Desktop/hw3/testImages/"+d[0]
    image = caffe.io.load_image(image_file)
    transformed_image = transformer.preprocess('data', image)

#以上是获得测试集图片的路径名并读入数据

    net.blobs['data'].data[...] = transformed_image
    output = net.forward()
    output_prob = output['prob'][0]
#   print 'predicted class is:', output_prob.argmax()
    Ss = d[0] + "," + str(output_prob.argmax()) + "\n"
    print Ss
    file1.write(Ss)
# 以上是对数据进行预测并且输出

这样通过pycaffe 我们可以比较主动的控制预测的结果并且把它修改成我们需要的格式或者进行其他额外的处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值