雷锋。本文是介绍用张量流构建图像识别系统的第三部分。在前两个部分中,我们构建了一个softmax分类器来标记来自CIFAR-10数据集的图像,并且达到了大约25-30%的准确率。因为有10个类别有不同的可能性,所以我们预计随机标注图像的准确率为10%。25-30%的结果比随机标记好很多,但还是有很大的改进空。在这篇文章中,作者沃尔夫冈·拜尔将介绍如何建立一个神经网络来执行同样的任务。看预测精度能提高多少!雷锋。com编译全文,未经允许不能重印。
前两部分请参考机器学习零基础?教你如何用TensorFlow(一)和(二)搭建图像识别系统。
使用常数定义每幅图像的像素数(32 x 32 x 3)和不同图像类别的数量。
用时钟记录运行时间。
我们想记录一些关于训练过程的信息,并使用TensorBoard来显示这些信息。TensorBoard要求每个日志运行都在一个单独的目录中,因此我们将日期和时间信息添加到日志目录的名称地址中。
Load_data()加载CIFAR-10数据,并返回包含独立训练和测试数据集的字典。
生成张量流图
为TensorBoard定义一个汇总操作函数(更多信息,请参见上一篇文章)。
生成一个保存对象,在检查点保存模型的状态(更多信息参见上文)。
该行运行train_step操作(之前定义为调用two_layer_fc.training(),其中包含优化变量的实际指令)。
当训练模型需要很长时间时,有一个简单的方法来保存你的进度快照。这允许您稍后回来,并将模型恢复到完全相同的状态。您所需要做的就是创建一个tf.train.Saver对象(就像我们之前做的那样),然后在每次想要拍摄快照时调用它的save()方法。恢复模式也很简单,就叫savever的restore()。有关代码示例,请参见gitHub存储库中的restore_model.py文件。
训练结束后,在测试集上对最终模型进行评估(记住,测试集包含模型到目前为止还没有看到的数据,这样我们就可以判断模型是否可以扩展到新的数据)。
结果
让我们通过带有默认参数的“python run_fc_model.py”来运行这个模型。我的输出如下:
可以看出,训练的准确性是从我们预期的随机猜测的水平开始的(水平10->: 10%的几率选择对的)。在最初的大约1000次迭代中,精度增加到大约50%,并且在接下来的1000次迭代中围绕该值波动。46%的测试精度不低于训练精度。这表明我们的模型没有明显的过度拟合。softmax分类器的性能约为30%,因此46%的改进约为50%。还不错!
用张量板可视化
TensorBoard允许你从不同的方面可视化TensorFlow图形,对于调试和改善网络非常有用。我们来看看与TensorBoard相关的代码。
在two_layer_fc.py中,我可以看到如下代码:
这三行中的每一行都创建一个汇总操作。告诉TensorFlow通过定义一个汇总操作,来收集一些张量的汇总信息(这里指的是logits、loss、precision)。汇总操作的其他参数只是要添加到汇总中的标签。
有不同种类的汇总操作。使用scalar_summary记录标量(非矢量)值,使用直方图_summary收集多个值分布信息(有关各种汇总操作的更多信息,请参见TensorFlow文档)。
Run_fc_model.py是一些关于TensorBoard可视化的代码:
TensorFlow中的一个操作本身不运行,需要直接调用或者调用另一个依赖它的操作。因为我们不想每次收集汇总信息时都单独调用每个汇总操作,所以我们使用tf.merge _ all _ summaries创建一个操作来运行所有汇总。
在TensorFlow会话初始化期间,会创建一个摘要编写器,摘要编译器负责将摘要数据实际写入磁盘。在摘要编写器的构造函数中,logdir是日志的写地址。可选图形参数告诉张量板渲染和显示整个张量流图形。每100次迭代,我们执行组合汇总操作,并将结果馈送给汇总编写器,并将它们写入磁盘。为了查看结果,我们通过“tensorboard - logdir = tf_logs”运行TensorBoard,并在Web浏览器中打开localhost:6006。在“事件”选项卡中,我们可以看到网络的损失是如何减少的,以及它的准确性是如何随着时间而增加的。
张量板图显示了模型在训练中的损失和准确性。
“图形”选项卡显示已定义的视觉张量流图形,您可以交互地重新排列该图形,直到满意为止。我觉得下图说明我们的网络结构很好。
张量板1以互动和视觉的方式显示张量板图像
对于“分布”和“直方图”选项卡上的信息,我们可以进一步理解tf .直方图_summary操作,这里不做进一步的详细分析。更多信息可以在官方张量流文件的相关部分找到。
后续改进
可能你在想训练softmax分类器的计算时间比神经网络少很多。确实如此,但是即使softmax分类器的训练时间增加到与神经网络相同的时间,前者也不会达到与神经网络相同的性能,如果前者的训练时间更长,那么一定程度上的额外收益和性能提升几乎可以忽略不计。我们也在神经网络中验证了这一点。额外的训练时间并不会显著提高准确率,但是我们还有其他的事情可以做。
所选的默认参数值相当不错,但仍有改进的余地。通过改变隐层神经元数量或学习率等参数,模型的精度应该有所提高,模型的进一步优化会使测试精度达到50%以上。如果这个模型能调整到65%以上,我会相当惊讶。然而,还有另一种网络结构可以很容易地实现这一点:卷积神经网络,这是一种不完全连接的神经网络。相反,他们试图理解输入中的局部特征,这对于分析图像非常有用。使得解释空之间的信息非常直观。在本系列的下一部分,我们将看到卷积神经网络的工作原理以及如何构建自己的神经网络。
雷锋。com将在下一部分关注卷积神经网络的介绍,敬请期待。
Via wolfib,雷锋编
雷锋的版权文章。严禁擅自转载。详情请参考转载说明。
1.《图像识别系统 机器学习零基础?手把手教你用TensorFlow搭建图像识别系统| 干货》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《图像识别系统 机器学习零基础?手把手教你用TensorFlow搭建图像识别系统| 干货》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1601890.html