【发布时间】:2016-09-30 10:24:18
【问题描述】:
我是 Tensorflow 的新手。
- 是不是一定要用tensorflow的功能,比如用
tf.constant()代替int32、float32或者别的? - 同样在计算过程中,使用
tf.mul()而不是普通的Python乘法*? - 还有打印函数
tf.Print()而不是print()?
【问题讨论】:
标签: python tensorflow
我是 Tensorflow 的新手。
tf.constant()代替int32、float32或者别的?tf.mul()而不是普通的Python乘法*?tf.Print()而不是print()?【问题讨论】:
标签: python tensorflow
如 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 所述。
【讨论】:
tf.mul 可能比普通的 python 乘法更好。
tf.Session 设置为使用operation.eval(),而不是with tf.Session as sess:。由于构建图表和运行图表的方法有很多种,您是否更喜欢某些方法?
因为 tensorflow 是建立在计算图之上的。当您在 python 中构建图形时,您只是在构建对计算的描述(实际上并不进行计算)。要计算任何东西,必须在会话中启动图。所以最好用tensorflow ops来做计算。
https://www.tensorflow.org/versions/r0.11/get_started/basic_usage.html
【讨论】: