图像识别:利用KNN实现手写数字识别(mnist数据集)

图像识别:利用KNN实现手写数字识别(mnist数据集)

步骤:

1、数据的加载(trainSize和testSize不要设置的太大)

2、k值的设定(不宜过大)

3、KNN的核心:距离的计算

4、k个最近的图片-->根据下标寻找对应的标签

5、根据标签转化成相应的数字

6、检测概率统计

 

 在我看来,KNN算法最大的优点是简单,准确率较高;

最大的缺点是:当数据量较大时,计算量成倍增长,测试集与训练集之间的任意两个元素之间都要计算距离。

注意1:trainSize和testSize不要设置的太大,如果过大,数据处理中产生更加庞大的数据,内存溢出,导致程序崩溃。

注意2:k值的设定太大会提高计算机的计算量,而且会一定程度上降低准确率。

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('D:/MNIST_data', one_hot=True)
trainNum = 55000
testNum = 10000
trainSize = 500
testSize = 5
k = 4# data 分解
trainIndex = np.random.choice(trainNum, trainSize, replace=False)
testIndex = np.random.choice(testNum, testSize, replace=False)
trainData = mnist.train.images[trainIndex]  # 训练图片
trainLabel = mnist.train.labels[trainIndex]  # 训练标签
testData = mnist.test.images[testIndex]  # 测试图片
testLabel = mnist.test.labels[testIndex]  # 测试标签# 利用placeholder来完成数据的加载
trainDataInput = tf.placeholder(shape=[None, 784], dtype=tf.float32)
trainLabelInput = tf.placeholder(shape=[None, 10], dtype=tf.float32)
testDataInput = tf.placeholder(shape=[None, 784], dtype=tf.float32)
testLabelInput = tf.placeholder(shape=[None, 10], dtype=tf.float32)# KNN的距离
f1 = tf.expand_dims(testDataInput, 1)  # 维度扩展
f2 = tf.subtract(trainDataInput, f1)  # 二者之差
f3 = tf.reduce_sum(tf.abs(f2), reduction_indices=2)
f4 = tf.negative(f3)  # 取反
f5, f6 = tf.nn.top_k(f4, k=k)  # 最大的四个值 f5表示的是数据 f6表示的该数据所处的下标
f7 = tf.gather(trainLabelInput, f6)  # 根据f6下标去寻找trainLabelInput中对应的标签
f8 = tf.reduce_sum(f7, reduction_indices=1)
f9 = tf.argmax(f8, dimension=1)with tf.Session() as sess:p9 = sess.run(f9, feed_dict={trainDataInput: trainData, testDataInput: testData, trainLabelInput: trainLabel})p10 = np.argmax(testLabel, axis=1)print('预测值:', p9)print('真实值:', p10)j = 0
for i in range(0, testSize):if p10[i] == p9[i]:j += 1
print('accuracy:', j*100/testSize)

 

作死设置了一回,电脑是游戏本,屏幕出现卡顿,加速球爆满,还好运行出来了 

 

 设置的过高,直接报错,资源耗尽。

 训练集数量和K值该如何确定

从上图可以看出,trainSize不是设置的越高越好,在满足较高准确率的同时,又不能使计算量过于庞大,需要把握训练数据集的大小。 

从上图可以看出,K值的设置过大反而会在一定程度上降低预测的准确率 ,所以设置k值时,需要对数据集有一定的了解,并且在一定的范围内取值。

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

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

相关文章

寻找数组中第K频繁的元素

问题是:给你一个数组,求解出现次数第K多的元素。当然leetcode上的要求是算法复杂度不能大于O(N*logN)。 首先这个问题我先是在leetcode上看到,当时想了两种做法,做到一半都觉得不是很好,正在思考别的方法。然后在牛客网…

一个与生命起源有关的悖论终于得到了解决

来源:原理当Caitlin Cornell低头看显微镜时,她看见黑色的背景下浮现出一些大大的明亮斑点。它们就像微缩的太阳,在深色的太空幕布下闪耀着光芒。Conell回忆起把这些斑点展示给她的导师Sarah Keller时的兴奋,那时她们意识到&#x…

python ffmpy3与FFmpeg的安装

python ffmpy3与FFmpeg的安装 安装命令: pip install ffmpy3 去官网下载FFmpeg,根据自身电脑版本下载相应安装包 http://ffmpeg.org/download.html from ffmpy3 import FFmpeg ff FFmpeg(inputs{test.mp4: None},outputs{output.ts: None}) print(f…

千兆网线8根线定义图_家中的网线断裂/不够长,如何接线才最合适?

网线作为互联网时代不可或缺的主角,更是家装布线和工程施工中的常客。网线相对来说是很脆弱的,特别是一些质量一般的网线,在很多情况下都可能会被弄断,比如老鼠咬、过度拉伸、摆在地下人踩的人多了、电起火烧断、不小心被夹断等等…

中国决定以“六大政策”推动新一代人工智能发展

来源:智造智库以新一代人工智能为代表的新一轮科技革命和产业变革已经呈现出强大的影响力和生命力,人工智能技术对生产、流通、消费等形成高度渗透、跨界融合,新业态、新模式不断涌现,给以往的产业生态、社会分工、行业和企业边界…

