加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

迈入TensorFlow的行列:教你写自己的程序

发布时间:2018-08-30 09:24:18 所属栏目:教程 来源:李佳惠
导读:副标题#e# 【编译】在本文中,我们将使用Python在TensorFlow中实现一个非常基本的程序,以便在实际中看到它。 TensorFlow中的计算包含两个阶段: 构建计算图 运行计算图 计算图是之前提到的数据流图。 数据流图的每个节点将有助于评估TensorFlow计算的操作
副标题[/!--empirenews.page--]

  【编译】在本文中,我们将使用Python在TensorFlow中实现一个非常基本的程序,以便在实际中看到它。

  迈入TensorFlow的行列:教你写出自己的第一个程序!

  TensorFlow中的计算包含两个阶段:

  构建计算图

  运行计算图

  计算图是之前提到的数据流图。 数据流图的每个节点将有助于评估TensorFlow计算的操作。在TensorFlow中,每个节点将零个或多个张量作为输入,并产生一个张量作为输出。

  一种类型的节点是不变的,不需要输入,并输出一个内部存储的值。我们来看看如何在TensorFlow中定义一个常量。

迈入TensorFlow的行列:教你写出自己的第一个程序!

  输出的语句将是:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  请注意,输出不是9.0或19.0,而是张量对象。这是因为我们只是建立了计算图,但没有运行它。在运行之前,让我们看看上面的输出是什么意思。

  在Tensor对象中,第一个参数是该张量的名称。名称的Const部分由TensorFlow本身分配给它,而不是程序员明确给出的。生成的名称后面跟着一个:,后面跟着一个数字(在这个例子中是0)。这个数字是正在命名的张量的索引。

  这意味着,一个节点可以产生多个输出或多个张量。在这种情况下,这个数字将成为输出中每个张量的下标。在这里,虽然只有一个输出,所以张量被赋值为0.如果还有一个输出,则该张量将被赋值为1。

  第二个参数表示该张量的形状。。第三种类型是张量的数据类型。你可以明确地给它,就像第一个常量做的那样,或者TensorFlow也可以对它进行推断,就像第二个常量那样。

  如果我们想将9.0和19.0看作输出,我们将不得不实际运行刚刚构建的计算图。要做到这一点,必须创建一个回话对象并调用它的run方法。可以这样做,如下所示:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  上述代码的输出将是9.0和19.0。

  现在,添加这两个常量。 添加是一个操作,操作只是TensorFlow中的另一个节点。

迈入TensorFlow的行列:教你写出自己的第一个程序!

  上述代码的输出为:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  这里,+只是tf . add()的一个简写。

  那么,如何将自己的价值观传递给它呢?为了达到这些目的,占位符出现在图片中。占位符是稍后提供一个值的承诺。让我们快速创建两个占位符,并对它们执行操作,以便在操作中方便查看。

迈入TensorFlow的行列:教你写出自己的第一个程序!

  这里,myValue1和myValue2都是占位符,其值稍后将提供。请注意,这里给出的数据类型是强制的(dtype)。在调用会话对象的run方法时,可以提供占位符的值,如上面的示例所示。这些值是在run方法的feed_dict参数中提供的。因此,上述代码的输出为:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  但是机器学习的重点是让我们的数据可训练,以便我们可以训练它,根据训练结果对其进行优化,并且实现一个能够在真实数据上几乎工作的模型。

  那么,如何使我们的数据在TensorFlow中可以训练呢? 为了达到这个目的, 变量允许我们将可训练参数添加到我们的程序中。 变量定义如下:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  Evey变量被初始化为一个值(在这种情况下为2.0),并给出一个数据类型是可选的。 但是变量只是用上面的方式定义的;,它尚未初始化。当你调用tf.Variable时,变量不会被初始化。 要初始化TensorFlow程序中的所有变量,必须显式调用一个特殊操作,如下所示:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  重要的是要认识到init是对初始化所有全局变量的TensorFlow子图的一个句柄。在调用sess. run之前,变量未初始化。

迈入TensorFlow的行列:教你写出自己的第一个程序!

  输出myVariable = 2.0。 如果我们想改变变量的值,可以使用assign函数,如下所示:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  (这将输出10.0)

  好的,现在已经清楚了写一个TensorFlow程序的基本条件,然后采取一个非常简单的例子来实现它。 我们将实施以下模式:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  我们将为zheg程序提供一些训练数据,即x的某些值和y的所需值,根据训练数据计算W的值,然后提供测试数据以查看结果的精确度测试数据。由于采用了非常简单的模型,因此准确度可以轻松达到100%。 但是,在真实和更复杂的模型中,这几乎不会发生。 但为了理解的目的,可以这样做。

  由于我们将提供x和y的值,将声明它们为占位符。由于每个输入都必须改变W的值,把它声明为一个具有初始值的变量, 假设1.声明将会是这样的:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  现在,我们将定义简单的模型如下:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  现在,为了训练数据并更接近真实模型,我们将不得不编写一个损失函数,然后将其最小化。为了简单起见,我们将平方误差的和作为损失函数。 错误只不过是结果使用我们的模型和期望值(y)之间的差异。

  然后将对每个输入进行平方,并添加它们。 以下是相同的执行情况:

迈入TensorFlow的行列:教你写出自己的第一个程序!

  为了简单起见,我们将基于梯度下降优化器的概念(如果你不知道这个问题,请不要担心,请继续阅读)来构建自己的小优化器,以纠正W的值,然后对其进行测试 。

  要做的就是计算模型的损失,操纵W的价值以最小化损失,检查损失是否减少,并根据损失的结果进一步操纵W的价值。 为这个优化器编写的代码如下所示:

  迈入TensorFlow的行列:教你写出自己的第一个程序!

  迈入TensorFlow的行列:教你写出自己的第一个程序!

  可以肯定,损失可以达到0,因为我们使用了一个简单的模型。对于更复杂的模型,可以适当地改变条件。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读