具有不同形状的 Tensorflow 元组

Tensorflow tuples with different shapes

我有一个问题 returning 两个变量的元组 v , wt 其中 vshape=(20,20)wtshape=(1,)wt是一个变量,是一个权重值。我想 return map_fn

中的元组 (v,wt)

我的代码看起来有点接近这个

tf.map_fn(fn, nonzeros(Matrix, dim, row))

nonzeros(Matrix, dim, row) returns a (index, value)

fn 将 return 一个元组,但我得到的错误输出是:

ValueError: The two structures don't have the same number of elements. First 
structure: <dtype: 'int64'>, second structure: (<tf.Tensor 
'map_2/while/while/Exit_1:0' shape=(20,) dtype=float32>, <tf.Tensor 
'map_2/while/Sub:0' shape=() dtype=int64>).

您将在此处返回 tf.while 循环的结果。 tf.while 循环 returns 多个值的元组,在您的情况下,我们可以看到您的 while 循环返回了一个感兴趣的值和一个计数器值作为元组。

(<tf.Tensor 'map_2/while/while/Exit_1:0' shape=(20,) dtype=float32>, <tf.Tensor 'map_2/while/Sub:0' shape=() dtype=int64>)

您要从 map_fn 返回的意思可能只是这两个值中的第一个。因此,在您未在此处显示的代码中,您应该具有以下内容:

value, counter = tf.while(...)
return value

你拥有的是:

return tf.while(...)

所以你看到的错误是抱怨 <dtype: 'int64'> 与你传入的 tuple 不匹配。当你修复 while 循环时,你将比较 <dtype: 'int64'><tf.Tensor 'map_2/while/while/Exit_1:0' shape=(20,) dtype=float32> 这大概是 (20,) 并且将匹配(尽管你最终可能会遇到 int/float 问题)。