Tensorflow tf.size无法使用来自tf.unique的动态长度张量

时间:2017-03-22 17:18:11

标签: python tensorflow

这看起来很简单,但我已经坚持了一段时间。我有一个列表,并且想要创建一个等于该列表中唯一项长度的变量。一个简单的例子如下:

def unique_zeros_tensor(arr):
  uniq_items, items_idxs = tf.unique(tf.constant(arr))
  return tf.Vector(tf.zeros([tf.size(uniq_items)]))

我收到错误消息,说初始值必须指定一个形状。

我也试过,tf.shapetf.zeros_like,甚至tf.reduce_max(item_idxs)都无济于事。我可以通过创建一个会话并运行tf.unique中的结果并使用那里的值来实现它,但这感觉就像是不好的做法,但如果我错了,请告诉我。

编辑 - 为常量添加形状没有帮助, 使用占位符代替tf.constant也没有帮助。

1 个答案:

答案 0 :(得分:1)

在运行图形之前,变量需要基本上静态定义它们的大小。

但像tf.zeros等这样的东西是张量,在你实际运行图形之前它们确实没有值。

您需要确定一个大小,以使您的变量不会发生变化,或者每次更改大小时重建图形。

编辑:为了清楚起见,tf中依赖关系的顺序是:

  • 首先构建一个图表。你不需要一个会话来构建图表。这是您静态定义变量大小的地方
  • 然后您从该图表创建一个或多个会话。所有这些会话中的变量都可能具有不同的值,但所有变量都具有相同的形状/尺寸,因为它们是从同一图形创建的。