Theano一览
Theano是一个Python库,它允许你定义、优化和求值数学表达式,特别是具有多维数组(numpy.ndarray)的数学表达式。对于涉及大量数据的问题,使用Theano可以获得与手工编写的C实现不相上下的速度。它还可以通过利用最近的GPU超过CPU上的C多个数量级。
Theano将计算机代数系统(CAS)的各个方面与优化编译器的各个方面相结合。它还可以为许多数学运算生成定制的C代码。CAS与优化编译的这种组合对于复杂数学表达式重复求值并且求值速度很关键的任务特别有用。对于许多不同的表达式每个求值一次的情况,Theano可以最小化编译/分析的开销,但仍然提供诸如自动微分等符号特征。
Theano的编译器对这些符号表达式应用许多不同复杂度的优化。这些优化包括,但不限于:
- 使用GPU进行计算
- 恒定折叠
- 合并相似的子图,避免冗余计算
- 算术简化(例如
x*y/x -> x,
--x -> x
) - 在各种上下文中插入高效的BLAS操作(例如
GEMM
) - 使用内存别名来避免计算
- 使用就地操作,无论它涉不涉及到别名
- 元素子表达式的循环融合
-
数值稳定性的改进
Theano是在LISA实验室编写的,以支持高效机器学习算法的快速开发。Theano以希腊数学家命名,她可能是毕达哥拉斯的妻子。Theano根据BSD许可证发布。
先睹为快
这里是如何使用Theano的示例。它没有展示Theano的许多功能,但它具体说明了Theano是什么。
1 import theano 2 from theano import tensor 3 4 #声明两个浮点数类型的变量 5 a=tensor.dscalar() 6 b=tensor.dscalar() 7 8 #创建一个简单的表达式 9 c=a+b 10 11 #将表达式转换成图函数,方便他们进行计算 12 f=theano.function([a,b],c) 13 14 #a=1.5,b=2.5,计算c 15 assert 4.0==f(1.5,2.5)
它做了什么其他库没做的?
Theano是一个Python库和优化编译器,用于处理和求值表达式,特别是矩阵表达式。矩阵的操作通常使用numpy包来完成,那么什么是Theano做的而Python和numpy没有做的呢?
- 执行速度优化:Theano可以使用
g++
或nvcc
将表达式图的部分编译成CPU或GPU指令,它们运行起来比纯Python快得多。 - 符号微分:Theano可以自动构建用于计算梯度的符号图。
- 稳定性优化:Theano可以识别[某些]数值不稳定的表达式,并使用更稳定的算法计算它们。
最接近Theano的Python包是sympy。Theano比Sympy更注重张量表达,并有更多的机制进行编译。Sympy具有更复杂的代数规则,可以处理更多种类的数学运算(如序列,极限和积分)。