什么是 TensorFlow?它是如何工作的?简介 & Archi质地

让我们从 TensorFlow 简介开始本教程:

什么是 TensorFlow?

TensorFlow 是一个用于创建机器学习应用程序的开源端到端平台。它是一个符号数学库,使用数据流和可微分编程来执行各种专注于深度神经网络训练和推理的任务。它允许开发人员使用各种工具、库和社区资源创建机器学习应用程序。

目前,世界上最著名的深度学习库是谷歌的 TensorFlow。谷歌产品在其所有产品中都使用机器学习来改进搜索引擎、翻译、图像字幕或推荐。

TensorFlow 示例

举个具体的例子,谷歌用户可以借助人工智能获得更快、更精细的搜索体验。如果用户在搜索栏中输入一个关键词,谷歌就会提供下一个词的推荐。

TensorFlow 示例
TensorFlow 示例

Google 希望利用机器学习来充分利用其海量数据集,为用户提供最佳体验。有三个不同的群体使用机器学习:

  • 研究人员
  • 数据科学家
  • 程序员

他们可以使用相同的工具集相互协作并提高效率。

Google 不仅拥有数据,他们还拥有世界上最庞大的计算机,因此 Tensor Flow 的构建是按规模进行的。TensorFlow 是由 Google Brain Team 开发的一个库,用于加速机器学习和深度神经网络研究。

它被设计为在多个 CPU 或 GPU 甚至移动操作系统上运行,并且它有多种语言的包装器,例如 Python, C++ or Java.

TensorFlow 的历史

几年前,深度学习在处理大量数据时开始胜过所有其他机器学习算法。谷歌发现它可以使用这些深度神经网络来改善其服务:

  • Gmail的
  • 拍照
  • 谷歌搜索引擎

他们建立了一个框架,称为 Tensorflow 让研究人员和开发人员共同开发人工智能模型。一旦开发和扩展,它就可以让很多人使用它。

它于 2015 年底首次公开,而第一个稳定版本于 2017 年出现。它根据 Apache 开源许可开源。你可以使用它、修改它并重新分发修改后的版本,但需要付费,而无需向 Google 支付任何费用。

接下来在本 TensorFlow 深度学习教程中,我们将了解 TensorFlow 架构以及 TensorFlow 的工作原理。

TensorFlow 的工作原理

TensorFlow 可让您构建数据流图和结构,通过将输入作为称为 Tensor 的多维数组来定义数据在图中移动的方式。它允许您构建可对这些输入执行的操作流程图,这些操作从一端开始,从另一端作为输出。

TensorFlow Archi质地

Tensorflow 架构分为三个部分:

  • 预处理数据
  • 建立模型
  • 训练并评估模型

它之所以被称为 Tensorflow,是因为它将输入作为多维数组,也称为 张量。你可以构造一种 流程图 您想要对该输入执行的操作(称为图形)。输入从一端进入,然后流经这个多操作系统,最后作为输出从另一端出来。

这就是它被称为 TensorFlow 的原因,因为张量进入后会流经一系列操作,然后从另一端出来。

Tensorflow 可以在哪里运行?

TensorFlow 硬件,以及 软件需求 可以分为

开发阶段:这是您训练模式的时候。训练通常在您的台式机或笔记本电脑上进行。

运行阶段或推理阶段:训练完成后,Tensorflow 可以在许多不同的平台上运行。你可以在

  • 桌面运行 Windows, macOS 或 Linux
  • 云即 Web 服务
  • iOS 等移动设备 Android

一旦您拥有了训练好的模型,您就可以在多台机器上进行训练,然后可以在不同的机器上运行它。

该模型可以在 GPU 和 CPU 上进行训练和使用。GPU 最初是为视频游戏设计的。2010 年末,斯坦福大学的研究人员发现 GPU 也非常擅长矩阵运算和代数运算,因此它们可以非常快速地进行此类计算。深度学习依赖于大量的矩阵乘法。TensorFlow 在计算矩阵乘法时非常快,因为它是用 C++.虽然它已在 C++TensorFlow 可以被其他语言访问和控制, Python.

最后,TensorFlow 的一个重要特性是 TensorBoard。 张量板 能够以图形和视觉方式监控 TensorFlow 正在做的事情。

TensorFlow 组件

张量

Tensorflow 的名称直接源自其核心框架: 张量在 Tensorflow 中,所有计算都涉及张量。张量是 向量 or 矩阵 n 维表示所有类型的数据。张量中的所有值都具有相同的数据类型,且已知(或部分已知) 塑造. 数据的形状是矩阵或数组的维数。

