在不设置初始值的情况下创建张量流变量



这些天我正在学习Tensorflow。

当我们使用 tf 创建张量时。变量,第一个参数是"initial_value"。因此,即使我们没有特定的值作为初始值,也必须给出这个值。

下面是一个示例:

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

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

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

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

我不知道这里是否有明确定义的最佳实践,但我同意仅仅为了定义形状而构建张量是浪费。更好的方法是避免完全显式初始化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节点开始(可在此处找到更多信息(。这些形状要求您指定形状,而这些形状是图形中的基础形状。

希望这是有帮助的!

相关内容

最新更新