图像识别:利用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值时,需要对数据集有一定的了解,并且在一定的范围内取值。

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

  1. Pytorch实战1:LeNet手写数字识别 (MNIST数据集)

    版权说明:此文章为本人原创内容,转载请注明出处,谢谢合作! Pytorch实战1:LeNet手写数字识别 (MNIST数据集) 实验环境: Pytorch 0.4.0 torchvision 0.2. ...

  2. Python 手写数字识别 MNIST数据集下载失败

    目录 一.MNIST数据集下载失败 1 失败的解决办法(经验教训): 2 亲测有效的解决方法: 一.MNIST数据集下载失败 场景复现:想要pytorch+MINIST数据集来实现手写数字识别,首先就 ...

  3. 使用Pytorch实现手写数字识别(Mnist数据集)

    目标 知道如何使用Pytorch完成神经网络的构建 知道Pytorch中激活函数的使用方法 知道Pytorch中torchvision.transforms中常见图形处理函数的使用 知道如何训练模型和 ...

  4. 手写数字识别MNIST数据集下载百度网盘链接快速下载

    介绍 MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片. 下载 官方链接:http://ya ...

  5. 吴裕雄 python 神经网络——TensorFlow实现AlexNet模型处理手写数字识别MNIST数据集...

    import tensorflow as tf# 输入数据 from tensorflow.examples.tutorials.mnist import input_datamnist = inpu ...

  6. python实现lenet_吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集...

    importtensorflow as tf tf.reset_default_graph()#配置神经网络的参数 INPUT_NODE = 784OUTPUT_NODE= 10IMAGE_SIZE= ...

  7. GAN变种ACGAN利用手写数字识别mnist生成手写数字

    1.摘要 本文主要讲解:GAN变种ACGAN利用手写数字识别mnist数据集进行训练,最终生成手写数字图片 主要思路: Initialize generator and discriminator I ...

  8. 【python】机器学习算法(KNN)入门——手写数字识别

    前言 嗨喽~大家好呀,这里是魔王呐 ! 最近邻 (k Nearest Neighbors, KNN)算法是一种分类算法 1968年由Cover和Hart提出,应用场景有宁符识别.文本分类. 图像识别等 ...

  9. 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)

    机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...

最新文章

  1. 三层交换机原理:01路由器如何隔离广播域?
  2. 面试官:你们Redis故障过吗,怎么解决?
  3. linux-java
  4. java中的char可以存储汉字吗?
  5. Spring Security(18)——Jsp标签
  6. CTex + Texmaker
  7. myeclipse 安装jad反编译插件
  8. hive内部表和外部表的区别_走近大数据之Hive进阶(四、Hive的表连接)
  9. 一文读懂 JavaScript 和 Python 九大语义区别
  10. 你在用MapGuide/Map 3D做什么?
  11. 初试 Git hooks 自动部署
  12. Linux抓包命令tcpdump以及常见抓包使用方法
  13. 经典的经典:《自然哲学的数学原理》
  14. 【二极管】稳压二极管全面分析
  15. android设置背景色为全透明和半透明
  16. 橡胶垫片的特点与用途
  17. 金弘同创怎么样:拼多多获取奖励金的办法
  18. python 统计素数并求和
  19. MacBook Pro 13 A1502 更换电池
  20. 为宠物提供鲜粮,超能小黑完成2000万元A轮融资

热门文章

  1. 智慧新泰时空大数据与云平台_智慧警务大数据云平台开发情报研判系统解决方案...
  2. python 控件叠加_如何将图像应用于控件背景(叠加)
  3. excel去重_数据处理之EXCEL的高效技巧分享
  4. 客户端自动化测试研究
  5. 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构
  6. 论文浅尝 | 利用Lattice LSTM的最优中文命名实体识别方法
  7. 情报领域因果推理智能项目概览:以DAPAR为例
  8. 基于对抗生成网络的滚动轴承故障检测方法
  9. 一至七-----小东西
  10. 软工 课堂作业:选出一个整数组中最大子数组