Tensorflow变量和Ops与Python等价物

时间:2016-09-30 10:24:18

标签: python tensorflow

我是Tensorflow的新手。

  • 是否有必要使用张量流功能,例如使用tf.constant()替换int32float32或其他?
  • 同样在计算过程中,使用tf.mul()代替普通的Python乘法*
  • 还有打印功能tf.Print()而不是print()

2 个答案:

答案 0 :(得分:1)

因为张量流是建立在计算图上的。当你在python中构造图形时,你只是构建一个计算的描述(实际上并没有进行计算)。要计算任何内容,必须在会话中启动图表。因此最好使用tensorflow操作进行计算。

https://www.tensorflow.org/versions/r0.11/get_started/basic_usage.html

答案 1 :(得分:1)

如上所述here

  

Tensor是一个操作输出之一的符号句柄。它不保存该操作的输出值,而是提供在TensorFlow会话中计算这些值的方法

因此张量变量不像python变量。而是指定computational graph中的操作之间的关系。用于描述图形的python变量是为了程序员的方便,但可能更容易将python变量和张量变量视为并行命名空间。这个例子可能会有所帮助:

with tf.Session() as sess:
  a = tf.constant([1, 2, 3])
  b = tf.Variable([])
  b = 2 * a
  sess.run(tf.initialize_all_variables())
  print(b) # Tensor("mul:0", shape=(3,), dtype=int32)
  print(b.eval()) # [2, 4, 6]
  b = tf.Print(b, [b])  # [2, 4, 6] (at the command line)

从中您可以看到:

  • print(b)返回有关'b'引用的操作的信息,以及变量形状和数据类型,但不返回值。
  • b.eval()(或sess.run(b))返回b的值作为numpy数组,可以通过python print()打印
  • tf.Print()可让您在图表执行期间查看b的值。

请注意tf.Print()的语法对新手来说可能有点奇怪。如文档here中所述,tf.Print()是一种身份操作,仅具有打印到命令行的副作用。第一个参数刚刚通过。第二个参数是打印的张量列表,可以与第一个参数不同。另请注意,为了使tf.Print()能够执行某些操作,后续调用sess.run()时使用的变量需要依赖tf.Print()的张量输出,否则图的这一部分将不被执行。

最后关于数学操作,例如tf.mul() vs *许多普通的python操作都使用等效的tensorflow操作重载,如here所述。