Theano

原作者| 蒙特利尔大学的蒙特利尔学习算法研究所（英语：Montreal Institute for Learning Algorithms）（MILA）
開發者| PyMC开发团队
首次发布| 2007年，​18年前​（2007）
当前版本|

* 2.31.7（2025年7月8日；穩定版本）[1]

源代码库|

* github.com/pymc-devs/pytensor

编程语言| Python, CUDA
平台| Linux, macOS, Windows
类型| 机器学习, 函式库
许可协议| 3条款BSD许可证
网站| pytensor.readthedocs.io/en/latest/

Theano及其分叉PyTensor，是一个Python库和优化的编译器，用来操纵和求值数学表达式特别是矩阵值表达式[2]。在其中，计算使用NumPy风格的语法来表达并被编译，用来在CPU或者GPU架构上高效的运行。

## 历史

[编辑]

Theano是开源项目[3]，主要由蒙特利尔大学的蒙特利尔学习算法研究所（英语：Montreal Institute for Learning Algorithms）（MILA）开发[4]。软件名字取自古代哲学家Theano（英语：Theano (philosopher)）。在2017年9月28日，Pascal Lamblin发布了来自约书亚·本希奥的一则信息，MILA负责人说：由于更强大的工业参与者的竞争，主要的开发在1.0发行之后将会停止[5]。Theano 1.0.0随后在2017年11月15日发行[6]。

在2018年5月17日，Chris Fonnesbeck代表PyMC开发团队写道：PyMC开发者将在他们退场后取得对Theano维护的控制权[7]。在2021年1月绝大部份的Theano代码基被重新建造，并增加了通过JAX和Numba的编译，修订后的这个计算后端以新名字Aesara发行。2022年11月28日，PyMC团队宣布采用从Aesara计划分叉出PyTensor[8]。

## 样例代码

[编辑]

下列代码以PyTensor用作介绍的例子：

import pytensor
from pytensor import tensor as pt

# 声明2个符号浮点标量
a = pt.dscalar("a")
b = pt.dscalar("b")

# 建立一个简单的表达式
c = a + b

# 将这个表达式转换成一个可调用对象，
# 它接收'(a, b)'值作为输入并计算出一个值给'c'
f_c = pytensor.function([a, b], c)

assert f_c(1.5, 2.5) == 4.0

# 计算样例表达式关于'a'的梯度
dc = pytensor.grad(c, a)

f_dc = pytensor.function([a, b], dc)

assert f_dc(1.5, 2.5) == 1.0

>>> import pytensor
>>> from pytensor import tensor as pt
>>>
>>> # 通过'pytensor.function'编译函数还能优化表达式图
>>> # 它会移除不必要的运算并将特定运算替代为更有效的运算
>>>
>>> v = pt.vector("v")
>>> M = pt.matrix("M")
>>>
>>> d = a/a + (M + a).dot(v)
>>>
>>> pytensor.dprint(d)
Add [id A]
├─ ExpandDims{axis=0} [id B]
│  └─ True_div [id C]
│     ├─ a [id D]
│     └─ a [id D]
└─ dot [id E]
├─ Add [id F]
│  ├─ M [id G]
│  └─ ExpandDims{axes=[0, 1]} [id H]
│     └─ a [id D]
└─ v [id I]
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
>>>
>>> f_d = pytensor.function([a, v, M], d)
>>>
>>> # 'a/a' -> '1'而点积被替代为BLAS函数(i.e. CGemv)
>>> pytensor.dprint(f_d)
Add [id A] 5
├─ [1.] [id B]
└─ CGemv{inplace} [id C] 4
├─ AllocEmpty{dtype='float64'} [id D] 3
│  └─ Shape_i{0} [id E] 2
│     └─ M [id F]
├─ 1.0 [id G]
├─ Add [id H] 1
│  ├─ M [id F]
│  └─ ExpandDims{axes=[0, 1]} [id I] 0
│     └─ a [id J]
├─ v [id K]
└─ 0.0 [id L]
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>

## 参见

[编辑]

* 深度学习软件比较（英语：Comparison of deep learning software）
* 可微分编程

## 引用

[编辑]

1. ^ Release 2.31.7. 2025年7月8日  [2025年7月19日].
2. ^ Bergstra, J.; O. Breuleux; F. Bastien; P. Lamblin; R. Pascanu; G. Desjardins; J. Turian; D. Warde-Farley; Y. Bengio. Theano: A CPU and GPU Math Expression Compiler (PDF). Proceedings of the Python for Scientific Computing Conference (SciPy) 2010. 30 June 2010  [2020-11-06]. （原始内容存档 (PDF)于2020-11-01）.
3. ^ Github Repository.  [2020-11-06]. （原始内容存档于2020-11-16）.
4. ^ deeplearning.net.  [2020-11-06]. （原始内容存档于2017-12-13）.
5. ^ Lamblin, Pascal. MILA and the future of Theano. theano-users (邮件列表). 28 September 2017  [28 September 2017]. （原始内容存档于2011-01-22）.
6. ^ Release Notes – Theano 1.0.0 documentation.  [2020-11-06]. （原始内容存档于2020-09-14）.
7. ^ Developers, PyMC. Theano, TensorFlow and the Future of PyMC. Medium. 2019-06-01  [2019-08-27]. （原始内容存档于2020-08-06） （英语）.
8. ^ PyMC forked Aesara to PyTensor.  [2023-08-17]. （原始内容存档于2023-07-18）.

## 外部链接

[编辑]

* 官方网站 (GitHub)
* Theano（页面存档备份，存于互联网档案馆） at Deep Learning, Université de Montréal

* 查
* 论
* 编

深度学习软件（英语：Comparison of deep learning software）

开源软件|

* Apache Singa（英语：Apache Singa）
* Blocks（英语：Blocks）
* Caffe
* Deeplearning4j
* Dlib（英语：Dlib）
* Microsoft Cognitive Toolkit
* MXNet
* OpenNN
* ONNX Runtime
* PyTorch
* scikit-learn
* LangChain
* Gradio
* RETURNN（英语：RETURNN）
* TensorFlow
* Keras
* Theano
* Torch（英语：Torch (machine learning)）

专有|

* 蘋果公司 Core ML
* IBM 沃森
* Neural Designer（英语：Neural Designer）
* Wolfram Mathematica
* MATLAB Deep Learning Toolbox

* 分类
* 比较

* 查
* 论
* 编

可微分计算

概论|

* 可微分编程
* 自動微分
* 张量微积分
* 信息几何
* 统计流形
* 神经形态工程（英语：Neuromorphic engineering）
* 模式识别
* 运算学习理论（英语：Computational learning theory）
* 归纳偏置

概念|

* 梯度下降
* SGD（英语：Stochastic gradient descent）
* 聚类
* 回归
* 过拟合
* 幻觉
* 对抗（英语：Adversarial machine learning）
* 注意力
* 卷积
* 損失函數
* 反向传播
* 激活函数
* softmax
* sigmoid
* ReLU
* 正则化
* 数据集
* 扩散（英语：Diffusion process）
* 自回归

应用|

* 机器学习
* 人工神经网络
* 深度学习
* 科学计算
* 人工智能
* 語言模型
* 大型语言模型

硬件|

* TPU
* VPU
* IPU（英语：Graphcore）
* 憶阻器
* SpiNNaker（英语：SpiNNaker）

软件库|

* Theano
* TensorFlow
* Keras
* PyTorch
* JAX
* Flux.jl（英语：Flux (machine-learning framework)）

* 主题
* 计算机编程
* 技术
* 分类
* 人工神经网络
* 机器学习

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板