根据图时未知的大小分割张量

时间:2019-02-20 20:43:42

标签: tensorflow

在tensorflow中,我想执行以下操作:

  • 接收N个一维张量
  • 将它们组合为形状为[m]的一维大张量
  • 调用处理该张量并生成形状为[m]的张量的函数
  • 将所得张量拆分为N个1D张量

但是在创建图时,我不知道每个一维张量的大小,这会产生问题。这是我在做什么的摘要:

    def stack(tensors):
    sizes = tf.convert_to_tensor([t.shape[0].value for t in tensors])
    tensor_stacked = tf.concat(tensors, axis=0)
    res = my_function(tensor_stacked)
    return tf.split(res, sizes, 0)


tensor_A = tf.placeholder(
    tf.int32,
    shape=[None],
    name=None
)

tensor_B = tf.placeholder(
    tf.int32,
    shape=[None],
    name=None
) 

res = stack([tensor_A, tensor_B])

这将在带有消息的“ concat”行上失败

  

TypeError:无法将类型的对象转换为Tensor。内容:[无,无]。考虑将元素强制转换为受支持的类型。

有什么办法可以在tensorflow中做到这一点吗?在绘制图时,“尺寸”变量将始终包含未知尺寸,因为一维张量的长度是未知的

1 个答案:

答案 0 :(得分:0)

好的,与此同时我找到了答案

显然,将对tensor.shape[0]的调用替换为tf.shape(tensor)[0]

现在我有:

def stack(tensors):
    sizes = tf.convert_to_tensor([tf.shape(t)[0] for t in tensors])
    print(sizes)
    tensor_stacked = tf.concat(tensors, axis=0)
    res = my_function(tensor_stacked)
    return tf.split(res, sizes, 0)