TensorFlow实现Softmax Regression识别手写数字
书本P46-53
一、相关概念
何谓MNIST?何谓One-Hot编码?何谓Softmax回归等书中的名词可以参见这篇博客:https://blog.csdn.net/qq_37608890/article/details/79343860
二、第一步:分类 Softmax Regression
- 工作原理:将可以判定为某类的特征相加,然后将这些特征转化为判定是这一类的概率。
- 书中具体写的很详细了,也可以参考这篇博客进一步理解Softmax Regression具体在tensor中的实现:https://blog.csdn.net/pain_gain0/article/details/82263282
个人认为这就是一个分类的作用
三、第二步:定义损失函数
这里的loss function用Cross-entropy定义,损失函数可以用来描述分类精度,神经网络训练的目的就是不断将这个loss减小直至达到一个全局最优或者局部最优解。
Cross-entropy表达式:
H
y
′
(
y
)
=
−
∑
i
y
i
′
l
o
g
(
y
i
)
H_y{'}(y)=-\sum_{i}y_i{'}log(y_i)
Hy′(y)=−i∑yi′log(yi)
其中
y
y
y是预测的概率分布,
y
′
y{'}
y′是真实的概率分布, 即Label的one-hot编码
用tensorflow描述为:
y_ = tf.placeholder(tf.float32,[None,10]
corss_entropy = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))
先定义一个placeholder,输入是真实的label,用来计算corss-entropy损失函数
tf.reduce_mean则是用来对每个batch数据结果求均值
四、第三步:定义优化算法
采用SGD随机梯度下降
五、第四步:使用TensorFlow全局参数优化器
六、第五步:迭代地对数据进行训练并对准确率评测
迭代地执行操作train-step,这里每次随机从 训练集中 取100个样本构成一个mini-batch并feed给placeholder(即损失函数中的输入 y i ′ y_i{'} yi′)
for i in range(1000)
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x:batch_ws,y:batch_ws}) #train_step以run方法运行,基本语法x:,y:
再对模型准确率进行验证:
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1)
其中,tf.argmax是从一个张量tensor中寻找最大值的序号,这里表现为:
tf.argmax(y,1)——各个预测的数字中概率最大的哪一个
tf.argmax(y_,1)——样本真实数字的类别
tf.equal——判断预测的数字类别是否是正确的类别,最后返回计算分类时候正确的操作correct_prediction
将此correct_prediction转化为float32类型再求平均(tf.reduce_mean)
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))