Python 深度学习库 TensorFlow 简介

TensorFlow 是 Google 创建并发布的一个用于快速数值计算的 Python 库。

它是一个基础库,可以直接用于创建深度学习模型,也可以通过在其之上构建的简化流程的包装库来创建 TensorFlow 模型。

在这篇文章中,您将了解用于深度学习的 TensorFlow 库。

  • 2022 年 6 月更新:更新到 TensorFlow 2.x

通过我的新书 《Python 深度学习》启动您的项目,其中包括逐步教程和所有示例的 Python 源代码文件。

让我们开始吧。

Introduction to the Python Deep Learning Library TensorFlow

Python 深度学习库 TensorFlow 简介
图片来源:Nicolas Raymond,保留部分权利。

什么是 TensorFlow?

TensorFlow 是一个用于快速数值计算的开源库。

它由 Google 创建和维护,并根据 Apache 2.0 开源许可证发布。该 API 名义上是为 Python 编程语言设计的,尽管也可以访问底层 C++ API。

与用于深度学习的其他数值库(如 Theano)不同,TensorFlow 旨在用于研究开发和生产系统,其中最重要的莫过于 Google 搜索中的 RankBrain 和有趣的 DeepDream 项目

它可以在单个 CPU 系统和 GPU 上运行,也可以在移动设备和由数百台机器组成的大规模分布式系统上运行。

如何安装 TensorFlow

如果您已经拥有 Python SciPy 环境,TensorFlow 的安装非常简单。

TensorFlow 适用于 Python 3.3+。您可以按照 TensorFlow 网站上的下载和设置说明进行操作。通过 PyPI 安装可能最简单,用于您的 Linux 或 Mac OS X 平台的 pip 命令的具体说明在下载和设置网页上。最简单的情况下,您只需在命令行中输入以下内容

例外情况是配备 Apple Silicon CPU 的新款 Mac。此特定架构的包名为 tensorflow-macos

如果您愿意,还可以使用 virtualenvdocker 镜像

要使用 GPU,您还需要安装 Cuda 工具包。

TensorFlow 中的第一个示例

计算以有向图的结构来描述数据流和操作。

  • 节点:节点执行计算,具有零个或多个输入和输出。在节点之间移动的数据称为张量,它们是实值多维数组。
  • :图定义了数据流、分支、循环和状态更新。特殊的边可用于同步图中的行为,例如,等待对多个输入的计算完成。
  • 操作:操作是一个命名的抽象计算,可以接受输入属性并生成输出属性。例如,您可以定义一个加法或乘法操作。

使用 TensorFlow 进行计算

这个第一个示例是 TensorFlow 网站上示例的修改版本。它展示了如何将值定义为张量并执行操作。

运行此示例将显示

使用 TensorFlow 进行线性回归

下一个示例来自 TensorFlow 教程的介绍。

此示例展示了如何定义变量(例如 W 和 b)以及作为计算结果的变量(y)。

我们感觉到 TensorFlow 分离了计算的定义和声明。下面,有自动微分的幕后操作。当我们使用函数 mse_loss() 计算 yy_data 之间的差异时,会创建一个图,将函数产生的值连接到 TensorFlow 变量 Wb。TensorFlow 使用此图来推断如何在 minimize() 函数中更新变量。

运行此示例将打印以下输出

您可以在基本使用指南中了解有关 TensorFlow 机制的更多信息。

更多深度学习模型

您的 TensorFlow 安装附带了许多深度学习模型,您可以直接使用和试验它们。

首先,您需要找出 TensorFlow 在您的系统上安装在哪里。例如,您可以使用以下 Python 脚本

例如,这可能是

切换到此目录并注意 models 子目录。其中包含许多带有类似教程注释的深度学习模型,例如

  • 多线程 word2vec 小批量 skip-gram 模型
  • 多线程 word2vec 未批量 skip-gram 模型
  • 用于 CIFAR-10 网络的 CNN
  • 简单、端到端、类似 LeNet-5 的卷积 MNIST 模型示例
  • 带有注意力机制的序列到序列模型

