译者:Python 文档协作翻译小组,原文:Theano at a Glance。
本文以 CC BY-NC-SA 4.0 协议发布,转载请保留作者署名和文章出处。
Python 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。
Theano是一个Python库,它允许你定义、优化和求值数学表达式,特别是具有多维数组(numpy.ndarray)的数学表达式。对于涉及大量数据的问题,使用Theano可以获得与手工编写的C实现不相上下的速度。它还可以通过利用最近的GPU超过CPU上的C多个数量级。
Theano将计算机代数系统(CAS)的各个方面与优化编译器的各个方面相结合。它还可以为许多数学运算生成定制的C代码。CAS与优化编译的这种组合对于复杂数学表达式重复求值并且求值速度很关键的任务特别有用。对于许多不同的表达式每个求值一次的情况,Theano可以最小化编译/分析的开销,但仍然提供诸如自动微分等符号特征。
Theano的编译器对这些符号表达式应用许多不同复杂度的优化。这些优化包括,但不限于:
x*y/x -> y
, --x -> x
)GEMM
)Theano是在LISA实验室编写的,以支持高效机器学习算法的快速开发。Theano以希腊数学家命名,她可能是毕达哥拉斯的妻子。Theano根据BSD许可证(link)发布。
这里是如何使用Theano的示例。它没有展示Theano的许多功能,但它具体说明了Theano是什么。
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)
Theano不是一个正常意义上的编程语言,因为你在Python中编写一个程序来为Theano构建表达式。在某种程度上它仍然像一个编程语言,因为你必须
a,b
)并给出它们的类型可以把theano.function
看作一个编译器的接口,它从纯粹的符号图中构建一个可调用的对象。Theano的最重要的特性之一是theano.function
可以优化图,甚至将其中的一些或全部编译为本机机器指令。
Theano是一个Python库和优化编译器,用于处理和求值表达式,特别是矩阵表达式。矩阵的操作通常使用numpy包来完成,那么什么是Theano做的而Python和numpy没有做的呢?
g++
或nvcc
将表达式图的部分编译成CPU或GPU指令,它们运行起来比纯Python快得多。最接近Theano的Python包是sympy。Theano比Sympy更注重张量表达,并有更多的机制进行编译。Sympy具有更复杂的代数规则,可以处理更多种类的数学运算(如序列,极限和积分)。
如果将numpy与MATLAB和sympy与Mathematica进行比较,Theano是一种试图结合两个世界的最好的部分的东西。
安装Theano
在你的系统上下载并安装Theano的说明。
教程
开始使用Theano的基本功能。如果你是新手,去这里!
API文档
Theano提供的细节。建议先通读教程。
可在此处找到在线文档的PDF版本。
这是我们对Theano的愿景。这是给人们对Theano未来的一个期望,但我们不能承诺实现所有的。这也应该能帮助你理解Theano与其他计算工具的关系。
图变换
可以使用多种编译语言、指令集:C/C++、CUDA、OpenCL、PTX、CAL、AVX …
注意:短期没有计划支持多节点计算。
以下是截至2013年12月3日(Theano版本0.6之后)的愿景状态:
numpy.ndarray
对象的张量,我们支持对它们的许多操作。scipy.{csc,csr,bsr} _matrix
对象支持稀疏类型,并支持对它们的一些操作。float32
类型的张量有一个CUDA后端。DebugMode
检查?目前,DebugMode非延迟地检查计算。关于Theano的讨论发生在theano-dev和theano-users邮件列表中。对Theano的开发感兴趣的人应该检查前者,而后者保留给涉及最终用户的问题。
问题、评论、赞美、批评和错误报告应提交到这些邮件列表。
我们欢迎各种贡献。如果你对如何扩展Theano有任何问题,请随时问问theano-dev邮件列表。