我正在阅读this tensorflow tutorial,它指定了如何使用张量流来模拟水波纹。我的理解是使用tensorflow变量和占位符代替泛型python变量,但是使用张量流而不是numpy有任何特定的(即性能)优势吗?
答案 0 :(得分:3)
首先,TensorFlow和NumPy等库之间存在非常根本的差异。在TensorFlow中,您基本上以符号方式定义计算图,除非您从类run
调用函数Session
,否则不计算任何内容。注意只调用run
函数一次(或仅在需要时),以避免冗余计算是非常重要的。
说到性能,像TensorFlow和Theano这样的库擅长修剪和优化整个计算图(运行前),并使用非常优化的内核在可用设备(包括GPU)上运行图中的操作。 GPU在执行矩阵运算时非常快速且有用,但NumPy无法利用它。 NumPy主要使用基于C ++的代码运行计算,但与TensorFlow不同,它不对整个计算图应用图优化。事实上,在NumPy中没有图形这样的东西。 TensorFlow将整个计算带到不同的运行时空间,然后在实际执行后返回具体结果。
如果您对内核究竟是什么感到好奇,the original TensorFlow paper将其定义为:“内核是可以在特定类型的设备上运行的操作的特定实现(例如,CPU或GPU) )“。
有一个相当简单但很好的基准at this blog post,用数字表示TensorFlow比NumPy好多少。
要了解TensorFlow的实际工作原理,This post也可能有用。
如果您的问题不是一个需要处理大规模矩阵和大量矩阵运算的大问题,那么我会说NumPy更容易使用,您不需要担心性能。