Theano究竟是什么呢?一种编程语言?一个编译器?抑或是一个Python库?实际上,Theano兼具以上几种功能。Theano针对于多维数组(张量),能够高效地实现、编译和评估数学表达式。它同时还可以使得代码在GPU运行。不过,其强大性能的真实来源则是利用了GPU中巨大内存带宽以及GPU浮点数运算能力。我们使用Theano可以很容易地共享内存来并行运行代码。Theano开发者在2010年公布的测试报告中指出:在CPU上执行程序时,Theano程序的性能是NumPy的1.8倍,而在GPU上执行相应的代码,Theano速度是NumPy的11倍[1]。请注意,上面是2010年的测试结果,近几年来,无论是Theano还是显卡的性能都有了显著的提高。
那么,Theano和NumPy之间到底有何关系呢?Theano建立在NumPy的基础上并且与其语法相似,这使得熟悉NumPy的用户用起Theano来也得心应手。公正地说,Theano并不像许多人所描述的那样,是“NumPy的兴奋剂”,不过与SymPy(http://www.sympy.org)相类似,SymPy是一个用于符号计算(或者称其为符号代数)的Python包。正如前面章节中所介绍的,我们使用NumPy来描述变量,并组合这些变量,然后再逐行执行相关代码。不过在Theano中,我们首先要写出问题,然后分析问题给出描述。如果代码需要在GPU上运行,Theano可以使用C/C++,或者CUDA/OpenCL生成相应的代码。为了能够生成最优化的代码,我们需要指出待解决问题的领域,可以将其看作是由许多操作构成的树(或者是关于图的符号表达)。请注意,Theano当前仍处于开发活跃阶段,会定期加入新的功能或更新现有功能。在本章,我们首先探究Theano背后的基本概念,然后进一步学习如何将其用于机器学习实践中。由于Theanno是一个包含许多先进功能的库,我们无法在本书中覆盖其所有内容。不过,如果读者希望了解更多关于Theano的内容,可以访问在线文档(http://deeplearning.net/software/theano/)获取更加详细的信息。
[1] J. Bergstra, O. Breuleux, F. Bastien, P. Lamblin, R. Pascanu, G. Desjardins, J. Turian, D. Warde-Farley, and Y.Bengio. Theano: A CPU and GPU Math Compiler in Python. In Proc. 9th Python in Science Conf, pages 1-7,2010.