Tensorflow学习笔记(二)MNIST入门

写在前面

现在已经配置好Tensorflow的环境啦,准备开始第一个神经网络的搭建!
问题是——我下载好了MNIST的数据集,要怎么使用?
默认的 Docker 镜像只包含启动和运行 TensorFlow 所需依赖库的一个最小集.
去Tensorflow下载了项目——怎么运行呢?


1.ImportError: No module named XXX

这是我第一次用python,下载了tensorflow的文件夹之后就不知道怎么用了?各个文件之间的互相调用会有from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets的形式,但是我直接python input_data.py 就会报错。
按照教程来说,这样就干脆自己一行一行地写代码吧……


2.MNIST的读取

从MNIST数据官网上下载的数据一共有四个包:
mnist.train.images(train-images.idx3-ubyte):这个文件里一共有60000张训练图片,每一张图片的大小是28*28
mnist.train.labels(train-labels.idx1-ubyte):这个文件针对train.images的每一张图片各有一个标签,在tensorflow的教程中每一个label会表示成只有一个是1剩下9个是0的形如[1,0,0,0,0,0,0,0,0,0]的”one-hot vectors”


3.softmax回归模型

使用softmax模型之前,对softmax进行简单的介绍:
我们希望能够针对每个测试图片都能得到这张图片属于某个数字的概率,而softmax 回归就是:计算这张图片属于0~9这十个数字的概率,然后将其中最大概率设为1,其他设为0的处理。
所以,softmax回归处理第一步:对图片中的每一个像素加权求和,计算概率。计算某张图片是数字i的概率就可以通过:

evidencei=j(Wi,jxj)+bi
来计算。其中W是权重,x是对每一个像素进行加权求和,b是偏置量。
得到10个evidence之后组成向量,通过softmax函数处理得到”one-hot vectors”。这个过程可以通过公式:
y=softmax(Wx+b)
表示。


4.实现模型

import tensorflow as tf//导入tensorflow包
x = tf.placeholder(tf.float32, [None, 784])//x是占位符,用来存储图片数据,第一个参数是none表示可以是任意张
W = tf.Variable(tf.zeros([784,10]))//权重值,初始化为0
b = tf.Variable(tf.zeros([10]))//偏置量
y = tf.nn.softmax(tf.matmul(x,W) + b)//实现模型softmax(Wx+b)

5.训练模型

评估指标——交叉熵

在机器学习中,对于每一个实现都需要一个指标来评估这种模型的效率,在这里使用交叉熵来表示。

y_ = tf.placeholder("float", [None,10])//用于输入正确的值
cross_entropy = -tf.reduce_sum(y_*tf.log(y))//计算交叉熵 y是计算结果,y_是实际值
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
//使用反向传播算法降低交叉熵的值来训练数据
//至此模型已经设置好了,我们先对所有的变量进行初始化
init = tf.initialize_all_variables()
//开启一个回话 并进行初始化
sess = tf.Session()
sess.run(init)
//训练模型,迭代1000次
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
//模型检测
//argmax可以获得某个tensor对象在某一维上的其数据最大值所在的索引值。由于标签向量是由0,1组成,因此最大值1所在的索引位置就是类别标签,correct_prediction就是判断结论是否正确的一个boolean结果
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
//将bool值转换成0,1值再取平均值就是我们的结果
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
//最后输出结果
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

你可能感兴趣的:(笔记,深度学习)