我的代码:
def f(x):
try:
import tensorflow as tf
# x is (None, 10, 2)
idx = K.cast(x*15.5+15.5, "int32")
z = tf.sparse_to_dense(idx, 32, 1.0, 0.0, name='sparse_tensor')
print('z.shape={0}'.format(z.shape))
except Exception as e:
print(e)
return x[:, :, 0:2]
drop_out = Lambda(lambda x: f(x),
output_shape=drop_output_shape, name='projection')(reshape_out)
x是(None, 10, 2)
的张量,其中有10个索引/坐标。尝试生成(None, 32, 32)
张量z
。我收到以下错误:
Shape must be rank 1 but is rank 0 for 'projection_14/sparse_tensor' (op: 'SparseToDense') with input shapes: [?,10,2], [], [], [].
如何解决?谢谢
答案 0 :(得分:0)
您所看到的特定错误是试图说您的output_shape
应该是一维张量,例如(32,)
,而不是您那里的0D张量{{1} }。但是我担心这个简单的更改不会解决您的问题。
我不明白的一件事是,当您说您只有10个索引时,为什么您的32
是3-D张量。从技术上讲,sparse_indices
can be a 2-D tensor at most。我对x
的理解是,它与制作稀疏张量非常相似。因此,您的tf.sparse_to_dense
中的数字2
已经确定输出张量将为2D。 (10, 2)
与其他样本大小一样,应以不同的方式处理。
按照此逻辑,您可能会发现的另一个问题是,None
应该是output_shape
而不是(32, 32)
,这是上面提到的简单解决方法。元组的长度应匹配(32,)
的形状(特别是最后一轴)。
考虑到所有这些,我认为模仿您的示例的仅tensorflow MVCE可能是:
sparse_indices