- 发布日期
是什么
Theano 是一个面向多维数组的 Python 数学库。官方文档把它描述为一个让用户能够高效地定义、优化并求值涉及多维数组的数学表达式的 Python 库[1]。它也被描述为用于数学表达式(尤其是矩阵值表达式)的 Python 库与优化编译器,编译后的结果可以在 CPU 或 GPU 架构上高效运行[2]。两种说法指向同一点:用户用 Python 写出表达式,由库负责把它变成运行速度更快的代码,而不是像普通的解释执行那样一步一步算。优化编译器在一般意义上是把一段计算的描述改写成等价但更快的形式,Theano 做的是数组运算上的这件事。
Theano 于 2007 年首次发布,主要由蒙特利尔大学的蒙特利尔学习算法研究所(Montreal Institute for Learning Algorithms)开发[2]。官方文档说,它自 2007 年起就在支撑大规模、计算密集的科学工作[1],也就是那种算术开销远大于其他开销的数值实验。这正是它被设计来面对的场合。
主要特点
官方文档列出的特性包括:与 NumPy 紧密集成、透明地使用 GPU、高效的符号求导、速度与稳定性优化,以及动态生成 C 代码[1]。每一条对应一个实际障碍。
与 NumPy 紧密集成意味着用 NumPy 创建和处理的数组可以直接放进 Theano 的表达式,不需要额外转换步骤,已有的代码和工作习惯可以沿用。
透明地使用 GPU 意味着同一份程序可以放到图形处理器上运行;官方文档称,GPU 做数据密集的计算可以比 CPU 快至多 140 倍,但仅限 float32[1]。这个限定很重要:这种加速针对 32 位浮点数,需要更高精度的计算并不能以同样方式受益。
符号求导来自库保存表达式的方式:它保存的不是一串已经执行完的操作,而是一段计算的描述。正因为这份描述还在手上,库可以替用户求出该表达式的导数。许多数值优化过程最费工夫的准备环节就是手推导数,于是这一步被交给程序完成。
速度与稳定性优化加上动态生成 C 代码,指的是把表达式改写成更好的形式,并在运行时编译成机器码,而不是解释执行。
课堂与文献
官方文档说 Theano 好用到可以在课堂上讲,并举例蒙特利尔大学的 IFT6266 课程[1]。学生可以用普通的 Python 写数组计算,把编译和用哪块设备运行都交给库,不必为一份课程作业另学一门编译型语言。
对于用 Theano 完成并发表的工作,官方文档请使用者引用两篇论文:发表于 SciPy 2010 的《Theano: A CPU and GPU Math Expression Compiler》,作者是 Bergstra、Breuleux、Bastien、Lamblin、Pascanu、Desjardins、Turian、Warde-Farley 和 Bengio[1];以及 NIPS 2012 深度学习研讨会的《Theano: new features and speed improvements》[1]。这一请求说明项目希望以什么方式被记住,通过记录其性能与较新功能的两篇文献。
主要开发的停止
2017 年 9 月 28 日,Pascal Lamblin 发布了一则来自约书亚·本吉奥(Yoshua Bengio)的消息,称 1.0 版本之后将停止主要开发[2]。
它做了什么
用一句话说:Theano 让人用 Python 描述数组计算,自动求导,并在不修改程序的前提下放到 GPU 上运行。它从 2007 年起被用于大规模科学计算,又简单到可以进大学课堂[1]。主要开发在 2017 年结束[2];软件与文档留下来,记录了一种把高级语言和编译后端结合起来做数值计算的思路。
注释与来源
- Theano 0.7 documentationhttp://theano.readthedocs.io/en/rel-0.7/
- Theano (software)https://en.wikipedia.org/wiki/Theano_(software)
引用本页: Theano. TellWorld, https://www.tellworld.net/zh/products/theano. 更新于 2026-11-08