Developer(s) | Montreal Institute for Learning Algorithms (MILA), University of Montreal |
---|---|

Initial release | 2007 |

Stable release | 1.0.5 ^{[1]}
/ 27 July 2020 |

Repository | github |

Written in | Python, CUDA |

Platform | Linux, macOS, Windows |

Type | Machine learning library |

License | The 3-Clause BSD License |

Website | www |

**Theano** is a Python library and optimizing compiler for manipulating and evaluating mathematical expressions, especially matrix-valued ones.^{[2]}
In Theano, computations are expressed using a NumPy-esque syntax and compiled to run efficiently on either CPU or GPU architectures.

Theano is an open source project^{[3]} primarily developed by the Montreal Institute for Learning Algorithms (MILA) at the Université de Montréal.^{[4]}

The name of the software references the ancient philosopher Theano, long associated with the development of the golden mean.

On 28 September 2017, Pascal Lamblin posted a message from Yoshua Bengio, Head of MILA: major development would cease after the 1.0 release due to competing offerings by strong industrial players.^{[5]} Theano 1.0.0 was then released on 15 November 2017.^{[6]}

On 17 May 2018, Chris Fonnesbeck wrote on behalf of the PyMC development team^{[7]} that the PyMC developers will officially assume control of Theano maintenance once they step down. On 29 January 2021, they started using the name Aesara for their fork of Theano.^{[8]}

The following code is the original Theano's example. It defines a computational graph with 2 scalars `a` and `b` of type *double* and an operation between them (addition) and then creates a Python function *f* that does the actual computation.^{[9]}

```
import theano
from theano import tensor
# Declare two symbolic floating-point scalars
a = tensor.dscalar()
b = tensor.dscalar()
# Create a simple expression
c = a + b
# Convert the expression into a callable object that takes (a, b)
# values as input and computes a value for c
f = theano.function([a, b], c)
# Bind 1.5 to 'a', 2.5 to 'b', and evaluate 'c'
assert 4.0 == f(1.5, 2.5)
```