KNN实现CIFAR-10数据集识别

cs231n链接:http://cs231n.github.io/linear-classify/,

训练集链接:https://download.csdn.net/download/fanzonghao/10592049

KNN缺点:每个测试样本都要循环一遍训练样本。

该数据集由5个data_batch和一个test_batch构成,测试代码

import pickle
import numpy as np
fo=open('./datasets/cifar-10-batches-py/data_batch_1','rb')
dict=pickle.load(fo,encoding='bytes')
print(dict)
print(dict[b'data'].shape)print(dict[b'labels'])
print(len(dict[b'labels']))print(dict[b'filenames'])
print(len(dict[b'filenames']))
fo.close()

可看出,一个data_batch由10000个,32×32×3大小的图片组成,5个就是50000个,test_batch也是10000张,故有50000张训练样本,10000张测试样本。

将5个训练集合成一个代码如下:

import pickle
import numpy as np"""
解压数据集
"""
def unpickle(file):fo=open(file,'rb')dict=pickle.load(fo,encoding='bytes')fo.close()return dict
"""
5个data_batch和1个test_batch合成一个
"""
def load_cifar10(file):data_train = []label_train=[]#融合训练集for i in range(1,6):dic=unpickle(file+'data_batch_'+str(i))for i_data in dic[b'data']:data_train.append(i_data)for i_label in dic[b'labels']:label_train.append(i_label)# print(np.array(data_train).shape)# print(np.array(label_train).shape)# 融合测试集data_test=[]label_test=[]dic = unpickle(file + 'test_batch')for i_data in dic[b'data']:data_test.append(i_data)for i_label in dic[b'labels']:label_test.append(i_label)# print(np.array(data_test).shape)# print(np.array(label_test).shape)return (np.array(data_train),np.array(label_train),np.array(data_test),np.array(label_test))
path='./datasets/cifar-10-batches-py/'
# #(50000,3072) (50000,) (10000,3072) (10000,)
(data_train,label_train,data_test,label_test)=load_cifar10(path)
print(data_train.shape)
print(label_train.shape)
print(label_train[:10])
print(data_test.shape)
print(label_test.shape)

KNN代码:

