• tensorflow学习之路-----MNIST数据


    '''

    神经网络的过程:1、准备相应的数据库 2、定义输入成 3、定义输出层 4、定义隐藏层 5、训练(
    根据误差进行训练) 6、对结果进行精确度评估

    '''

    import tensorflow as tf

    #首先准备数据库
    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)


    '''
    这里面的数据不仅仅有图像的像素,还有图像代表的信息
    他有train的数据和test的数据
    '''

    #隐藏层
    def add_layer(inputs,in_size,out_size,activation_function=None):
      #定义权重,会影响结果的权重,他的值会改变的与真实数据差不多相同的结果
      Weights = tf.Variable(tf.random_normal([in_size,out_size]))
      '''
      其中in_size,out_size分别表示行,列
      '''
      #定义偏置,他的值不改变的,对数据处理的过程有作用
      biases = tf.Variable(tf.zeros([1,out_size])+0.1)
      #数据处理,在矩阵中,使得weights的值更加的接近真实结果
      Wx_plus_b = tf.matmul(inputs,Weights)+biases
      if activation_function==None:
        outputs = Wx_plus_b
      else:
        outputs = activation_function(Wx_plus_b)
      return outputs

    #定义输入层
    x_data = placeholder(tf.float32,[None,784])
    '''
    其中None表示可以接受任意的样本,但是这个样本的列要是784
    为什么是784呢?:784是一个样本的像素点。tensorflow的计算是一列一列计算的
    '''
    #定义输出层
    y_data = placeholder(tf.float32,[None,10])
    '''
    其中的None与上面表示的意思一样
    为什么10呢?:因为这是对0-9这10个数字的分类,他的一列中的数字最大的索引值表示代表的数字
    '''

    #训练层,数据改正,运用预测的结果和真是的结果相互比较,从中得到经验后学习
    prediction = add_layer(x_data,784,10,activation_function=tf.nn.softmax)
    '''
    x_data:输入的真是数据
    784:表示输入层一行有784列
    10:表述输出层一行有10列
    very important
    ****隐藏层里的设置参数是与输入层和输出层是有关,这个矩阵相乘,矩阵相加等是有联系的
    这里只有输入层和输出层
    '''
    #预测值和真实值比较学习的方法适合激励函数是有关的

    cross_entrop = tf.reduce_mean(-tf.reduce_sum(y_data*tf.log(prediction),reduction_indices=[1]))
    '''
    其中reduction_indices=[1],表示一列一列的计算
    '''
    #训练
    train_step = tf.train.GradientDesecentOptimiizer(0.5).minimize(cross_entrop)
    '''
    优化器:tf.train.GradientDesecentOptimiizer(梯度下降优化器)
    minimize(cross_entrop):更改误差值即(train_step)
    '''

    #开始训练前,一定要所有的变量进行初始化,才能使用
    init = tf.global_variables_initializer()

    #开始训练.这里我才初始化
    with tf.Session()as sess:
      sess.run(init)#初始化所有的变量
      for i in range(1000):#训练1000次
        xs,ys = mnist.train.next_batch(100)
        '''
        从一大堆的数据中拿出100分数据
        '''
        sess.run(train_step,feed_dict={x_data:xs,y_data:ys})
        '''
        在tensorflow中sess.run()这个调度执行
        为什么要用到y_data:因为在测试值和正确值比较时用到
        '''
        '''
        上面的这些,是学习的过程,他已经因为有y_data这个正确值,他会有一定的程度知道
        什么表示0,1,2,3,4,5,6,7,8,9了
        '''
        #为了知道他学习之后判别的效率,我们可以定义一个函数来查看
        if i%100==0:
          print(compute_accuracy(mnist.test.images,mnist.test.labels))
          '''
          其中mnist.test.images,mnist.test.labels这里表示的值是用来测试像素,用来测试的
          正确值
          '''

    def compute_accuracy(xs,ys):
      global prediction
      y_data1 = sess.run(prediction,feed_dict={x_data:xs})
      '''
      用一个变量将predication的数据保存起来
      '''
      correct_prediction = tf.equal(tf.argmax(y_data1,1),tf.argmax(ys,1))
      '''
      tf.argmax 是一个非常有用的函数,它能给出某个tensor对象在某一维上的其数据最大值所在
      的索引值。由于标签向量是由0,1组成,因此最大值1所在的索引位置就是类别标签,
      比如tf.argmax(y,1)返回的是模型对于任一输入x预测到的标签值,而 tf.argmax(y_,1)
      代表正确的标签,我们可以用 tf.equal 来检测我们的预测是否真实标签匹配
      (索引位置一样表示匹配)这行代码会给我们一组布尔值。
      '''
      accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
      '''
      为了确定正确预测项的比例,我们可以把布尔值转换成浮点数,
      然后取平均值。例如,[True, False, True, True] 会变成 [1,0,1,1] ,取平均值后得到 0.75.
      '''
      result = sess.run(accuarcy,feed_dict={x_data:xs,y_data:ys})
      return reslut

  • 相关阅读:
    java Semaphore的介绍和使用
    java CyclicBarrier的介绍和使用
    java CountDownLatch 使用介绍
    android模拟器不能上网设置
    计算几何题集
    BZOJ1004: [HNOI2008]Cards
    BZOJ1029: [JSOI2007]建筑抢修
    BZOJ1037: [ZJOI2008]生日聚会Party
    BZOJ1083: [SCOI2005]繁忙的都市
    Java开发笔记(一百一十四)利用Socket传输文本消息
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/9416908.html
Copyright © 2020-2023  润新知