3.2 tensorflow实现softmax regression识别手写数字

数据集:MNIST,60000个28x28灰色图像,55000个训练集,10000个测试集,5000个验证集;
Softmax Regression模型:将可以判定为某类的特征相加,将这些特征转化为判定是这一类的概率;
3.2 tensorflow实现softmax regression识别手写数字_第1张图片
loss function:cross-entropy用来判断模型对真实概率分布估计的准确程度;
3.2 tensorflow实现softmax regression识别手写数字_第2张图片
其中y为预测的概率分布,y’是真实的概率分布;
优化算法:SGD(Stochastic Gradient Descent)随机梯度下降算法
代码:

#!/usr/bin/env python
# coding: utf-8
#加载数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data", one_hot=True)
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.placeholder(tf.float32, [None,784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)  #y为预测的概率分布 
y_ = tf.placeholder(tf.float32, [None,10])   #y_是真实的概率分布
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
#优化算法
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
#初始化全局参数
tf.global_variables_initializer().run()
#开始训练
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    train_step.run({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, tf.float32))
print(accuracy.eval({x:mnist.test.images, y_:mnist.test.labels}))

结果:0.9179
补充:
python通常用numpy做密集运算,因为numpy使用c和一部分fortran语言编写,并且调用openblas,mkl等矩阵运算库,效率很高,每一个运算操作都要返回到python中,不同语言之间传输数据可能会带来较大延迟;tensorflow同样把密集运算搬到python外执行,并定义一个计算图将所有运算操作全部运行在python外面,不需要每次把运算完的数据传回python。

你可能感兴趣的:(读书笔记)