theano 基础
先睹为快
oimport theano
ofrom theano import tensor
o# declare two symbolic floating-point scalars
a = tensor.dscalar()
b = tensor.dscalar()
o# create a simple expression
c = a + b
of = theano.function([a,b], c)
括号内为输入
括号外为输出
o# bind 1.5 to ‘a’, 2.5 to ‘b’, and evaluate ‘c’
assert 4.0 == f(1.5, 2.5)
Theano是一个Python库和优化编译器,
o用于处理和求值表达式,特别是矩阵表达式。
oTheano做的而Python和numpy没有做的呢
执行速度优化:
Theano可以使用g++或nvcc将表达式图的部分编译成CPU或GPU指令,它们运行起来比纯Python快得多。
符号微分:
Theano可以自动构建用于计算梯度的符号图。
稳定性优化:
Theano可以识别[某些]数值不稳定的表达式,并使用更稳定的算法计算它们。
o最接近Theano的Python包是sympy。
Theano比Sympy更注重张量表达,并有更多的机制进行编译。
Sympy具有更复杂的代数规则,可以处理更多种类的数学运算(如序列,极限和积分)。
Theano的编译器
o对这些符号表达式应用许多不同复杂度的优化
o优化包括
使用GPU进行计算
恒定折叠
合并相似的子图,避免冗余计算
算术简化(例如x*y/x -> y, --x -> x)
在各种上下文中插入高效的BLAS操作(例如GEMM)
使用内存别名来避免计算
使用就地操作,无论它涉不涉及到别名
元素子表达式的循环融合
数值稳定性的改进
完整列表请参阅优化
参考文献
- theano中文手册