TensorFlow简介

TensorFlow简介

本节将从五个方面对 TensorFlow 进行一个简单的介绍。包括 TensorFlow 是什么、为什么选择TensorFlow、TensorFlow 的发展、TensorFlow 能干什么以及 TensorFlow 的核心理念。

1. 什么是 TenosrFlow

TensorFlow 是一个开源软件库,用于各种感知和语言理解任务的机器学习。—— Wiki 百科

这种过于官方化的定义可能比较难于理解,我们在这里给出一个比较容易理解的解释:TensorFlow 是一个开源的机器学习的框架,我们可以使用 TensorFlow 来快速地构建神经网络,同时快捷地进行网络的训练、评估与保存
也正是因为 TensorFlow 是一个开源的软件库,因此只要我们安装了 TensorFlow,我们就可以使用import 的方式来引入。

import tensorflow as tf

2. 为什么选择 TensorFlow 以及优缺点

谈到为什么选择 TensorFlow,有很多同学就会问“为什么不使用 PyTorch?”、“为什么不自己实现网络而必须使用框架呢?”等等一系列问题。

首先我们回答“为什么不自己去实现网络结构而必须使用框架”的问题:

实际上如果有能力实现神经网络结构,我们完全可以自己动手实现我们所需要的神经网络,但是这样会带来一个问题:工作量太大,我们会把我们大部分的精力花费在底层的构建而不是主要的模型的构建上。

在当下的潮流之中,使用框架是大势所趋,使用框架能够帮助我们节省很多的底层的、繁琐的、容易出错的工作。比如在 Web 开发之中会使用 Django 和 Spring Boot 等框架,在桌面开发中会使用 MFC、QT 等框架,而在机器学习领域我们可以选择使用 TensoFlow 框架。

另外通过使用框架,我们可以把我们的精力更多的放在上层的模型的构建之上,一方面可以帮助我们专注于高层次的工作,另一方面又可以帮助我们避免底级的一些错误。

现在我们可以回答第二个问题,为什么不使用其他的机器学习框架

说到这里我们不得不说一下 TensorFlow 的优点,相比于其他的机器学习框架,Tensorflow 框架是最适用于工业部署的一个机器学习框架,换句话说,TensorFlow 非常适用于在生产环境中进行应用。下面我们来细数一下 TensorFlow 的优点。

  • 整个项目开源;
  • 文档非常全面而且包含中文教程,学习成本比较低;
  • 其内部含有很多高阶神经网络API,我们可以用一个语句来生产一个网络;
  • 使用其内部的TensorFlow Service可以实现快速上线部署;
  • 得益于高阶API,使用TensorFlow进行神经网络开发非常迅速;
  • 内部内置TesnorBoard工具,可以很好的进行可视化工作;
  • 对移动设备的支持非常友好;
  • TensorFlow内部内置分布式训练工具,开源很方便地进行分布式训练。

讨论了这么多优点,TensorFlow 就没有缺点吗?当然有,TensorFlow 也有一些显而易见的缺点:

  • TensorFlow程序的调试较为困难,我们不能深入其内部进行调试;
  • TensorFlow的许多高阶API导致我们修改我们自己的模型比较困难(相对而言);
  • TensorFlow1.x与TensorFlow2.x的差别比较大,以前的代码迁移比较困难。

总结来说,如果你想进行神经网络的快速构建、训练与部署,那么 TensorFlow 是你非常好的选择,但是如果你想从事一些科研的方面的工作,那么 TensorFlow 可能并没有 Pytorch 那么容易驾驭。

3. TensoFlow的发展

很多人都知道 TensorFlow 是从 1.x 版本发展到 2.x 版本的,而且目前网络上很多 TensorFlow 的教程都还停留在 TensorFlow1.x 阶段。在这里,我便带领大家回顾一下 TensorFlow 的发展历程:

  • 从 2010 年开始,谷歌大脑团队便在其内部使用 DistBelief 框架进行机器学习的相关工作,后来经过不断地简化与重构逐渐形成了 TesnorFlow,这便是 TensorFlow 的前身,但是此时的 TensorFlow还没有开源;
  • 2015 年,年轻的 TensorFlow 正式开源,此时的 TensorFlow 依然处在 0.x 的非正式版本;
  • 一直到 2016 年 12 月期间,TensorFlow 逐渐支持了分布式、移动设备 与Windows 系统;
  • 2017 年,TensorFlow 正式发布了 1.0.0 版本,由此 TensorFlow 正式版发布;
  • 直到 2019 年期间,TensorFlow 逐步加入了 TPU、张量处理单元等工具;
  • 2019 年 10 月,TensorFlow2.0 正式发布,这也标志着 TensorFlow 进入了 2.0 时代。

