预演:使用 TensorFlow 进行深度学习

深度学习:趋势

如今,流行语已经覆盖全球。从近些年的发展来看,“社交媒体”“物联网”加上现在的“深度学习”,都是当今流行的趋势。让我们一起来看下过去十多年间,世界计算机科学领域的研究内容。111

从学术角度出发,我对研究领域做了个比较,深度学习占据第一位,紧随其后的是算法分析,计算机安全排第三,人工智能排在第四,这有点让人难以相信。排在最后的是电脑绘图,看来大家对它不怎么感兴趣。

TensorFlow: 为什么是它?

我运用深度学习的知识解决过相关的问题,但只用了不到一周的时间,如果我现在就撰写一篇学术性的文章,显然会班门弄斧。作为开发者,我想分享一下,我是如何通过深度学习编写 TensorFlow 的,这样比较实在。112

我曾使用过 Theano (短暂性的),而现在,我正在考虑使用哪款工具链比较好,也在考虑是否使用 H2O 堆,前者在世界范围内有一个很大的社区,后者则相形见绌。然而,不管怎么样,从统计图的峰值来看,谷歌的 TensorFlow 在宣传炒作上一定下了血本,也非常注重性能的提升及开发者关系的维护。显然,他们在维护从业人员关系上也花了不少心思。再顺便说一句,Theano 和 TensorFlow 都兼容 GPU。

数据集和预期结果

因为汽车评估数据集是对外公开的,所以像我这样的小白都可轻松获取。不信你也可以试试。数据集是人们就汽车使用情况进行的一项调查,它获得用户对汽车的一些反馈,如汽车价格,保养费用,车门数和容纳人数等。

样品数据如下:

我写的程序能够解析CSV格式的数据文件,然后通过反向传播生成一个多层的感知器模型,以便它能模仿人类智力,在遇到隐藏数据点时自动进行处理。

这个程序的输出应如下所示(也存在例外情况):

最后两行的输出比其他任何一项都要更具相关性。基本来说,进行的训练在规定时间内100%预测其产出等级。虽然,我们的测试目标是使得精准度最大化,但在实际操作中总会遇到障碍,最大的障碍就是我们用来训练和测试的数据的随机性。一般说来,数据输出的第一部分是统计数据,只为我们提供参考信息,你可自行忽略。

如果你仔细观察,你很快会发现,数据集在我们的输出内容里是随着数字呈现而改变的,尤其是前5行。

TensorFlow 工具链

目前 TensorFlow 的工具链还不完整,但谷歌还是在努力尝试为 TensorFlow 引入一套完整的。我认为他们这样做是对的。TensorFlow很有趣,但是它显然过于简单,对开发者的产出有所限制。因此,Google 已经开始搭建 TFLearn,又受 Scikit Learn 激发为 TensorFlow 设计了 API——这些代码编写非常有趣。还有一些其他我用过的工具,有了关于 TFLearn 和 Scikit 的学习,用这些工具能很快搭建环境。

搭建环境

首先,从这里下载,打开终端,执行以下步骤:

现在你已经拥有所有安装所需程序包,接下来,通过运行 python main.py.,你能看到一个类似我之前展现的输出。

代码预排

代码包括以下四个文件:

  • car-data.csv: 你就可将其理解为数据集;
  • requirements.txte: 此文件包含安装所需程序包列表;
  • main.py:代码的入口点;
  • categorical_dnn.py:包含所有深度学习逻辑的类别

main.py 包含的内容相对比较直白。因为它仅仅举例说明 CategoricalDNN 类,以及传递一些重要的参数。我们可以从此处了解比例,训练规模和迭代次数等。通过培训规模可知有多少比例的数据会被用来培训和其他测试。

CategoricalDNN 类假定调用程序没有关于数据的线索,这一点很关键,因为它表面了类别本身是否能够从数据中提取内容,对自身进行处理和升级。不用说,这样更有利于数据分类。

无条件DNN

我们先查看一下这个类中会用到的包:

互补的内联注释能让代码更通俗易懂,而我们讨论的重点是其调用的顺序。

预处理数据

首先,_load_csvis (应该)是一个私有方法,使用 pandas 加载 CSV 到内存。然后继续计数数据集包含的列的数目。假设最后一列包含 label 或 class 信息,对应的数据集则需要被预演。

最后一列包含了唯一的类,它是设计分类器的一个重要度量标准,这里再次用到了 pandas 。最后,所有的列都被循环,所有字符串都会被转换成各自的分类值以供我们的分类器处理。实际上, pandas 技巧 完美地做到了 heavy-lifting 。

混合和分解

现在将数据集随机化,并分解成之前在 TRAINING_SIZE 中定义的比率。

因为分类器只能使用 int32 / int64 工作,因此,我们需要转换预演和测试标签。这样也能确保标签最终不会被送入分类器,但它们在最后两行会被过滤掉。

培训模式和性能测试

现在我们已经完成预演前的所有准备工作,下一步就是设计网络。隐藏层只要合理,并能产出更好的结果,怎么安排都可以。但是根据我们的观察,以下的设计最为合适。当然还存在许多其他的优化方案,但在此我不做过多讨论。

我将 ReLU 作为激活函数,可以按要求进行 tanh,sigmoid,softmax 等。既然模型已经设定好了,现在我们开始测试它的性能:

我们还是使用了 Scikit 来测试模型的准确度。

总结

在这篇文章中,我介绍了 TensorFlow 的基本分类的深度神经网络的预演,当然,这只是很基础的一部分。如果你想学习更多,之后我也会做与代码的重要模块相关的介绍。希望能对你有帮助。

你可点击此处获取更多信息。

1 2 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部