张量可以源自输入数据或计算结果。在 TensorFlow 中,所有操作都在 图形。图是一组连续发生的计算。每个操作称为 操作节点 并相互连接。

该图概述了节点之间的操作和连接。但是,它不显示值。节点的边缘是张量,即一种用数据填充操作的方式。

TensorFlow 使用图形框架。图形收集并描述训练期间完成的所有系列计算。图形有很多优点:

  • 它可以在多个 CPU 或 GPU 甚至移动操作系统上运行
  • 图表的可移植性允许保存计算以供立即使用或稍后使用。可以保存图表以供将来执行。
  • 图中的所有计算都是通过将张量连接在一起完成的
    • 张量有一个节点和一个边。节点进行数学运算并产生端点输出。边解释节点之间的输入/输出关系。

TensorFlow 为何如此受欢迎?

TensorFlow 是最好的库,因为它是为方便所有人使用而构建的。Tensorflow 库结合了不同的 API,可以构建大规模深度学习架构,如 CNN 或 RNN。TensorFlow 基于图形计算;它允许开发人员使用 Tensorboad 可视化神经网络的构造。此工具有助于调试程序。最后,Tensorflow 的构建是为了大规模部署。它在 CPU 和 GPU 上运行。

与其他深度学习框架相比,Tensorflow 在 GitHub 上最受欢迎。

TensorFlow Algorithms

以下是 TensorFlow 支持的算法:

目前,TensorFlow 1.10 具有以下内置 API:

  • 线性回归:tf.estimator.LinearRegressor
  • 分类:tf.estimator.LinearClassifier
  • 深度学习分类:tf.estimator.DNNClassifier
  • 深度学习抹抹深:tf.estimator.DNNLinearCombinedClassifier
  • 增强树回归:tf.estimator.BoostedTreesRegressor
  • 增强树分类:tf.estimator.BoostedTreesClassifier

TensorFlow 中的计算工作原理

import numpy as np
import tensorflow as tf

在前两行代码中,我们已将 tensorflow 导入为 tf。使用 Python,对库使用短名称是一种常见的做法。这样做的好处是,当我们需要使用库时,可以避免输入库的全名。例如,我们可以将 tensorflow 导入为 tf,并在想要使用 tensorflow 函数时调用 tf

让我们通过简单的 TensorFlow 示例来练习 Tensorflow 的基本工作流程。让我们创建一个将两个数字相乘的计算图。

在示例中,我们将 X_1 和 X_2 相乘。Tensorflow 将创建一个节点来连接操作。在我们的示例中,它称为乘法。当图确定后,Tensorflow 计算引擎将 X_1 和 X_2 相乘。

TensorFlow 中的计算工作
TensorFlow 示例

最后,我们将运行一个 TensorFlow 会话,该会话将使用 X_1 和 X_2 的值运行计算图并打印乘法的结果。

让我们定义 X_1 和 X_2 输入节点。在 Tensorflow 中创建节点时,我们必须选择要创建哪种类型的节点。X1 和 X2 节点将是一个占位符节点。每次我们进行计算时,占位符都会分配一个新值。我们将把它们创建为 TF 点占位符节点。

步骤 1:定义变量

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

当我们创建占位符节点时,我们必须传入数据类型,在这里添加数字,这样我们就可以使用浮点数据类型,我们使用 tf.float32。我们还需要给这个节点命名。当我们查看模型的图形可视化时,这个名字就会显示出来。让我们通过传入一个名为 name 的参数(值为 X_1)将此节点命名为 X_1,现在让我们以同样的方式定义 X_2。X_2。

第 2 步:定义计算

multiply = tf.multiply(X_1, X_2, name = "multiply")

现在我们可以定义执行乘法运算的节点。在 Tensorflow 中,我们可以通过创建 tf.multiply 节点来实现这一点。

我们将 X_1 和 X_2 节点传递给乘法节点。它告诉 tensorflow 将这些节点链接到计算图中,因此我们要求它从 x 和 y 中提取值并将结果相乘。我们还将乘法节点命名为 multiply。这是我们简单计算图的完整定义。

步骤3:执行操作

要在图中执行操作,我们必须创建一个会话。在 Tensorflow 中,它由 tf.Session() 完成。现在我们有了一个会话,我们可以通过调用 session 要求该会话在我们的计算图上运行操作。要运行计算,我们需要使用 run。

当加法运算运行时,它将看到需要获取 X_1 和 X_2 节点的值,因此我们还需要输入 X_1 和 X_2 的值。我们可以通过提供一个名为 feed_dict 的参数来实现这一点。我们为 X_1,2,3 传递值 1,为 X_4,5,6 传递值 2。