在当前,TensorFlow 的最新稳定版本为 2.2 版本

由于 TensorFlow1.x 与 TensorFlow2.x 的差别较大,因此在我们的学习与使用当中,我们应当首先学习TensorFlow2.x 版本。相比于T ensorFlow1.x,TensorFlow2.x 最大的优点就是加入了 Keras,而TensorFLow 也是默认采用 Eager 模式来构建我们的模型,这对于一些初学者来说是巨大的福音,而这在TensorFlow1.x时代是没有办法实现的。

依托于谷歌强大的影响与号召力,TenorFlow 的用户群体非常巨大,而且使用 TensorFlow 得到的训练结果非常优秀,对于机器学习的初学者来说,这确实是一件不可多得的珍宝。

4. TensorFlow能干什么

其实这个问题在前面的概念中已经涉及了,TensorFlow主要负责机器学习的每一个步骤,包括:

  • 模型的构建;
  • 模型的训练;
  • 模型的保存与加载;
  • 模型的评估;
  • 使用加速器提升性能;
  • 在生产环境中部署网络;
  • 对模型的数据进行可视化(TensorBoard);
  • 其他功能。

通过这样的梳理我们可以发现,TensorFlow 可以满足我们在机器学习中的从模型构建到模型的部署的绝大部分的工作需求。

5. TensorFlow的核心理念

前面介绍了这么多,我们现在可以深入 TensorFlow 内部来简单了解一下 TensorFlow 的核心理念。

简单来说, TensorFlow 的核心理念包括计算图与张量(Tensor)。

5.1 计算图

在 TensorFlow 中,我们首先构建模型,TensorFLow会根据我们的模型来构建一个计算图,然后TensorFLow 会在该计算图中进行相应的运算、迭代与求梯度等操作,从而得到我们最终想要的结果。

下面是一个 TensorFlow 模型的计算图,目前诸位同学可以将其理解为模型图或者数据流动图。

TensorFlow简介_第1张图片

该图为在 TensorBoard 之中得到的计算图,其中的节点表示运算或者网络层,而线条表示数据流动。

值得一提的是,在 TensorFLow1.x 版本中计算图是与会话结合在一起的,在TensorFLow2.x之中我们不需要手动启动会话,但是计算图仍然是 TensorFlow 的核心概念之一。

5.2 张量

张量(Tensor)就是 TensorFlow 的名字的由来之一,TensorFLow 顾名思义就是张量流动的意思,由此可见张量为 TensorFlow 的最核心的概念之一。

张量在TensorFLow之中以数组的形式存储,张量的主要组成要素包括:

  • 名称(name);
  • 形状(shape);
  • 类型(dtype)。

简单的理解,我们可以将张量看作多维数组,因为是多维数组,因此可以包含三维或者三维以上的维度,对于初学者来说可能不是特别友好。

在 TensorFLow 之中我们可以很轻松的构建一个张量,比如以下代码:

x = tf.ones((64, 28, 28, 3))

由此我们构建了一个思维张量,他的第一维是 64 个维度,第二维与第三维都是 28 个维度,第四维是3 个维度。

对于二维张量,我们可以理解为一个平面;对于三位数据,我们可以理解为一个空间;而对于四维数据我们可以理解为一个在三维空间的外面又增加了一个维度;五维张量则是又增加一个维度…

在TensorFlow之中我们一般将第一维数据作为批大小来处理(Batch_Size),也就是一批数据中含有多少个样本子数据。更一般的,在不确定批大小的情况下,我们直接将第一维设置为 None,比如:

x = tf.ones((None, 28 ,28, 3))

总结

TensorFlow 是一个相对比较完整的机器学习框架,无论是对于初学者还是开发人员来说都是非常不错的选择。如果想要入门机器学习或者在机器学习方面有所深造,那么 TensorFLow 是非常不错的选择。
28 ,28, 3))


## 总结

TensorFlow 是一个相对比较完整的机器学习框架,无论是对于初学者还是开发人员来说都是非常不错的选择。如果想要入门机器学习或者在机器学习方面有所深造,那么 TensorFLow 是非常不错的选择。

你可能感兴趣的:(深度学习,tensorflow,深度学习)