Python Tensorflow tf.size无法使用tf.unique中的动态长度张量
这看起来很简单,但我已经坚持了一段时间了。我有一个列表,希望创建一个变量,该变量等于该列表中唯一项的长度。一个简单的例子如下所示:Python Tensorflow tf.size无法使用tf.unique中的动态长度张量,python,tensorflow,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.shape,tf.zero\u
def unique_zeros_tensor(arr):
uniq_items, items_idxs = tf.unique(tf.constant(arr))
return tf.Vector(tf.zeros([tf.size(uniq_items)]))
我得到一个错误,说初始值必须有一个指定的形状
我也试过,tf.shape
,tf.zero\u like
,甚至tf.reduce\u max(item\u idxs)
都没有用。我可以通过创建一个会话,运行tf.unique的结果,并使用其中的值来实现这一点,但这感觉像是一种糟糕的做法,但如果我错了,请告诉我
编辑-
将形状添加到常量没有帮助,
使用占位符而不是tf.constant也没有帮助。在运行图表之前,变量的大小基本上是静态定义的 但是像tf.zero等都是张量,在你实际运行图表之前,它们并没有真正的值 您要么需要计算出一个大小,以给出不变的变量,要么在每次大小更改时重新生成图形 编辑:为了清楚起见,tf中依赖项的顺序是:
- 首先构建一个图表。构建图表不需要会话。这是静态定义变量大小的地方
- 然后从该图创建一个或多个会话。所有这些会话中的变量可能具有不同的值,但所有变量都具有相同的形状/尺寸,因为它们是从同一个图形创建的