本文概述
- TensorFlow中的Softmax回归
- TensorFlow中MNIST数据集的实现
- TensorFlow MNIST-训练
MNIST数据集具有60, 000个训练图像和10, 000个测试图像。
MNIST数据集可以在线, 并且本质上是各种手写数字的数据库。 MNIST数据集包含大量数据, 通常用于证明深度神经网络的真正功能。我们的大脑和眼睛协同工作以识别任何编号的图像。我们的思维是一种强大的工具, 并且能够快速对任何图像进行分类。数字的形状太多了, 我们的大脑可以轻松识别这些形状并确定数字是多少, 但是对于计算机而言, 完成相同的任务并不容易。只有一种方法可以做到这一点, 那就是使用深度神经网络, 它允许我们训练计算机以有效地对手写数字进行分类。
文章图片
因此, 我们只处理了笛卡尔坐标系上包含简单数据点的数据。从开始到现在, 我们一直在分发二进制类数据集。当我们使用多类数据集时, 我们将使用Softmax激活函数对分类二进制数据集非常有用。而且在0到1之间的值排列中非常有效。sigmoid函数对于多因果数据集无效, 为此, 我们使用了能够处理它的softmax激活函数。
MNIST数据集是一个包含10个类的多级数据集, 我们可以在其中分类0到9之间的数字。我们之前使用的数据集与MNIST数据集之间的主要区别是在神经网络中输入MNIST数据的方法。
【CNN中的MNIST数据集介绍和使用示例】在感知模型和线性回归模型中, 每个数据点均由简单的x和y坐标定义。这意味着输入层需要两个节点才能输入单个数据点。
在MNIST数据集中, 单个数据点以图像形式出现。 MNIST数据集中包含的这些图像通常为28 * 28像素, 例如与水平轴交叉的28个像素和与垂直轴交叉的28个像素。这意味着来自MNIST数据库的单个图像总共需要分析784个像素。我们的神经网络的输入层有784个节点来解释这些图像之一。
文章图片
在这里, 我们将看到如何创建一个函数, 该函数是通过查看图像中的每个像素来识别手写数字的模型。然后使用TensorFlow训练模型, 以通过查看已标记的数千个示例来预测图像。然后, 我们将使用测试数据集检查模型的准确性。
TensorFlow中的MNIST数据集, 包含分为三部分的手写数字信息:
- 训练数据(mnist.train)-55000个数据点
- 验证数据(mnist.validate)-5000数据点
- 测试数据(mnist.test)-10000个数据点
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
文章图片
TensorFlow中的Softmax回归 TensorFlow MNIST的十种可能性是从0到9。我们的目的是查看图像, 并以特定的可能性说给定的图像是特定的数字。如果有可能, 则使用Softmax, 因为回归可以使我们得出0到1之间的值, 这些值总计为1。因此, 我们的方法应该很简单。
文章图片
文章图片
我们将TensorFlow MNIST图像分类为特定类别, 然后将其表示为正确与否的概率。现在, 这完全取决于特定类中的所有对象, 并且我们可以对像素强度进行加权求和。我们还需要添加一个偏见, 以使某些事情更可能独立于输入而已。 Softmax对权重进行归一化并添加假设为负或零的权重。
TensorFlow中MNIST数据集的实现 使用TensorFlow MNIST数据集分类的好处是, 它使我们可以描述完全在Python外运行的交互操作的图形。
首先, 我们使用以下命令导入TensorFlow库
Import tensorflow as tf
然后我们创建一个占位符, 当我们要求库使用以下命令运行计算时将输入该值
x = tf.placeholder (tf.float32, [None, 784])
然后, 我们应该在模型中增加权重和偏差。使用变量, 这是一个可修改的张量, 在交互操作图中具有作用域。
W= tf.Variable (tf.zeros([784, 10]))
b= tf.Variable(tf.zeros([10]))
请注意, W的形状为[784, 10], 因为我们要通过将784维图像矢量乘以10维证据矢量来生成不同类别的证据。我们可以将b添加到输出中, 因为它的形状为[10]。
TensorFlow MNIST-训练 我们通过将特征矩阵乘以权重并向其添加偏差, 然后通过softmax函数运行来定义模型。
y = tf.nn.softmax(tf.matmul(x, W) +b)
我们使用成本函数或均方误差函数来找到结果与实际数据的偏差。误差越小, 模型越好。当测量我们的预测效率如何时, 另一个非常常见的功能是交叉熵。该函数如下所述, 其中y表示预测, y’ 是实际分布。我们通过添加一个占位符来实现它。
y_ =tf.placeholder(tf.float32, [None, 10])
然后通过定义交熵
cross_entropy= tf.reduce_mean(-tf.reduce_sum(y_ *tf.log(y), reduction_indices=[1]))
现在我们已经成功定义了模型, 是时候训练它了。我们可以借助梯度下降和反向传播来做到这一点。还有许多其他优化算法可用, 例如逻辑回归, 动态松弛等。我们可以将学习效率为0.5的梯度下降用于成本函数优化。
train_step= tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
在训练之前, 我们需要开始一个会话并初始化我们之前创建的变量。
sess= tf.InteractiveSession()
这将启动一个交互式会话, 并通过以下方式初始化变量
tf.global_variables_initializer().run()
现在, 我们必须训练网络。我们应该更改时期数以适合我们的模型。
for _in range (1000):
batch_xs, batch_ys =mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x:batch_xs, y_:batch_ys})
使用测试数据集检查准确性
我们通过将结果与测试数据集进行比较来检查准确性。在这里, 我们可以使用tf.argmax函数, 该函数使我们知道沿着特定轴的张量中最大值的索引。
correct_prediction = tf.equal (tf.argmax (y, 1), tf.argmax(y_, 1))
这给出了布尔值列表, 然后在转换为浮点数后取平均值。
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
然后, 我们可以通过
print (sess.run (accuracy, feed_dict= {x: mnist.test.images, y_:mnist.test.labels}))
推荐阅读
- TensorFlow中的递归神经网络(RNN)解释和用法
- 在TensorFlow中引入卷积神经网络图解
- TensorFlow中的CIFAR-10和CIFAR-100数据集
- 优雅地实现Android主流图片加载框架封装,可无侵入切换框架
- ssm中整合Mybatis可以扫描到放在mapper下面的xml文件的方法
- 3.Appnium的安装
- android最最基础简单的保存xml代码
- Invalid bound statement (not found): **.mapper.FeedbackMapper.insertFeedback
- android打电话方法(直接拨通)