构建TensorFlow模型的基本步骤

构建TensorFlow模型的基本步骤

第一步:安装

加载MNIST数据

我们自动下载和导入MNIST数据集,会自动创建一个`MNIST_data`的目录存储数据。

import input_data
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)

运行TersonFlow的InteractiveSession

使用InteractiveSession()可以在运行图的时候,插入计算图,如果不使用InteractiveSession,需要在启动Session之前构建整个计算图,然后启动该计算图。

import tensorflow as tf
sess = tf.InteractiveSession()

计算图

第二步:构建softmax回归模型

这里构建的是一个线性层的softmax回归模型

占位符

通过输入图像和目标输出类别来创建节点,开始构建计算图。

x = tf.placeholder("float",shape = [None,784])
y_ = tf.placeholder("float",shape = [None,10])
这里的x和y_只是一个占位符,可以在运行某一计算时输入具体的值。x是一个二维张量,784是MNIST图片的维度,None表示大小不定。y_也是一个二维张量,10表示某一MNIST图片的类别。

变量

定义模型权重 W 和偏置 b ,作为额外的输入量。将这些模型参数用Variable来表示,代表着计算图中的每一个值在计算过程中可以使用和修改。

W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros[10])
这里将 W 和 b 初始化为零向量。W 是一个784x10的矩阵,一张图片有784个特征和10个输出值。b 是一个10位的向量,因为有10个分类。
变量需要通过session初始化后,才能在session中使用。

sess.run(tf.initialize_all_variables())

类别预测与损失函数

我们把向量化后的图片 x 和权重矩阵 W 相乘,加上偏置 b ,然后计算每个分类的softmax概率值。

y = tf.nn.softmax(tf.matmul(x,W) + b)
可以为训练过程指定最小化误差的损失函数,我们的损失函数是目标类别和预测类别之间的交叉熵。

cross_entroy = -tf.reduce_sum(y_ * tf.log(y))
这里的tf.reduce_sum把每张图片的交叉熵值都加起来了。

第三步:训练模型

我们用速下降算法让交叉熵下降,步长为0.01.

train_step =tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
返回的train_step操作对象,在运行时使用梯度下降来更新参数,整个模型的训练通过反复运行train_step来完成。

for i in range(1000):
  batch = mnist.train.next_batch(50)
  train_step.run(feed_dict = {x:batch[0],y_:batch[1]})
每一步迭代,都会加载50个训练样本,然后执行一次train_step,通过feed_dict将 x 和 y_ 张量的占位符用训练样本数据代替。
首先要找出预测正确的标签,tf.argmax 是一个有用的函数,能给出某个tensor对象在某一维上的其数据最大值所在的索引值。标签向量是有0,1组成的,最大值是1。tf.argmax(y,1)返回的是模型对于任一输入预测到的标签值,tf.argmax(y_,1)代表正确的标签。可以使用tf.equal来检测我们的预测是否与真实标签匹配。

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
这里返回的是一个布尔数组,我们将它转换成浮点数来表示对错,取平均值。

accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))

最后得出的准确率大概是91%。

这个只是一层神经网络,稍后会更新多层神经网络的构建。

给大家推荐一个入门TensorFlow的网站点击打开链接

微笑

猜你喜欢

转载自blog.csdn.net/qq_37543361/article/details/79837101