创建张量流变量而不设置初始值

时间:2018-06-04 23:35:08

标签: tensorflow initialization

这些天我正在学习Tensorflow。

当我们使用tf.Variable创建Tensor时,第一个参数是“initial_value”。因此,即使我们没有将特定值作为初始值,也必须给出该值。

以下是一个例子:

a = tf.Variable(tf.zeros([784, 200]), name="a")

我认为在某些情况下,我们不想设置初始值,因为变量将在稍后进行评估,如下所示:

a = c + e  # where "c" and "e" are some Tensor variables.

我的问题是在上述情况下,使用a初始化上述tf.zeros([784, 200])完全是浪费计算。在这种情况下,最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我不知道这里是否有明确定义的最佳实践,但我同意建立一个仅用于定义形状的张量是浪费。更好的方法是避免明确地初始化a。这里的技巧是记住TensorFlow操作返回tf.Tensor个对象。这些张量的形状由输入到操作的张量确定,并且操作对这些张量的影响。例如,z = tf.add(x, y)采用两个张量并返回具有相同形状的第三张量。

import tensorflow as tf

c = tf.constant([[1.0, 2.0], [3.0, 4.0]])
e = tf.constant([[1.0, 1.0], [1.0, 1.0]])

# Here I define a via operator overload. Note, no initialization.
a = c + e

sess = tf.Session()

# Now, evaluate a in the session. Still no intitializtion.
a_out = sess.run(a)

print(a_out)

这个答案可能有点令人不满意,因为你仍然需要tf.Tensor特定形状的a。指定形状的方式是通过图形体系结构。此体系结构从图表中的tf.placeholder个节点开始(您可以找到更多信息here)。这些要求您指定形状,这些形状是图形中的基础形状。

希望这有用!