参与:Jane W、李泽南 TensorFlow 是一个由谷歌发布的机器学习框架,在这篇文章中,我们将阐述 TensorFlow 的一些本质概念。相信你不会找到比本文更简单的介绍。 TensorFlow 机器学习范例——Naked Tensor 链接:https://github.com/jostmey/NakedTensor?bare 在每个例子中,我们用一条直线拟合一些数据。使用梯度下降(gradient descent)确定最适合数据的线的斜率和 y 截距的值。如果你不知道梯度下降,请查看维基百科: https://en.wikipedia.org/wiki/Gradient_descent 创建所需的变量后,数据和线之间的误差是可以被定义(计算)的。定义的误差被嵌入到优化器(optimizer)中。然后启动 TensorFlow,并重复调用优化器。通过不断迭代最小化误差来达到数据与直线的最佳拟合。 按照顺序阅读下列脚本: serial.py tensor.py bigdata.py Serial.py 这个脚本的目的是说明 TensorFlow 模型的基本要点。这个脚本使你更容易理解模型是如何组合在一起的。我们使用 for 循环来定义数据与线之间的误差。由于定义误差的方式为循环,该脚本以序列化(串行)计算的方式运行。 Tensor.py 这个脚本比 serial.py 更进一步,虽然实际上这个脚本的代码行更少。代码的结构与之前相同,唯一不同的是这次使用张量(tensor)操作来定义误差。使用张量可以并行(parallel)运行代码。 每个数据点被看作是来自独立同分布的样本。因为每个数据点假定是独立的,所以计算也是独立的。当使用张量时,每个数据点都在分隔的计算内核上运行。我们有 8 个数据点,所以如果你有一个有八个内核的计算机,它的运行速度应该快八倍。 BigData.py 你现在距离专业水平仅有一个流行语之遥。我们现在不需要将一条线拟合到 8 个数据点,而是将一条线拟合到 800 万个数据点。欢迎来到大数据时代。 代码中有两处主要的修改。第一点变化是簿记(bookkeeping),因为所有数据必须使用占位符(placeholder)而不是实际数据来定义误差。在代码的后半部分,数据需要通过占位符馈送(feed)入模型。第二点变化是,因为我们的数据量是巨大的,在给定的任意时间我们仅将一个样本数据传入模型。每次调用梯度下降操作时,新的数据样本将被馈送到模型中。通过对数据集进行抽样,TensorFlow 不需要一次处理整个数据集。这样抽样的效果出奇的好,并有理论支持这种方法: https://en.wikipedia.org/wiki/Stochastic_gradient_descent 理论上需要满足一些重要的条件,如步长(step size)必须随每次迭代而缩短。不管是否满足条件,这种方法至少是有效的。 结论 当你运行脚本时,你可能看到怎样定义任何你想要的误差。它可能是一j2开奖像和卷积神经网络(convolutional neural network)之间的误差。它可能是古典音乐和循环神经网络(recurrent neural network)之间的误差。它让你的想象力疯狂。一旦定义了误差,你就可以使用 TensorFlow 进行尝试并最小化误差。 希望你从这个教程中得到启发。 需求 Python3 (https://www.python.org/) TensorFlow (https://www.tensorflow.org/) NumPy () 在第一个模型成功建立并训练之后,你或许需要了解如何保存与恢复这些模型。继续之前,也可以阅读这个 Tensorflow 小入门: https://blog.metaflow.fr/tensorflow-a-primer-4b3fa0978be3#.wxlmweb8h 你有必要了解这些信息,atv,因为了解如何保存不同级别的代码是非常重要的,这可以避免混乱无序。 如何实际保存和加载 保存(saver)对象 可以使用 Saver 对象处理不同会话(session)中任何与文件系统有持续数据传输的交互。构造函数(constructor)允许你控制以下 3 个事物: 目标(target):在分布式架构的情况下用于处理计算。可以指定要计算的 TF 服务器或「目标」。 (责任编辑:本港台直播) |