import numpy as np
import pickle
"""
程序功能:k近邻实现cifar10上的样本分类 精度低 测试时间长
"""
#输入训练集和测试集
#解压数据集
def unpickle(file):fo=open(file,'rb')dict=pickle.load(fo,encoding='bytes')print(dict)fo.close()return dict
#融合训练集和测试集作为输出总样本
def load_cifar10(file):data_train = []label_train=[]#融合训练集for i in range(1,6):dic=unpickle(file+'data_batch_'+str(i))for i_data in dic[b'data']:data_train.append(i_data)for i_label in dic[b'labels']:label_train.append(i_label)# print(np.array(data_train).shape)# print(np.array(label_train).shape)# 融合测试集data_test=[]label_test=[]dic = unpickle(file + 'test_batch')for i_data in dic[b'data']:data_test.append(i_data)for i_label in dic[b'labels']:label_test.append(i_label)# print(np.array(data_test).shape)# print(np.array(label_test).shape)return (np.array(data_train),np.array(label_train),np.array(data_test),np.array(label_test))
path='./datasets/cifar-10-batches-py/'
#(50000,3072) (50000,) (10000,3072) (10000,)
(data_train,label_train,data_test,label_test)=load_cifar10(path)
#print(label_train)
print(data_train.shape,label_train.shape,data_test.shape,label_test.shape)
#print(data_test.shape[0])"""
实现最近邻的预测
"""
class NearestNeighbor:def __init__(self):passdef train(self,X,y):self.Xtr=Xself.ytr=ydef predict(self,X):num_test=X.shape[0]self.X=XY_pred=np.zeros(num_test,dtype=self.ytr.dtype)for i in range(num_test):distances=np.sum(np.abs(self.Xtr-self.X[i,:]),axis=1)#distances=np.sqrt(np.sum(np.square(self.Xtr-self.X[i,:]),axis=1))min_index=np.argmin(distances)Y_pred[i]=self.ytr[min_index]if i%100==0:print('运行到{}步'.format(i))return Y_pred
nn=NearestNeighbor()
nn.train(data_train,label_train)
Y_pred=nn.predict(data_test)
accuarcy=np.mean(label_test==Y_pred)
print('accuarcy={}'.format(accuarcy))

打印结果:精度不高,后面引入神经网络

 

SVM损失函数:

loss.py

import numpy as np
"""
程序功能:利用SVM代价函数实现损失值的积累
"""
def L(X,y,W):#X [3073,50000]#y 一维(50000,)#W [10,3073]delta=1.0scores=np.dot(W,X)#print(y)#对应训练样本的输出y#print(scores[y, np.arange(scores.shape[1])])#(10,50000)#SVM函数margins=np.maximum(0,scores-scores[y, np.arange(scores.shape[1])]+delta)#print('margins.shape={}'.format(margins.shape))margins[y,np.arange(scores.shape[1])]=0loss=np.mean(margins)return loss

optimizer_grand.py

import numpy as np
import pickle
import loss
"""
函数功能:利用随机搜索和局部随机搜索来获取W和b采用SVM损失函数 获取最佳的W和b
"""
#输入训练集和测试集
#解压数据集
def unpickle(file):fo=open(file,'rb')dict=pickle.load(fo,encoding='bytes')fo.close()return dict
#融合训练集和测试集作为输出总样本
def load_cifar10(file):data_train = []label_train=[]#融合训练集for i in range(1,6):dic=unpickle(file+'data_batch_'+str(i))for i_data in dic[b'data']:data_train.append(i_data)for i_label in dic[b'labels']:label_train.append(i_label)# print(np.array(data_train).shape)# print(np.array(label_train).shape)# 融合测试集data_test=[]label_test=[]dic = unpickle(file + 'test_batch')for i_data in dic[b'data']:data_test.append(i_data)for i_label in dic[b'labels']:label_test.append(i_label)# print(np.array(data_test).shape)# print(np.array(label_test).shape)return (np.array(data_train),np.array(label_train),np.array(data_test),np.array(label_test))
path='./datasets/cifar-10-batches-py/'
#(50000,3072) (50000,) (10000,3072) (10000,)
(data_train,label_train,data_test,label_test)=load_cifar10(path)
#print(label_train)
print(data_train.shape,label_train.shape,data_test.shape,label_test.shape)
#(3072,50000)
train_data=np.transpose(data_train)
#增加一行 处理偏置值
bias=np.ones((1,train_data.shape[1]))
#(3073,50000)
train_data=np.vstack((train_data,bias))
print(train_data.shape)
#随机选择最佳的权值 输出最佳的W
def random_search():bestloss=float('inf')for number in range(1000):# 随机搜索  权值随机更新 选出比较好的W = np.random.randn(10, 3073) * 0.0001# 计算损失值lost = loss.L(train_data, label_train, W)if lost<bestloss:bestloss=lostbestW=Wif number%100==0:print('number={},the lost={},bestloss={}'.format(number,lost,bestloss))return bestW
#调用随机产生的最佳权值产生预测值与标签值算精确度
def random_search_accu():bestW=random_search()#(10,50000)scores=np.dot(bestW,train_data)#找出每列分数最大值的索引Y_predict=np.argmax(scores,axis=0)accurarcy=np.mean(Y_predict==label_train)print('accurarcy={}'.format(accurarcy))
def random_local_search():W = np.random.randn(10, 3073) * 0.001bestloss=float('inf')for number in range(1000):# 随机搜索  权值随机更新 选出比较好的step_size=0.0001W_try=W+np.random.randn(10, 3073) * step_size# 计算损失值lost = loss.L(train_data, label_train, W_try)if lost<bestloss:bestloss=lostbestW=W_tryif number%100==0:print('number={},the lost={},bestloss={}'.format(number,lost,bestloss))return bestW
#调用随机产生的最佳权值产生预测值与标签值算精确度
def random_local_search_accu():bestW=random_local_search()#(10,50000)scores=np.dot(bestW,train_data)#找出每列分数最大值的索引Y_predict=np.argmax(scores,axis=0)accurarcy=np.mean(Y_predict==label_train)print('accurarcy={}'.format(accurarcy))
if __name__ == '__main__':#随机搜索# random_search_accu()#局部随机搜索random_local_search_accu()#梯度跟随

随机最佳权重的打印结果:

在迭代过程中,权重还变化的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

近期苹果、Facebook等科技巨头股价缘何不断下跌?

来源&#xff1a;资本实验室近期&#xff0c;FAANG(Facebook、亚马逊、苹果、Netflix、谷歌)等科技巨头股价都出现了不同程度的下跌&#xff0c;而美国科技股整体的持续大跌&#xff0c;更是引发了全球股市振荡。其中&#xff0c;亚马逊在今年9月初达曾达到1万亿美元市值&#…

概率论基础知识各种分布

离散分布&#xff1a;伯努力分布&#xff0c;二项分布&#xff0c;possion分布 一&#xff0c;伯努力分布 #执硬币 x_arrnp.array([0,1]) #x为1的概率 p0.7 #0 1分布 #由PMF生成对应的概率 离散事件 pr_arrstats.bernoulli.pmf(x_arr,p) plt.plot(x_arr,pr_arr,markero,lines…

AI 芯片和传统芯片的区别

来源&#xff1a;内容来自「知乎汪鹏 」所谓的AI芯片&#xff0c;一般是指针对AI算法的ASIC&#xff08;专用芯片&#xff09;。传统的CPU、GPU都可以拿来执行AI算法&#xff0c;但是速度慢&#xff0c;性能低&#xff0c;无法实际商用。比如&#xff0c;自动驾驶需要识别道路行…

三层神经网络实现手写数字的识别(基于tensorflow)

数据集链接&#xff1a;https://download.csdn.net/download/fanzonghao/10598333 from tensorflow.examples.tutorials.mnist import input_data mnist input_data.read_data_sets("./mnist/", one_hotTrue)import tensorflow as tf# Parameters learning_rate 0…

鼠标终将消失,未来我们有哪些人机交互方式?

来源&#xff1a;资本实验室在人类发明史上&#xff0c;诞生了无数的英雄。他们的发明往往从一项前沿技术到家喻户晓、无处不在&#xff0c;但他们自己却又鲜为人知&#xff0c;美国发明家道格拉斯恩格尔巴特就是其中的代表。20世纪60年代&#xff0c;道格拉斯恩格尔巴特发明了…

两层卷积网络实现手写数字的识别(基于tensorflow)

可和这篇文章对比&#xff1a;https://blog.csdn.net/fanzonghao/article/details/81603367 # coding: utf-8 # ## MNIST数据集from __future__ import division, print_function, absolute_importimport tensorflow as tf# Import MNIST data&#xff0c;MNIST数据集导入 fro…

光波导总结资料

1、写出光波导中的麦克斯韦方程&#xff0c;并把光场分解为纵向分量与横向分量&#xff0c;求出混合模式HE与EH模式的横向电场强度与横向磁场强度的点积&#xff08;用纵向分量表示&#xff09;&#xff08;需要有推导过程&#xff09; 解&#xff1a;在线性、各向同性且时不变…

德国再出颠覆性发明,这次要安排我们的快递

来源&#xff1a;最黑科技摘要&#xff1a;如果用一句话来形容德国的工业设计&#xff0c;我能想到的就是&#xff1a;“母牛坐电锯——锯牛逼"&#xff0c;小编已经不止一次把它吹得五光十色斗转星移~但你可能不知道&#xff0c;这个工业强国在2013年还提出了一个著名的发…

C++中用frugally-deep调用keras的模型并进行预测

1、背景 Python语言中的Keras库搭建深度学习模型非常便捷&#xff0c;但有时需要在 C 中调用训练好的模型&#xff0c;得到测试集的结果。比如将模型部署于FPGA&#xff0c;中间的一个步骤则需要用C构建模型。但 Keras库没有提供 C API&#xff0c;其中一种解决方法是使用 Ten…

简单的线性回归实现模型的存储和读取

和这篇文章对比https://blog.csdn.net/fanzonghao/article/details/81023730 不希望重复定义图上的运算&#xff0c;也就是在模型恢复过程中&#xff0c;不想sess.run(init)首先看路径 lineRegulation_model.py定义线性回归类&#xff1a; import tensorflow as tf "&qu…

MIT重新发明飞机:无需燃料,每秒万米喷射带你上天 | Nature封面

来源&#xff1a;量子位这不是科幻小说&#xff0c;离子引擎飞机真的被造出来了&#xff01;“曲率引擎”、“离子引擎”等等激动人心的科幻名词&#xff0c;正在走进现实。最近MIT又重新发明了飞机&#xff0c;实验成果登上了《自然》杂志封面。这架飞机翼展5米&#xff0c;总…

unet实现区域分割

https://github.com/zonghaofan/pig-seg/tree/master/disk_segmentation 网络架构&#xff1a; # coding:utf-8 import tensorflow as tf import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(./data/test.png)# cv2.imshow(1.jpg,img) # cv2.wait…

数字图像处理 实验一 图像的基本运算

实验一 图像的基本运算 一、实验目的 &#xff08;1&#xff09;掌握点运算和代数运算的算法实现和概念 &#xff08;2&#xff09;掌握和几何运算的算法实现和概念 &#xff08;2&#xff09;掌握灰度变换和几何变换的基本方法 &#xff08;3&#xff09;理解图像灰度直方图的…

2018世界人工智能蓝皮书:看中国到底有多强!【附下载】| 智东西内参

来源&#xff1a;智东西人工智能是引领未来的战略性高科技&#xff0c;作为新一轮产业变革的核心驱动力&#xff0c;催生新技术、新产品、新产业、新模式&#xff0c;引发经济结构重大变革&#xff0c;深刻改变人类生产生活方式和思维模式&#xff0c;实现社会生产力的整体跃升…

tensorflow(GPU)使用

一&#xff0c;直接指定GPU: tf.ConfigProto一般用在创建session的时候。用来对session进行参数配置 with tf.Session(config tf.ConfigProto(...),...) #tf.ConfigProto()的参数 log_device_placementTrue : 是否打印设备分配日志 allow_soft_placementTrue &#xff1a; 如…

数字图像处理实验二 图像变换

一、实验目的 &#xff08;1&#xff09;了解图像变换的意义和手段。 &#xff08;2&#xff09;熟悉傅立叶变换的基本性质。 &#xff08;3&#xff09;通过实验了解二维频谱的分布特点。 &#xff08;4&#xff09;了解余弦变换或Walsh&#xff0d;Hadamard变换 二、实验内容…

科学家发联合声明:强烈谴责首例免疫艾滋病基因编辑

来源&#xff1a;人民网据人民网报道&#xff0c;来自中国深圳的科学家贺建奎在第二届国际人类基因组编辑峰会召开前一天宣布&#xff0c;一对名为露露和娜娜的基因编辑婴儿于11月在中国健康诞生。这对双胞胎的一个基因经过修改&#xff0c;使她们出生后即能天然抵抗艾滋病。这…

Keras】基于SegNet和U-Net的遥感图像语义分割

from:【Keras】基于SegNet和U-Net的遥感图像语义分割 上两个月参加了个比赛&#xff0c;做的是对遥感高清图像做语义分割&#xff0c;美其名曰“天空之眼”。这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割&#xff0c;所以刚好又把前段时间做的成果重新整…

实验四51单片机并口实验

一.实验目的&#xff1a; 1. 了解51单片机I/O口的电气特性和驱动能力。 2. 了解LED电路中加入限流电阻的原因。 3. 掌握定时器原理及编程。 4. 掌握并口程序的编辑、编译、调试和运行。 二.实验设备和器件 1. PC机 2. PROTEUS仿真软件 3. 实验箱 4. ISP下载器 5. 51仿真器…

5G 建设拉动光模块量价齐升

来源&#xff1a;国联证券光模块是光通信的核心部件&#xff0c;它主要完成光电转换和电光转换。行业增长稳定&#xff0c;行业内的头部企业通过不断并购完成上下游的整合&#xff0c;提供一体化的解决方案。国内企业在快速的追赶外资标杆企业&#xff0c;产品逐步往高端方向转…