此外,请查看 examples 目录,其中包含一个使用 MNIST 数据集的示例。

TensorFlow 主网站上还有一份优秀的教程列表。它们展示了如何使用不同的网络类型和不同的数据集,以及如何以各种方式使用该框架。

最后,还有 TensorFlow playground,您可以在网络浏览器中直接尝试小型网络。

Python 深度学习需要帮助吗?

参加我的免费为期两周的电子邮件课程,发现 MLP、CNN 和 LSTM(附代码)。

立即点击注册,还将免费获得本课程的 PDF 电子书版本。

TensorFlow 资源

更多资源

总结

在这篇文章中,您了解了用于深度学习的 TensorFlow Python 库。

您了解到它是一个用于快速数值计算的库,专门为开发和评估大型深度学习模型所需的各种操作而设计。

您对 TensorFlow 或本文有任何疑问吗?请在评论中提出您的问题,我将尽力回答。

对《Python 深度学习库 TensorFlow 简介》的 34 条回复

  1. Jatin 2016 年 11 月 29 日 晚上 7:33 #

    这很有帮助。

    你能发布更多使用 TensorFlow 的教程吗?

    谢谢。

  2. Amit Kumar 2017 年 2 月 7 日 晚上 9:58 #

    print sess.run(a+b) 这一行语法不正确。print 是一个方法,所以应该有开括号和闭括号。

    • Jason Brownlee 2017 年 2 月 8 日 早上 9:35 #

      谢谢 Amit,已修复。

    • Asesh 2017 年 4 月 20 日 晚上 5:49 #

      如果是 Python 2.7 呢?不带括号的 print 语句不是有效吗?

      • Jason Brownlee 2017 年 4 月 21 日 早上 8:33 #

        括号会被忽略/不起作用,这使得相同的代码在 Python3 中也能工作。

  3. Walid Ahmed 2017 年 8 月 9 日 凌晨 1:18 #

    嗨 Jason

    我在 TensorFlow 安装中找不到 models 文件夹。
    您能帮忙吗?

  4. ale 2017 年 9 月 9 日 晚上 6:19 #

    嗨 Jason

    本页写着“要使用 GPU,只支持 Linux 并且需要 Cuda 工具包。”然而,我认为如果安装了 Cuda 工具包和 cudNN,Windows 也支持。不是吗?
    谢谢。

    • Jason Brownlee 2017 年 9 月 11 日 中午 12:00 #

      可能吧,在撰写本文时似乎并非如此。

  5. Trevor Wistaff 2018 年 4 月 25 日 早上 8:37 #

    在开始机器学习时,您会建议暂时忽略 TensorFlow,坚持您的入门方案吗?

  6. sagar 2018 年 6 月 29 日 晚上 6:54 #

    嗨 Jason,我有一个关于 TensorFlow 的问题。我正在尝试使用 TensorFlow 实现神经风格迁移。不知道您对如何纠正下面的错误有什么建议。非常感谢。

    tf.reset_default_graph()

    sess = tf.InteractiveSession()

    sess.run(tf.initialize_all_variables())

    sess.run(model[‘input’].assign(content_image))
    回溯(最近一次调用)

    File “”, line 1, in
    sess.run(model[‘input’].assign(content_image))

    文件 “/Users/sherrymukim/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第 889 行,在 run 中
    run_metadata_ptr)

    文件 “/Users/sherrymukim/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第 1105 行,在 _run 中
    self._graph, fetches, feed_dict_tensor, feed_handles=feed_handles)

    文件 “/Users/sherrymukim/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第 414 行,在 __init__ 中
    self._fetch_mapper = _FetchMapper.for_fetch(fetches)

    文件 “/Users/sherrymukim/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第 242 行,在 for_fetch 中
    return _ElementFetchMapper(fetches, contraction_fn)

    文件 “/Users/sherrymukim/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py”,第 278 行,在 __init__ 中
    ‘Tensor. (%s)’ % (fetch, str(e)))

    ValueError: Fetch 参数无法解释为张量。(Tensor Tensor(“Assign_5:0”, shape=(1, 300, 400, 3), dtype=float32_ref) 不是此图的元素。)

    • Jason Brownlee 2018 年 6 月 30 日 早上 6:05 #

      抱歉,我没有 TensorFlow 或风格迁移的示例。我无法给您好的建议。

      也许可以发布到 stackoverflow?

  7. riya 2018 年 7 月 7 日 凌晨 3:52 #

    你好,

    那么,我是否需要明确指出程序应该在支持 CPU 的 TensorFlow 上运行,还是在我没有 GPU 时是隐式的?

    另外,我是深度学习新手,所有这些 API、CUDA、KERAS 等都让我感到困惑。这些都是什么?

    此致

    • Jason Brownlee 2018 年 7 月 7 日 早上 6:19 #

      不,Keras 将根据其配置使用 TensorFlow。TensorFlow 必须配置为使用 GPU,抱歉我不会介绍如何做到这一点。

  8. Jose 2018 年 11 月 7 日 早上 7:54 #

    嗨,Jason!
    一如既往,感谢您在这个精彩的网站上花费的时间和精力!!!
    来自您的线性回归示例的这一部分

    我收到以下错误:

    NameError Traceback (最近一次调用)
    in
    27
    28 # 拟合直线。
    —> 29 for step in xrange(201)
    30 sess.run(train)
    31 if step % 20 == 0

    NameError: name 'xrange' is not defined

    • Jason Brownlee 2018 年 11 月 7 日 下午 2:46 #

      或许确认您安装的是 Python 2.7 或 3.5+?

    • Carlos González 2019 年 2 月 14 日 早上 8:16 #

      Jose……去掉“x”……直接使用 range(201)……

  9. Khalil 2019 年 8 月 28 日 下午 3:37 #

    我尝试了很多次,但仍然是同样的问题,之前我还在同一台电脑上使用 TensorFlow。只是我安装了 Windows 并尝试再次安装 TensorFlow,但出现了错误。
    ImportError 回溯 (最近一次调用)
    ~\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py 在
    57
    —> 58 from tensorflow.python.pywrap_tensorflow_internal import *
    59 from tensorflow.python.pywrap_tensorflow_internal import __version__

    ~\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py 在
    27 return _mod
    —> 28 _pywrap_tensorflow_internal = swig_import_helper()
    29 del swig_import_helper

    ~\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py 在 swig_import_helper()
    23 try
    —> 24 _mod = imp.load_module(‘_pywrap_tensorflow_internal’, fp, pathname, description)
    25 finally

    ~\Miniconda3\lib\imp.py 在 load_module(name, file, filename, details) 中
    241 else
    –> 242 return load_dynamic(name, filename, file)
    243 elif type_ == PKG_DIRECTORY

    ~\Miniconda3\lib\imp.py 在 load_dynamic(name, path, file) 中
    341 name=name, loader=loader, origin=path)
    –> 342 return _load(spec)
    343

    ImportError: DLL 加载失败:动态链接库 (DLL) 初始化例程失败。

    处理上述异常时,发生了另一个异常

    ImportError 回溯 (最近一次调用)
    in
    —-> 1 import tensorflow as tf

    ~\Miniconda3\lib\site-packages\tensorflow\__init__.py 在
    26
    27 # pylint: disable=g-bad-import-order
    —> 28 from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
    29 from tensorflow.python.tools import module_util as _module_util
    30

    ~\Miniconda3\lib\site-packages\tensorflow\python\__init__.py 在
    47 import numpy as np
    48
    —> 49 from tensorflow.python import pywrap_tensorflow
    50
    51 # 协议缓冲区

    ~\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py 在
    72 对于一些常见的原因和解决方案。请在寻求帮助时包含此错误消息上方的完整堆栈跟踪。””” % traceback.format_exc()
    73
    —> 74 raise ImportError(msg)
    75
    76 # pylint: enable=wildcard-import,g-import-not-at-top,unused-import,line-too-long

    ImportError: 回溯(最近一次调用)
    文件 “C:\Users\Khalil\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”,第 58 行,在
    from tensorflow.python.pywrap_tensorflow_internal import *
    文件 “C:\Users\Khalil\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”,第 28 行,在
    _pywrap_tensorflow_internal = swig_import_helper()
    文件 “C:\Users\Khalil\Miniconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”,第 24 行,在 swig_import_helper 中
    _mod = imp.load_module(‘_pywrap_tensorflow_internal’, fp, pathname, description)
    文件 “C:\Users\Khalil\Miniconda3\lib\imp.py”,第 242 行,在 load_module 中
    返回 load_dynamic(name, filename, file)
    文件 “C:\Users\Khalil\Miniconda3\lib\imp.py”,第 342 行,在 load_dynamic 中
    返回 _load(spec)
    ImportError: DLL 加载失败:动态链接库 (DLL) 初始化例程失败。

    未能加载原生 TensorFlow 运行时。

    请参阅 https://tensorflowcn.cn/install/errors

    了解一些常见原因和解决方案。寻求帮助时请包含整个堆栈跟踪
    此错误消息上方。

  10. JG 2020 年 3 月 7 日 早上 6:45 #

    嗨,Jason,

    我尝试遵循这个 tensorflow 教程来记住 tensorflow 的“复杂结构”如何工作(tf 1.x 版本与 Keras),以下是我发现问题的主要结论

    1) 由于当前的 tensorflow 版本是 2.x,它是“急切执行”的,因此 sessio() 和 run() 等方法不可直接使用,您为 tensorflow 1.x 编写的线性回归案例研究必须通过以下方式进行升级

    1.1) 或在 tf 2.x“急切执行”下实现,我得出结论,您所有的旧代码行都必须放在一个嵌套中,例如
    with tf.compat.v1.Session() as sess

    此外,还要更新一些张量的方法:“tf.compat.v1”,对于 v2 中的张量,例如
    tf.compat.v1.Session()
    f.compat.v1.train.GradientDescentOptimizer(0.5)
    tf.compat.v1.global_variables_initializer()

    1.2) 或通过在旧代码开头添加初始语句来禁用“急切执行”来实现 tf 2.x
    tf.compat.v1.disable_eager_execution()

    在两种情况下我都得到了相同的结果

    1.3) 我还尝试直接使用 tf 2.x 版本的“急切训练”的新方法,将旧代码翻译成
    with tf.GradientTape() as tape

    但应用于更“复杂”的结构,例如新的损失和 grad = tape.gradient(loss, w)……所以我放弃了 🙂

    1.4) 我还看到新 tensorflow 2.x 中的概念正试图应用 keras(例如 tf.keras…)的新简单想法并实现“急切执行”,……但现在它与 tf 1.x 版本令人困惑……所以我现在不知道在这种当前状态下谁会直接应用 tensorflow……:-)

    此致,
    JG

  11. JG 2020 年 3 月 8 日 凌晨 3:42 #

    好的,我会去做的。

    无论如何,我指的是将纯粹的 Tensorflow 应用于机器学习代码的研发……但可能没有多少优势,如果有的话,而不是使用友好的 keras 包装器。

  12. Muhammad Iqbal Bazmi Hyderabad 2020 年 10 月 13 日 凌晨 3:19 #

    将其升级到 TensorFlow 2.0

  13. Krishna 2020 年 11 月 2 日 下午 3:47 #

    成为 TensorFlow 专家的最佳途径是什么?

  14. Indroneel 2022 年 1 月 19 日 晚上 10:51 #

    这个示例不需要更新到 TF2.0 吗?我尝试运行它,但只有在删除了 .Session() 调用之后才运行?

  15. ahmed gamal 2022 年 6 月 17 日 凌晨 3:59 #

    你能告诉我关于 tensorflow 和 keras 的教程吗

  16. Salami Mariam 2022 年 7 月 29 日 早上 7:22 #

    你好,我可以在没有 Python 编程知识的情况下开始这门课程吗

    • James Carmichael 2022 年 7 月 29 日 早上 10:05 #

      嗨 Salami……您当然可以开始这门课程!您将在深度学习的应用中学习实用的 Python。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。