TensorFlow下softMax回归实现的MNSIT

softmax回归介绍
softmax回归是一个线性回归模型,从逻辑回归(Logistics Regression)转化而来
简单来说,Logistics Regression是两类分类,softmax回归则是多类分类

Tensorflow中的softmax函数
主要功能:将各个类别的“打分”转换为合理的概率值,“打分”越高概率越高,但“打分”本身不代表概率,例有某样本有三个类别,那么它三个类别的打分分别是a,b,c,因为概率值是0~1,所以三个概率相加必须等于1,对(a,b,c)使用softmax函数后,相应的值会变成

                                                        
显然,这三个数值到0~1之间,而且加起来正好等于1,是合理的概率表示。

 MNSIT手写数字识别

x代表输入图片,它是一个784维(28*28)的向量,而W是一个形状为(784,10)的矩阵,b是一个10维向量,10代表的是类别数

softmax模型第一步是通过下面的公式计算得到个类别的Logit

                                                                   Logit = Wx + b

Logit同样是一个10维的向量,实际上就是样本x对应于各个类别的打分,之后用softmax函数将它转换为概率值

                                                                  y = softmax(Logit)

下面是具体源码实现

import tensorflow as tf
#获取数据集
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnsit = input_data.read_data_sets("C:\\Users\\Administrator\\Desktop\\Tensorflow\\MNSIT_data",one_hot = True)
#创建x,表示待识别的图片
x = tf.placeholder(tf.float32, [None, 784])
#W是tensorflow里的一个变量,作用是将784维的输入转换为一个10维的输出
W = tf.Variable(tf.zeros([784, 10]))
#b是Softmax模型的参数,表示偏移量bias
b = tf.Variable(tf.zeros([10]))
#表示模型的输出
y = tf.nn.softmax(tf.matmul(x,W) + b)
#图像的实际标签
y_ = tf.placeholder(tf.float32, [None, 10])
#交叉熵损失
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y)))
#用梯度下降法对模型参数W和b进行优化,0.01是梯度下降法的学习率
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#创建会话Session 只有在Session中才能运行优化步骤train_step
sess = tf.InteractiveSession()
#对所有变量Variable进行初始化才能使用
tf.global_variables_initializer().run()
#进行1000步梯度下降
for i in range(1000):
    #在mnsit中取100个训练数据,图像和标签
    #batch_xs是[100,784]的图像数据,batch_ys是[100,10]的实际标签数据
    batch_xs, batch_ys = mnsit.train.next_batch(100)
    #在Session中运行梯度下降,传入训练数据,每次提取100个数据进行训练,一共训练一千次
    sess.run(train_step, feed_dict = {x : batch_xs, y_ : batch_ys})
#正确的预测结果 arg_max是取出数组的最大值下标用来将y_的独热表示和y的模型输出转换为数字标签,
#y是模型预测结果,形状是[N,10],y_是实际结果,形状也是[N,10],N代表输入模型样本数量
#equal函数比较他们是否相等
correct_prediction = tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))
#计算预测准确度,cast函数是将比较的Boolean值转换为float32类型的0.,1.变量,即True = 1.,false = 0.,
#之后用reduce_mean函数计算数组中所有元素的平均值
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
#输出测试数据在模型中的准确度
print(sess.run(accuracy, feed_dict = {x: mnsit.test.images, y_ : mnsit.test.labels}))

 

你可能感兴趣的:(TensorFlow下softMax回归实现的MNSIT)