第三次站立会议

项目进展:项目主体开始实施,我们在前期分工准备的同时开始讨论连连看的具体式样,开始上网参考其他项目的式样,搜集图片素材,为具有我们特色的连连看项目做准备。 存在问题:搜集素材时组员对项目的风格式样见…

ffmpy3与ffmpeg的简单使用

安装 python ffmpy3与ffmpeg的安装 https://blog.csdn.net/qq_40962368/article/details/90748852 ffmpy3的介绍: https://ffmpy3.readthedocs.io/en/latest/ ffmpy3是一个用于FFmpeg的Python包装器,最初是从ffmpy项目派生出来的。它根据提供的参数及…

C++ vector查找某个特定元素是否存在

使用find()函数需要#include<algorithm> if (std::find(v.begin(), v.end(), key) ! v.end()) 从find函数的返回结果与vector的end比较可以看出其实这是一个指针&#xff0c;那么如果我们想要获得索引那么将返回结果与begin做差即可 find(v.begin(), v.end(), key)-v…

python列表应用案例-python列表使用实例

#以下是我自己在联系列表中所编写的语句&#xff1a; names["zangsan","lisi","wangermazi","Xiaoliuzi","dabiaoge","牛erbiaodi"] #----------0--------1---------2---------------3----------4---------5-----…

边工作边刷题:70天一遍leetcode: day 7

Max Points on a Line 要点&#xff1a;这题暴力解是用任何两点确定一条直线&#xff0c;然后对其他点检查是否共线&#xff0c;显然&#xff0c;这里没用空间来存储之前的检查结果&#xff0c;所以time complexity是O(n^3)。这题的难点是如何存储从而实现O(n^2)解。思路是另一…

5G将改变技术格局的8个原因(上)

来源&#xff1a;CESAsia5G是引领第四次工业革命的通用技术。为了说明5G如何推动技术创新的飞跃&#xff0c;威讯(Verizon)首席执行官卫翰思(Hans Vestberg)在2019年国际消费电子产品展(CES 2019)主题演讲中罗列了5G所带来的八项有可能改变世界的能力。通用能力1和2&#xff1a…

python计算precision,recall,f1-score

sklearn.metrics.classification_report(y_true, y_pred, *, labelsNone, target_namesNone, sample_weightNone, digits2, output_dictFalse, zero_divisionwarn) https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

matlab频谱分析_罗德与施瓦茨两款新的信号和频谱分析仪 具有多种频率型号

射频元器件、发射机和模组的制造商正面临着复杂的宽带射频信号测量任务和严苛的上市时间要求。特别是随着5G NR技术的进步&#xff0c;工程师在研发和生产中需要使用支持5G带宽和RF需求的测试解决方案分析无线通信信号。罗德与施瓦茨的新型中档信号和频谱分析仪R&SFSV3000和…

ArcEngine一些代码实现(转载)

转自&#xff1a;http://xitong.iteye.com/blog/1715759 ArcEngine 一些实现代码 ●● 目录&#xff1a; A1 …………实现&#xff1a;鼠标滑过显示要素 tip A2 …………实现&#xff1a;通过鼠标选择要素并高亮显示&#xff08;ISelectionEnvironment&#xff09; A3 ……………

tensorboard可视化经常出现的两个问题

tensorboard经常出现的两个问题 TensorFlow经常使用tf.summary.FileWriter("路径", sess.graph)函数将训练的图信息保存到日志中 使用TensorBoard读取读取并展示日志&#xff0c;使用如下语句&#xff1a; tensorboard --logdir日志所在路径 一、OSError: [Errn…

从电报到5G,细说60年移动通信史的7个变革

来源&#xff1a;司南物联今天&#xff0c;我们不止介绍5G&#xff0c;还要给大家介绍通信史这60多年来的趣事。电话“发明者”贝尔居然是小偷&#xff1f;早在1871年&#xff0c;意大利人安东尼奥梅乌奇就开始为自己的Teletrofono电话系统去申请专利&#xff0c;他花10美元买了…

python计算kappa系数

sklearn.metrics.cohen_kappa_score(y1, y2, *, labelsNone, weightsNone, sample_weightNone) https://scikit-learn.org/stable/modules/generated/sklearn.metrics.cohen_kappa_score.html

联通5g接入点设置参数_联通5G 所向无前

10月31日&#xff0c;正值联通5G商用1周年的日子&#xff0c;上海联通自商用上市之初便策划推出“联通5G点亮全城”系列活动&#xff0c;践行“让每个市民在第一时间感受5G的脉搏”。北区分公司延续联通5G点亮全城的热度、结合S10英雄联盟总决赛契机&#xff0c;在Nice奈锶电竞…

mAP与IOU的简单介绍

mAP 在评价一个检测算法的时候&#xff0c;主要看两个标准&#xff0c;即是否正确预测了框内的物体类别&#xff1b;预测的框和人工标注框的重合程度。这两个的量化指标分别是mAP&#xff08;mean Average Precision&#xff09;和IOU&#xff08;Intersection Over Union&…