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 运行结果

原文地址:https://www.cnblogs.com/fonttian/p/8480724.html