TensorFlow初始化Tensor of ones

时间:2015-11-14 17:48:40

标签: python tensorflow

假设我有一个张量

X = tf.placeholder("float", [None, 5])

这样我就知道列数而不是行数。我需要初始化维度nrows x 1

的向量

现在,以下代码块不起作用,

o = tf.ones(shape=(tf.shape(X)[0], 1))
==> TypeError: List of Tensors when single Tensor expected

也不,

o = tf.ones(shape=(X.get_shape()[0].value, 1))
==> TypeError: Input 'dims' of 'Fill' Op has type 
    string that does not match expected type of int32.

现在,我发现解决这个问题的一种方法是实际使我的矢量为占位符,

o = tf.placeholder(dtype=tf.float32, shape=[None, 1])

并在我的feed_dict中传入适当大小的numpy数组。但是这个解决方案让我感到不优雅,而不是占位符的预期用途。我可能在这里错了,但肯定有更好的方法。

2 个答案:

答案 0 :(得分:6)

解决问题的方法是使用tf.pack操作:

o = tf.ones(shape=tf.pack([tf.shape(X)[0], 1]))

您遇到错误的原因是TensorFlow形状应该是整数列表或张量link。 tf.pack可以很容易地将整数列表和/或TensorFlow标量转换为Tensor对象。

答案 1 :(得分:0)

另一种不那么优雅的方式是

0 * tf.identity(X) + 1