zoukankan      html  css  js  c++  java
  • MNIST数据集手写数字识别(softmax回归模型)

    机器学习入门之MNIST数据集

    使用平台:python35自带的IDLE

    >>>from tensorflow.examples.tutorials.mnist import input_data
    >>> mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)//从MNIST_data/中读取数据到mnist对象,数据不存在是自动执行下载
    

    另外一种方法:
    yana Lecun博客—MNIST数据集下载链接
    下载完成放入MNIST_data/文件夹中执行上述代码提取数据到mnist对象
    在这里插入图片描述

    >>> import os
    >>> import scipy.misc
    >>> save_dir='MNIST_data/raw/' //定义一个文件存储路径
    >>> if os.path.exists(save_dir) is False:                                   
                    os.makedirs(save_dir)
            //如果文件目录不存在,则新建一个文件目录
    
    for i in range(40)://生成40张手写数字图片(28*28规格)在MNIST_data/raw
    	image_array=mnist.train.images[i,:]
    	image_array=image_array.reshape(28,28) //reshape ,本来是1维784width的向量
    	filename=save_dir+'mnist_train_%d.jpg'%i //保存图片文件的文件名格式
    	scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(filename)
    	//通过scipy.misc.toimage将二维数组向量转为图像,然后以相应的文件名存储起来
    

    在这里插入图片描述

    >>> print(mnist.train.labels[0,:])//打印第0张训练图片的标签的独热
    [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
    
    import numpy as np
    for i in range(40):
    	one_hot_label=mnist.train.labels[i,:]//独热形式表示
    	label=np.argmax(one_hot_label)//通过np.argmax,可以直接获得原始的label
    	print('mnist_train_%d.jpg label: %d'%(i,label))//打印显示40张图片的标签
    
    >>> x=tf.placeholder(tf.float32,[None,784])
    //x是一个占位符,None为任意数量图片,784向量
    >>> w=tf.Variable(tf.zeros([784,10]))
    //w变量,是softmax模型的参数,将输入的784维的图片转化为一个10维的输出,初始值是0
    >>> b=tf.Variable(tf.zeros([10]))//模型参数,作为一个偏置项
    >>> y=tf.nn.softmax(tf.matmul(x,w)+b)//y表示模型的输出
    >>> y_=yf.placeholder(tf.float32,[None,10])//实际的图像标签,以占位符表示
    
     cross_entropy=
    		tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y))) 
    		//y为模型输出,y_为实际标签,根据y和y_构造交叉熵损失
    
    train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
     //针对损失进行用梯度下降进行模型参数的优化
      0.01是优化中的学习率,TensorFlow会默认对所有变量进行优化,而这里只有w和b参数
    
    
    sess=tf.InteractiveSession()//创建会话
    tf.global_variables_initializer().run()//初始化所有变量,分配内存
    
    for _ in range(1000)://进行1000次优化
    	batch_xs,batch_ys=mnist.train.next_batch(100)
    	//batch_xs,batch_ys对应两个占位符,每次从mnist.trian中抽取100个训练数据
    	sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})
    	//在会话中运行train_step,运行是传入占位符的值
    
    >>> correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
    //tf.argmax是用来将独热表示以及模型的输出转化为数字标签,取出最大值的下标
    //tf.equal用以比较模型输出和实际标签是否相等,并将结果保存到
    >>> accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    //tf.cast是将correct_prediction中的值转化成float32型的变量
    //tf.reduce_mean计算数组中所有元素的平均值
    >>> print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
    0.911
    //使用全体测试样本进行测试,准确率为0.911,准确率并不是很高
    
    

    softmax回归是一个简单的模型,由上图可见准确率并不高

  • 相关阅读:
    内敛函数
    墓碑文件
    java默认继承
    Question2Answer初体验
    yii 事物
    情商
    jsonp跨域
    CDbConnectionExt.php 23.2实现数据库的主从分离,该类会维护多个数据库的配置:一个主数据库配置,多个从数据库的配置
    图片服务器规划漫谈
    c语言中返回结构体的函数(结构体可以被赋值,类型相同的结构体可以相互赋值)
  • 原文地址:https://www.cnblogs.com/zhichao-yan/p/13368522.html
Copyright © 2011-2022 走看看