我们用 print(result) 打印结果。对于 4×10、18×1 和 4×2,我们应该看到 5、3 和 6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

将数据加载到 TensorFlow 的选项

训练前的第一步 机器学习算法 就是加载数据。加载数据有两种常见方式:

1. 将数据加载到内存中:这是最简单的方法。将所有数据作为单个数组加载到内存中。您可以编写一个 Python 代码。这几行代码与 Tensorflow 无关。

2. Tensorflow 数据管道:Tensorflow 具有内置 API,可帮助您轻松加载数据、执行操作和输入机器学习算法。这种方法非常有效,尤其是当您拥有大型数据集时。例如,众所周知,图像记录非常庞大,无法装入内存。数据管道自行管理内存

使用什么解决方案?

将数据加载到内存中

如果您的数据集不是太大,即小于 10 GB,则可以使用第一种方法。数据可以装入内存。您可以使用一个著名的库 Pandas 来导入 CSV 文件。您将在下一个教程中了解有关 pandas 的更多信息。

使用 Tensorflow 管道加载数据

如果您的数据集很大,第二种方法最有效。例如,如果您的数据集为 50 GB,而您的计算机只有 16 GB 的内存,那么机器就会崩溃。

在这种情况下,您需要构建一个 Tensorflow 管道。管道将批量或小块加载数据。每批数据都将被推送到管道并准备好进行训练。构建管道是一个很好的解决方案,因为它允许您使用并行计算。这意味着 Tensorflow 将在多个 CPU 上训练模型。它促进计算并允许训练强大的神经网络。

您将在下一个教程中看到如何构建一个重要的管道来为您的神经网络提供支持。

简而言之,如果您有一个小型数据集,则可以使用 Pandas 库将数据加载到内存中。

如果您拥有大型数据集并且想要使用多个 CPU,那么使用 Tensorflow 管道会更舒服。

如何创建 TensorFlow 管道

以下是创建 TensorFlow 管道的步骤:

在之前的例子中,我们手动为 X_1 和 X_2 添加了三个值。现在,我们将看到如何将数据加载到 Tensorflow:

步骤 1)创建数据

首先,让我们使用 numpy 库来生成两个随机值。

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

步骤 2)创建占位符

与前面的示例一样,我们创建一个名为 X 的占位符。我们需要明确指定张量的形状。在这种情况下,我们将加载一个只有两个值的数组。我们可以将形状写为 shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

步骤3)定义数据集方法

接下来,我们需要定义数据集,在其中填充占位符 x 的值。我们需要使用方法 tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

步骤 4)创建管道

第四步,我们需要初始化数据将流经的管道。我们需要使用 make_initializable_iterator 创建一个迭代器。我们将其命名为 iterator。然后我们需要调用此迭代器来提供下一批数据 get_next。我们将此步骤命名为 get_next。请注意,在我们的示例中,只有一批数据,只有两个值。

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

步骤5)执行操作

最后一步与上一个示例类似。我们启动一个会话,然后运行操作迭代器。我们将由以下代码生成的值提供给 feed_dict: 麻木。这两个值将填充占位符 x。然后我们运行 get_next 来打印结果。

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

总结

  • TensorFlow 含义: TensorFlow 是近年来最著名的深度学习库。使用 TensorFlow 的实践者可以构建任何深度学习结构,如 CNN、RNN 或简单的人工神经网络。
  • TensorFlow 主要被学术机构、初创公司和大公司使用。Google 几乎在所有 Google 日常产品中都使用 TensorFlow,包括 Gmail、Photo 和 Google 搜索引擎。
  • Google Brain 团队开发了 TensorFlow,以填补研究人员和产品开发人员之间的空白。2015 年,他们公开了 TensorFlow;它的受欢迎程度正在迅速增长。如今,TensorFlow 是 GitHub 上存储库最多的深度学习库。
  • 从业者使用 Tensorflow 是因为它易于大规模部署。它专为在云端或移动设备(如 iOS 和 Android.

Tensorflow 在会话中工作。每个会话由具有不同计算的图形定义。一个简单的例子可以是乘以数字。在 Tensorflow 中,需要三个步骤:

  1. 定义变量
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. 定义计算
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. 执行操作
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Tensorflow 中的一个常见做法是创建一个管道来加载数据。如果您按照以下五个步骤操作,您将能够将数据加载到 TensorFLow:

  1. 创建数据
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. 创建占位符
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. 定义数据集方法
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. 创建管道
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. 执行程序
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))