①softmax回归MNIST手写数字识别

标签: tensorflow mnist
42人阅读 评论(0) 收藏 举报
分类:

Softmax在机器学习中有着非常广泛的应用,他计算简单而且效果显著。

假设有两个数a和b,且a>b > c
如果取max,结果是a
如果取softmax,则softmax(a) > softmax(b) > softmax(c),softmax把所有的选项都给出概率。
MNIST手写数字识别是一个使用softmax回归(softmax regression)模型的经典案例。softmax模型可以用来给不同的对象分配概率。即使在之后,我们训练更加精细的模型时,最后一步也需要用softmax来分配概率。
下面我们用tensorflow来实现他
import tensorflow as tf

#获取MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("F:/MNIST/data/", one_hot=True)
#使用更加方便的InteractiveSession类。
# 通过它可以更加灵活地构建代码。它能让你在运行图的时候,插入一些计算图。
# 如果你没有使用InteractiveSession,那么你需要在启动session之前构建整个计算图,然后启动该计算图。
sess = tf.InteractiveSession()

#x和y并不是特定的值,只是一个占位符,可以在TensorFlow运行某一计算时根据该占位符输入具体的值。
x = tf.placeholder("float", shape=[None, 784])
y_ = tf.placeholder("float", shape=[None, 10])
#一个变量表示TensorFlow计算图中的一个值,能够在计算过程中使用、修改。在机器学习的应用过程中模型参数一般用Variable来表示。
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
#计算每个分类的softmax概率值
y = tf.nn.softmax(tf.matmul(x,W) + b)
#损失函数是目标类别和预测类别之间的交叉熵。
#tf.reduce_sum把minibatch里的每张图片的交叉熵值都加起来了。我们计算的交叉熵是指整个minibatch的。
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

# 首先,开始初始化所有的变量
init = tf.global_variables_initializer()
sess.run(init)
#最速下降法让交叉熵下降,步长为0.01.
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
for i in range(2000):
  batch = mnist.train.next_batch(50)
  #在计算图中可以用feed_dict来替代任何张量,并不仅限于替换占位符
  train_step.run(feed_dict={x: batch[0], y_: batch[1]})
#tf.argmax 能给出某个tensor对象在某一维上的其数据最大值所在的索引值。
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
#将布尔值转换为浮点数来代表对、错,然后取平均值。
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print(accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

最终训练出来的结果大概在0.92左右。
下面是一些tensorflow官方文档中对以上代码的解释:

①tensorflow依赖于一个高效的C++后端来进行计算。与后端的连接叫做session。这里我们使用更加方便的InteractiveSession类。通过它我们可以更加方便的构建代码。他能让我们在运行图的时候插入一些计算图。
如果没有使用InteractiveSession,那么则需要在启动Session之前构建整个计算图,然后再启动他。
import tensorflow as tf
sess = tf.InteractiveSession()

②我们把向量化后的图片x和权重矩阵W相乘,再加上偏置量b,然后计算每个分类的softmax概率值
y = tf.nn.softmax(tf.matmul(x,W) + b)

查看评论

Logistic回归、softmax回归以及tensorflow实现MNIST识别

一、Logistic回归 Logistic回归为概率型非线性回归模型,是研究二分类结果与一些影响因素之间关系的一种多变量分析方法。通常是用来研究某些因素条件下某个结果是否发生。 在讲解Logist...
  • universe_ant
  • universe_ant
  • 2016-10-06 23:48:32
  • 3883

mnsit 手写数据集 python3.x的读入 以及利用softmax回归进行数字识别

作为机器学习与深度学习入门,mnsit数据集是必备的入门材料,下面将在python3.x版本上实现softmax回归,源代码出处: https://github.com/hobgreenson/So...
  • xiaojiajia007
  • xiaojiajia007
  • 2016-12-17 14:39:07
  • 1379

Softmax回归算法对MNIST手写数字进行识别(C++实现)

  • 2016年05月27日 16:59
  • 10.18MB
  • 下载

Tensorflow 实现 MNIST 手写数字识别

本节笔记作为 Tensorflow 的 Hello World,用 MNIST 手写数字识别来探索 Tensorflow。笔记的内容来自 Tensorflow 中文社区和黄文坚的《Tensorflow...
  • u010858605
  • u010858605
  • 2017-04-09 16:05:52
  • 2572

Mnist 数据集的下载 以及 tensorflow 实现手写数字识别

Mnist 数据集 Mnist 内置 50000 组训练数据 10000 组测试数据 对于深度学习的学习、训练起到了很好的作用 Moist 数据集下载地址 : http://yann.lec...
  • zhelong3205
  • zhelong3205
  • 2018-01-26 11:48:54
  • 250

手写数字识别mnist-demo 代码整理总结

当于深度学习的Hello World git地址:https://github.com/Eniac-Xie/PyConvNet.git 主要代码结构: 0.initial_LeNet.py  组建Le...
  • wang2008start
  • wang2008start
  • 2017-04-22 22:18:15
  • 832

Caffe学习笔记(六):mnist手写数字识别训练实例

转载请注明作者和出处:http://blog.csdn.net/c406495762 Python版本: Python2.7 运行平台: Ubuntu14.04 一、前言  ...
  • c406495762
  • c406495762
  • 2017-04-20 23:55:25
  • 5033

手写数字识别(二)----SVM 实现Mnist-image 手写数字图像识别

前言前两天利用kNN实现了手写数字的识别,数据不是很多,训练数据1934个,测试数据946个。这两天把Mnist-image的手写数字数据down了下来,利用SVM进行识别一下。Mnist-image...
  • ni_guang2010
  • ni_guang2010
  • 2016-11-07 19:49:37
  • 8320

深度学习笔记5torch实现mnist手写数字识别

转自: http://www.aichengxu.com/view/2464034 本节代码地址: https://github.com/vic-w/torch-practice/tree/m...
  • u012749168
  • u012749168
  • 2016-09-27 21:16:22
  • 1162

多特征 MNIST库 手写数字识别 (matlab) 实现

  • 2011年11月23日 13:45
  • 37KB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 16万+
    积分: 2092
    排名: 2万+
    转身之间
    博客专栏
    最新评论