Theano - 计算图
从上面的两个示例中,您可能已经注意到,在 Theano 中,我们创建了一个表达式,最终使用 Theano函数对其进行求值。Theano 使用先进的优化技术来优化表达式的执行。为了可视化计算图,Theano 在其库中提供了一个打印包。
标量加法的符号图
要查看标量加法程序的计算图,请使用打印库,如下所示 -
theano.printing.pydotprint(f, outfile="scalar_addition.png", var_with_name_simple=True)
当您执行此语句时,将在您的计算机上创建一个名为scalar_addition.png的文件。保存的计算图显示在这里供您快速参考 -
生成上述图像的完整程序清单如下:
from theano import * a = tensor.dscalar() b = tensor.dscalar() c = a + b f = theano.function([a,b], c) theano.printing.pydotprint(f, outfile="scalar_addition.png", var_with_name_simple=True)
矩阵乘法器的符号图
现在,尝试为我们的矩阵乘法器创建计算图。生成此图的完整列表如下 -
from theano import * a = tensor.dmatrix() b = tensor.dmatrix() c = tensor.dot(a,b) f = theano.function([a,b], c) theano.printing.pydotprint(f, outfile="matrix_dot_product.png", var_with_name_simple=True)
生成的图表如下所示 -
复杂图
在较大的表达式中,计算图可能非常复杂。这里显示了一张取自 Theano 文档的图表 -
要理解 Theano 的工作原理,首先了解这些计算图的重要性非常重要。有了这个认识,我们就知道Theano的重要性了。
为什么是西阿诺?
通过查看计算图的复杂性,您现在将能够理解开发 Theano 背后的目的。典型的编译器会在程序中提供局部优化,因为它从不将整个计算视为单个单元。
Theano 实现了非常先进的优化技术来优化整个计算图。它将代数的方面与优化编译器的方面结合起来。该图的一部分可以被编译成C语言代码。对于重复计算,评估速度至关重要,Theano 通过生成非常高效的代码来满足这一目的。