• 机器学习——TensorFlow Mnist数据集入门


    训练一个机器学习模型用于预测图片里面的数字。

    import tensorflow as tf
    from tensorflow.examples.tutorials.mnist import input_data
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    # 获取数数据集
    x = tf.placeholder("float", [None, 784])
    # 占位符
    W = tf.Variable(tf.zeros([784,10]))
    # 变量variable,需要训练得到的数据
    b = tf.Variable(tf.zeros([10]))
    y = tf.nn.softmax(tf.matmul(x,W) + b)
    # 占位符
    y_ = tf.placeholder("float", [None,10])
    # 交叉熵
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))
    
    # 训练过程,梯度下降法,梯度0.01,损失函数最小值
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    # 初始化
    init = tf.initialize_all_variables()
    sess = tf.Session()
    sess.run(init)
    # 随机获取100组数据
    batch_xs, batch_ys = mnist.train.next_batch(100)
    # 打印第二张图片的像素信息和这100组数据对应的lable
    print(batch_xs[1],batch_ys,sep='
    ')
    # 求第二组数据所对应的label排序
    index=np.argsort(batch_ys[1])
    # 打印第二组数据的真实值
    print('This number is:',str(index[-1]))
    # 将第二张图片显示出来
    a=batch_xs[1].reshape(28,28)
    plt.imshow(a,cmap=plt.get_cmap('YlOrBr'))
    plt.show()
    
    # 下面是准确度计算
    # for i in range(1000):
    #   batch_xs, batch_ys = mnist.train.next_batch(100)
    #   sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    #
    # correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    # accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    # print (sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
    

    在这里插入图片描述
    在这里插入图片描述

    关于Softmax函数

    在这里插入图片描述

    softmax回归分两步:
    第一步:为了得到一张给定图片属于某个特定数字类的证据(evidence),
    我们对图片像素值进行加权求和。如果这个像素具有很强的证据说明这张图片
    不属于该类,那么相应的权值为负数,相反,如果这个像素拥有很强的证据说明
    这张图片属于该类,那么相应的权值为正数。
    
    
    此外我们需要一个额外的偏置量,因为输入往往会带有一些无关的干扰量,
    因此对于给定的输入图片x它代表的是数据i的证据可以表示为
    
    evidencei= wij*xj+b
    其中wi代表权重,b代表偏置量,j代表给定图片x的像素索引用于像素求和。
    然后用softmax函数可以把这些证据转换成概率:y
    
    这里的softmax可以看成一个激励(activation)函数或者链接函数(link)函数,
    把我们定义的线性函数的输出转换成我们想要的格式,也就是关于10个数字类的概率分布。
    因此给定一张图片他对于每一个数字的吻合度可以被softmax函数转换成一个概率值,
    softmax函数可以定义为:
    
    softmax(x)=normalize(exp(x))
    这个公式表明,把输入值(即是证据)当作幂指数求值,
    然后正则化这些结果值,证据越大,那么它所对应的假设模型里面的乘数权重值也就越大,
    反之拥有更少的证据意味着在假设模型里面拥有更小的乘数系数。
    softmax然后会正则化这些权重值,使他们的总和等于1,以此构造一个有效的概率分布。
    

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    以上就是softmax()函数的核心数学思想,还有具体的关于tf的操作后面还在学习!这一篇博客就是实现了使用tensorflow中的mnist数据集,并将像素转换成可视化的图片,对比是否识别成功!

  • 相关阅读:
    @RequestParam 加与不加的区别
    spring boot 实战
    mongo入门
    npm install 错误记录
    AsyncConfigurer 线程池
    guava Preconditions
    mysql分组、合并语句
    maven的学习以及集成开发软件
    Spring MVC+Junit测试出错---@WebAppConfiguration
    mybatis的代码生成器
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309455.html
Copyright © 2020-2023  润新知