您的位置:首页 > 其它

NearestNeighnor 实现cifar-10图像分类

2016-12-01 14:49 495 查看
import numpy as np
class NearestNeighnor(object):
def __init__(self):
pass

def train(self,X,y):
self.Xtr=X
self.ytr=y

def predict(self,X):
num_test=X.shape[0]
Ypred=np.zeros(num_test,dtype=self.ytr.dtype)
for i in xrange(num_test):
# distances=np.sum(np.abs(self.Xtr-X[i,:]),axis=1)
distances=np.sqrt(np.sum(np.square(self.Xtr-X[i,:]),axis=1))
min_index=np.argmin(distances)
Ypred[i]=self.ytr[min_index]
return  Ypred

import numpy as np
from NearestNeighnor import NearestNeighnor
def unpickle(file):
import cPickle
fo=open(file,'rb')
dict=cPickle.load(fo)
fo.close()
return dict
dataTrain=[]
labelTrain=[]
for i in range(1,6):
dic=unpickle("data\cifar-10-batches-py\data_batch_"+str(i))
for item in dic["data"]:
dataTrain.append(item)
for item in dic["labels"]:
labelTrain.append(item)

dataTest=[]
labelTest=[]
dic=unpickle("data\cifar-10-batches-py\\test_batch")
for item in dic["data"]:
dataTest.append(item)
for item in dic["labels"]:
labelTest.append(item)

dataTr=np.asarray(dataTrain)
dataTs=np.asarray(dataTest)
labelTr=np.asarray(labelTrain)
labelTs=np.asarray(labelTest)
print dataTr.shape

nn=NearestNeighnor()
nn.train(dataTr,labelTr)
Yte_predict=nn.predict(dataTs)
print 'accuracy:%f'%(np.mean(Yte_predict==labelTs))




正确率很低,只有25%左右,NN不适合做图像分类

(1)在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle – A faster pickle”。

cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。

2. load:载入本地文件,恢复python对象

3. 学习借鉴:pickle 及cpikle

http://blog.csdn.net/yucan1001/article/details/8478755
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: