做o2o网站需要多少钱,Wordpress有趣的小工具,网站简繁体转换 js,google网站增加关键词图像识别#xff1a;利用KNN实现手写数字识别#xff08;mnist数据集#xff09; 步骤#xff1a; 1、数据的加载#xff08;trainSize和testSize不要设置的太大#xff09; 2、k值的设定#xff08;不宜过大#xff09; 3、KNN的核心#xff1a;距离的计算 4、k个最近…图像识别利用KNN实现手写数字识别mnist数据集 步骤 1、数据的加载trainSize和testSize不要设置的太大 2、k值的设定不宜过大 3、KNN的核心距离的计算 4、k个最近的图片--根据下标寻找对应的标签 5、根据标签转化成相应的数字 6、检测概率统计 在我看来KNN算法最大的优点是简单准确率较高
最大的缺点是当数据量较大时计算量成倍增长测试集与训练集之间的任意两个元素之间都要计算距离。
注意1trainSize和testSize不要设置的太大如果过大数据处理中产生更加庞大的数据内存溢出导致程序崩溃。
注意2k值的设定太大会提高计算机的计算量而且会一定程度上降低准确率。
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_hotTrue)
trainNum 55000
testNum 10000
trainSize 500
testSize 5
k 4# data 分解
trainIndex np.random.choice(trainNum, trainSize, replaceFalse)
testIndex np.random.choice(testNum, testSize, replaceFalse)
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], dtypetf.float32)
trainLabelInput tf.placeholder(shape[None, 10], dtypetf.float32)
testDataInput tf.placeholder(shape[None, 784], dtypetf.float32)
testLabelInput tf.placeholder(shape[None, 10], dtypetf.float32)# KNN的距离
f1 tf.expand_dims(testDataInput, 1) # 维度扩展
f2 tf.subtract(trainDataInput, f1) # 二者之差
f3 tf.reduce_sum(tf.abs(f2), reduction_indices2)
f4 tf.negative(f3) # 取反
f5, f6 tf.nn.top_k(f4, kk) # 最大的四个值 f5表示的是数据 f6表示的该数据所处的下标
f7 tf.gather(trainLabelInput, f6) # 根据f6下标去寻找trainLabelInput中对应的标签
f8 tf.reduce_sum(f7, reduction_indices1)
f9 tf.argmax(f8, dimension1)with tf.Session() as sess:p9 sess.run(f9, feed_dict{trainDataInput: trainData, testDataInput: testData, trainLabelInput: trainLabel})p10 np.argmax(testLabel, axis1)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值时需要对数据集有一定的了解并且在一定的范围内取值。