Theano 是一个用于快速数值计算的 Python 库,可以在 CPU 或 GPU 上运行。
它是 Python 深度学习的关键基础库,你可以直接使用它来创建深度学习模型,或者使用包装库来大大简化这个过程。
在这篇文章中,你将了解 Theano Python 库。
通过我的新书《使用 Python 进行深度学习》启动你的项目,书中包含分步教程和所有示例的 Python 源代码文件。
让我们开始吧。

Python 深度学习库 Theano 简介
图片由 Kristoffer Trolle 拍摄,部分权利保留。
什么是 Theano?
Theano 是一个在 BSD 许可证下发布的开源项目,由加拿大魁北克蒙特利尔大学的 LISA(现为 MILA)小组开发(Yoshua Bengio 的所在地)。它以一位希腊数学家的名字命名。
Theano 的核心是一个用于 Python 数学表达式的编译器。它知道如何获取你的结构并将其转换为使用 NumPy、高效的原生库(如 BLAS)和原生代码(C++)的非常高效的代码,以尽可能快地在 CPU 或 GPU 上运行。
它使用大量巧妙的代码优化来尽可能地榨取硬件性能。如果你对代码中的数学优化细节感兴趣,请查看这个有趣的列表。
Theano 表达式的实际语法是符号式的,这对于习惯于普通软件开发的初学者来说可能难以理解。具体来说,表达式是在抽象意义上定义的,经过编译后才能实际用于计算。
它专门设计用于处理深度学习中大型神经网络算法所需的计算类型。它是同类库中最早的之一(开发始于 2007 年),被认为是深度学习研究和开发的行业标准。
如何安装 Theano
Theano 提供了针对主要操作系统(Windows、OS X 和 Linux)的详细安装说明。请阅读适用于你的平台的《安装 Theano 指南》。
Theano 假定一个正常工作的 Python 2 或 Python 3 环境,并安装了 SciPy。有多种方法可以简化安装,例如使用 Anaconda 快速在你的机器上设置 Python 和 SciPy,以及使用 Docker 镜像。
在具有正常工作的 Python 和 SciPy 环境下,从 PyPI 使用 pip 安装 Theano 相对简单,例如:
1 |
pip install Theano |
在撰写本文时,Theano 的最后一个官方版本是 0.8 版,发布于 2016 年 3 月 21 日。
可能会有新版本发布,你可能需要更新以获取错误修复和效率改进。你可以使用 pip 升级 Theano,如下所示:
1 |
sudo pip install --upgrade --no-deps theano |
你可能希望使用直接从 Github 检出的 Theano 最新版本。
对于一些使用最新 API 更改的包装库,这可能是必需的。你可以通过 Github 检出直接安装 Theano,如下所示:
1 |
pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git |
现在你已经可以在 CPU 上运行 Theano 了,这对于小型模型的开发来说已经足够了。
大型模型在 CPU 上运行可能会很慢。如果你有 Nvidia GPU,你可能需要考虑配置 Theano 以使用你的 GPU。阅读 Linux 上的 GPU 使用指南 或 Mac OS X 上的 GPU 使用指南,以设置 Theano 使用 GPU,并阅读 使用 GPU 指南,了解如何测试其是否正常工作。
简单的 Theano 示例
本节我们将演示一个简单的 Python 脚本,让你对 Theano 有初步了解。
它取自《Theano 概览指南》。在此示例中,我们定义了两个符号浮点变量 a 和 b。
我们定义了一个使用这些变量的表达式 (c = a + b)。
然后,我们使用 Theano 将这个符号表达式编译成一个函数,以便稍后使用。
最后,我们通过代入一些实际值并使用 Theano 底层高效编译的代码执行计算来使用我们编译好的表达式。
1 2 3 4 5 6 7 8 9 10 11 12 |
import theano from theano import tensor # 声明两个符号浮点标量 a = tensor.dscalar() b = tensor.dscalar() # 创建一个简单表达式 c = a + b # 将表达式转换为可调用对象,该对象接收 (a, b) 值作为输入并计算 c 的值 # 值作为输入并计算 c 的值 f = theano.function([a,b], c) # 将 1.5 绑定到 'a',将 2.5 绑定到 'b',并评估 'c' assert 4.0 == f(1.5, 2.5) |
运行此示例不会产生任何输出。断言 1.5 + 2.5 = 4.0 为真。
这是一个有用的示例,它让你了解到符号表达式如何定义、编译和使用。你可以看到这如何扩展到深度学习所需的大型向量和矩阵操作。
Theano 的扩展和包装器
如果你是深度学习新手,你不必直接使用 Theano。
事实上,强烈建议你使用众多流行的 Python 项目之一,这些项目使得 Theano 在深度学习中更容易使用。
这些项目在 Python 中提供了数据结构和行为,专门设计用于快速可靠地创建深度学习模型,同时确保 Theano 在底层创建和执行快速高效的模型。
这些库公开的 Theano 语法数量各不相同。
- 例如,Lasagne 库提供了用于创建深度学习模型的便捷类,但仍然要求你了解并使用 Theano 语法。这对于那些了解或愿意学习一点 Theano 的初学者来说很好。
- 另一个例子是 Keras,它完全隐藏了 Theano,并提供了一个非常简单的 API 来创建深度学习模型。它隐藏 Theano 如此之好,以至于它实际上可以作为另一个流行的基础框架 TensorFlow 的包装器运行。
我强烈建议你直接对 Theano 进行一些实验,然后选择一个包装库来学习和实践深度学习。
有关基于 Theano 构建的库的完整列表,请参阅 Theano Wiki 上的相关项目指南。
Python 深度学习需要帮助吗?
参加我的免费为期两周的电子邮件课程,发现 MLP、CNN 和 LSTM(附代码)。
立即点击注册,还将免费获得本课程的 PDF 电子书版本。
更多 Theano 资源
正在寻找更多 Theano 资源?请查看以下内容。
- Theano 官方主页
- Theano GitHub 仓库
- Theano:Python 中的 CPU 和 GPU 数学编译器 (2010) (PDF)
- 基于 Theano 构建的库列表
- Theano 配置选项列表
Theano 和深度学习教程
获取 Theano 帮助
总结
在这篇文章中,你了解了用于高效数值计算的 Theano Python 库。
你了解到它是用于深度学习研究和开发的基础库,可以直接用于创建深度学习模型,也可以通过在其之上构建的便捷库(如 Lasagne 和 Keras)来使用。
你对 Theano 或 Python 深度学习有任何疑问吗?请在评论中提出你的问题,我将尽力回答。
嗨,Jason,
我很好奇你为什么在你的深度学习书中选择 Keras 而不是 Lasagne。你有没有这两者的优缺点列表?
也许是审美方面的,但我发现 Keras 界面更简洁明了,这实际上也是该项目的目标。
我还没有对 Keras 和 Lasagne 进行深入比较,但在这篇文章中有一些关于深度学习库的比较
https://machinelearning.org.cn/popular-deep-learning-libraries/
我能在蒙特利尔大学见到 Theano 的优秀开发者吗?
也许可以。