3、TensorFlow实现Softmax回归识别手写数字

一、数据集介绍

55000个训练集、10000个测试集、5000个验证集。

手写数字图片28*28像素,从二维结构转化为一维(后面章节使用卷积神经网络会利用空间结构)=784维特征。

0到9共10维label特征。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)


二、多分类任务算法选择

SoftMax Regression算法原理(略)

简单点说,每个样本都要算10个类的概率,选最高者。 类比到神经网络,是没有隐藏层的最浅的神经网络。


三、四个步骤

1、定义算法公式,也就是神经网络forward时的计算

2、定义loss,选定优化器,并指定优化器优化loss

3、迭代地对数据进行训练

4、在测试集熵对准确率进行评测。


四、代码

import tensorflow as tf

sess = tf.InteractiveSession() #之后的运算默认在这个session里面跑。

# 导入数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)

# 变量初始化
x = tf.placeholder(tf.float32,[None,784])
w = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y_ = tf.placeholder(tf.float32,[None,10]) # 真实数字类别

# 定义假设函数计算公式,tensorflow会自动计算forward和backward方法。
y = tf.nn.softmax(tf.matmul(x,w)+b)
# 定义损失函数公式 信息熵
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),reduction_indices = [1]))
# 定义优化算法 SGD学习速率 0.5
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

#参数初始化
tf.global_variables_initializer().run()
#迭代执行训练操作
for i in range(1000): # 迭代次数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"))  #将结果转换为浮点数
sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})  #输出


五、补充

TensorFlow和Spark类似,我们定义的各个公式(cross_entropy、train_step、accuracy)其实只是计算图,在执行代码时,计算还没发生,只有等调用run方法并feed数据时,才真正执行。


虽然准确率有92%,但是线上利用还差的很远。事实上,我们加个隐含层可达98%;引入卷积层、池化层后,可达99%;而目前基于卷积神经网络的state-of-the-art的方法已经可以达到99.8%的正确率。


六、思考

1、数据集支持其他格式吗?或者可以转化为该形式吗?

2、结果输出又是怎么样的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值