【问题标题】:Tensorflow Variables and Ops vs. Python EquivalentsTensorflow 变量和操作与 Python 等价物
【发布时间】:2016-09-30 10:24:18
【问题描述】:

我是 Tensorflow 的新手。

  • 是不是一定要用tensorflow的功能,比如用tf.constant()代替int32float32或者别的?
  • 同样在计算过程中,使用tf.mul()而不是普通的Python乘法*
  • 还有打印函数tf.Print()而不是print()

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    here 所述,

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

    所以张量变量不像 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()* 等数学运算,许多普通的 python 运算都被等效的 tensorflow 运算重载,如 here 所述。

    【讨论】:

    • 感谢您的回复。我认为最好以 Tensorflow 的方式进行计算:构建图形并在会话中计算它。另外,我只是猜测张量的计算可能会有一些优化,例如在某些情况下,使用tf.mul 可能比普通的 python 乘法更好。
    • 我正在考虑的另一件事是,如果我需要使用TensorBoard 来可视化图形,同时它支持像numpy 的操作或普通python 的操作这样的非张量流操作?我正在一个小型网络上工作,稍后我会尝试。你能告诉我用 Tensorflow 编码有什么好的习惯吗?就像将默认的tf.Session 设置为使用operation.eval(),而不是with tf.Session as sess:。由于构建图表和运行图表的方法有很多种,您是否更喜欢某些方法?
    • 我认为每个人都需要发展自己的编码风格。我建议你看看 github 上的各种 tensorflow 例程,如果你喜欢一个人的风格,请尝试遵循它。无论如何,如果您有特定的问题或疑问,只需将它们发布到此论坛即可。这里的 TF 社区似乎反应迅速。
    【解决方案2】:

    因为 tensorflow 是建立在计算图之上的。当您在 python 中构建图形时,您只是在构建对计算的描述(实际上并不进行计算)。要计算任何东西,必须在会话中启动图。所以最好用tensorflow ops来做计算。

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

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2017-08-31
      • 2013-02-13
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多