• 9.1 mnist_softmax 交叉熵多分类器


    softmax交叉熵多分类器

    具体含义不再解释,这是一个我们比较常用的一个多分类器.深度学习的一大优点就是特征的自动构建,也正是因为该优点,使得分类器层显得不再那么重要,在Tensorflow的官方源码中,softmax是很常见的一个多分类器.其调用也十分的简单.此处再此单独拿出来介绍,是为了下一步的学习做准备.

    使用方法

      cross_entropy = tf.reduce_mean(
          tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))

    用于损失函数的定义.

    源码分解

    引用

    # 引用,官网自带的源码有很多特殊之处,但是没啥影响,自己写的时候,完全没必要这么多引用
    # 额外添加了控制警告消息等级的code
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    import argparse
    import sys
    
    from tensorflow.examples.tutorials.mnist import input_data
    
    import tensorflow as tf
    import os
    
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    
    FLAGS = None

    读取数据,定义model

      # Import data,此处使用我本机的数据文件,源码中是先检测默认位置,没有则自动下载
      mnist = input_data.read_data_sets("/home/fonttian/Data/MNIST_data/", one_hot=True)
    
      # Create the model,可以看出此处的model非常简单,就是一层y=Wx+b,你也可以继续增加层数,或者将其替代为卷积层,但是此处对于展示softmax并没有什么意义
      x = tf.placeholder(tf.float32, [None, 784])
      W = tf.Variable(tf.zeros([784, 10]))
      b = tf.Variable(tf.zeros([10]))
      y = tf.matmul(x, W) + b
    
      # Define loss and optimizer
      y_ = tf.placeholder(tf.float32, [None, 10])

    分类器⇒ 损失函数==>优化算法

    # 这部分代码很简单,一些细节我在之前已经介绍过了.
      cross_entropy = tf.reduce_mean(
          tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
      train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

    启动会话,运行输出

      sess = tf.InteractiveSession()
      tf.global_variables_initializer().run()
      # Train
      for _ in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    
      # Test trained model
      correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
      accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
      print(sess.run(accuracy, feed_dict={x: mnist.test.images,
                                          y_: mnist.test.labels}))

    main

    关于main的部分之前已经有介绍了:http://blog.csdn.net/fontthrone/article/details/76735591

    if __name__ == '__main__':
      parser = argparse.ArgumentParser()
      parser.add_argument('--data_dir', type=str, default='/home/fonttian/Data/MNIST_data',
                          help='Directory for storing input data')
      FLAGS, unparsed = parser.parse_known_args()
      tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

    运行结果

    softmax 运行结果

  • 相关阅读:
    win7下cygwin命令行颜色和中文乱码解决
    maven mirror
    maven命令
    dubbo获取错误ip
    eclipse netbeans 代码模板
    windows下配置Groovy
    c++ 载入内存中dll ,以及内存注入
    表达式求值的 计算器
    vc 编译器的一些精典报错
    内联汇编实现 memcpy 和 memset
  • 原文地址:https://www.cnblogs.com/fonttian/p/9162763.html
Copyright © 2020-2023  润新知