MNIST和softmax回归模型
来源:互联网 发布:豫章学院 知乎 编辑:程序博客网 时间:2024/06/05 19:59
MNIST数据集
MNIST是一个入门级的计算机视觉数据集。它包含各种手写数字图片,在TensorFlow的mnist这个demo就是是通过Softmax Regression模型来训练预测mnist数据集。
TensorFlow的Tutorial里提供了一份python源代码用于自动下载和安装MNIST数据集。
from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
下载后的数据集就存放在制定的data_dir下面。
每一个MNIST单元都有两部分组成,一张手写图片和一个对应的标签,可以把图片设为xs,标签设为ys,可以通过mnist.test.images,mnist.test.labels分别得到图片和标签。数据集中的图片其实讲图片的像素点放到了一个行向量中,每一个图片都是28*28=784个像素,则行向量有784维。,标签lable是10维的向量。如果label是1,那标签向量就为{0,1,0,0,0,0,0,0,0,0,0}。
SoftMax Regression分类器模型
Softmax模型可以用来给不同对象分配概率。不管多复杂的分类器模型,例如卷积神经网络,循环神经网络,一般最后一步都需要用Softmax来分配概率。
对于一个输入图片属于数字i的证据可以表示为:
其中
原始的evidence数据无法用于预测,需要用softmax将evidence数据转换成概率分布。先代入指数函数变成成非负数,然后做归一化处理,这样evidence就是严格服从概率分布了。
如果用y来表示概率,就可上式就可表示为:
损失函数
损失函数可以使用对数损失表示,对数损失,也称为交叉熵损失,用于度量分类器的预测输出概率分布和真实分布的差异。
在二分类问题中,真实标签集合为:
在多元分类情况下例如:
真实类标签分布:
预测分类标签分布:
整个样本集合上的分类器对数损失可以定义为:
使用TensorFlow构建SoftmaxRegression构建分类模型
inference:构建evidence前向推断模型
logits = tf.add(tf.matmul(X,W),b)
softmax: 将evidence转换成概率分布:
Y_pred = tf.nn.softmax(logits=logits)
loss : 构建损失函数:
Trainloss = tf.reduce_mean(-tf.reduce_sum(Y_true * tf.log(Y_pred),axis=1))
train: 将损失函数代入梯度优化节点,进行优化
evaluate:使用训练得到的模型权重用于评估测试样本。
代码
import osimport argparseimport sysimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfrom tensorflow.examples.tutorials.mnist import input_data#os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'FLAGS = Nonedef main(_): mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True) with tf.Graph().as_default(): #input with tf.name_scope('Input'): X = tf.placeholder(tf.float32 , shape=[None,784],name="X") Y_true = tf.placeholder(tf.float32 ,shape=[None,10], name="Y_true" ) with tf.name_scope('Inference'): #模型参数变量 W = tf.Variable(tf.zeros([784,10]),name="Weight") b = tf.Variable(tf.zeros([10]),name="Bias") #inference :Y= X*W + b logits = tf.add(tf.matmul(X,W),b) #Softmax把logits 变成概率分布 with tf.name_scope('Softmax'): Y_pred = tf.nn.softmax(logits=logits) with tf.name_scope('Loss'): #loss : Trainloss = tf.reduce_mean(-tf.reduce_sum(Y_true * tf.log(Y_pred),axis=1)) with tf.name_scope('Train'): #train: optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.5) TrainOp = optimizer.minimize(Trainloss) with tf.name_scope('Evaluate'): Y_P_max = tf.argmax(Y_pred,1) Y_T_max = tf.argmax(Y_true,1) correct_prediction = tf.equal(Y_P_max,Y_T_max) accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) InitOp = tf.global_variables_initializer() writer = tf.summary.FileWriter(logdir='logs_2',graph=tf.get_default_graph()) writer.close() with tf.Session() as sess: sess.run(InitOp) for step in range(1000): batch_xs,batch_ys = mnist.train.next_batch(100) _,train_loss = sess.run([TrainOp,Trainloss],feed_dict={X:batch_xs,Y_true:batch_ys}) print("train step:",step," train_loss:",train_loss) ypm = sess.run(Y_P_max,feed_dict={X:mnist.test.images}) ytm = sess.run(Y_T_max,feed_dict={Y_true:mnist.test.labels}) for i in range(len(ypm)): print ("P 序号:%s 值:%s" % (i + 1, ypm[i])) print ("T 序号:%s 值:%s" % (i + 1, ytm[i])) #print("max pre Y : ",ypm) #print("max true Y: ",ytm) accuracy_score = sess.run(accuracy,feed_dict={X:mnist.test.images,Y_true:mnist.test.labels}) print("accuracy_score:",accuracy_score)if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='D:/tensorflow/pys/test1/tmp/tensorflow/mnist/input_data', help='Directory for storing input data') FLAGS, unparsed = parser.parse_known_args() tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
- MNIST和softmax回归模型
- MNIST和softmax回归(softmax regression)
- 基于TensorFLow实现MNIST和softmax回归
- 使用Softmax回归模型训练识别MNIST数据
- MNIST——softmax回归
- 使用Softmax回归实现MNIST
- Softmax回归模型
- Softmax回归模型
- Softmax回归模型
- Softmax 回归模型
- softmax回归模型
- logistic回归和softmax回归
- logistics回归和softmax
- Logistic回归、softmax回归以及tensorflow实现MNIST识别
- TensorFlow教程02:MNIST实验——Softmax回归
- TensorFlow在MNIST中的应用-Softmax回归分类
- Logistic and Softmax Regression (逻辑回归和Softmax回归)
- Logistic and Softmax Regression (逻辑回归和Softmax回归)
- detect获取到手机型号
- CopyOnWriteArrayList----ReadWriteLock---ConcurrentHashMap
- Combination Sum:非重复数组中选取若干元素求和等于给定值
- Jmeter之处理session、cookie以及如何做关联
- postMessage方法使app内嵌页面跳转原生页面
- MNIST和softmax回归模型
- Increasing Triplet Subsequence
- rollbackFailedOptional: verb npm-session 问题
- 清北学堂-D6-T1-divisors
- 【yum命令】软件包管理器
- 关于visual studio code在win10系统上安装后会报扩展宿主意外终止的解决方法
- Cookie和Session快速记忆笔记
- nodejs之express搭建项目-以注册登陆为例
- ios中分享的回调地址