【问题标题】:Tensorflow tf.map_fn over ragged tensor fails with object of type 'RaggedTensor' has no len不规则张量上的 Tensorflow tf.map_fn 失败,“RaggedTensor”类型的对象没有 len
【发布时间】:2021-08-04 21:13:12
【问题描述】:

This Tensorflow doc 给出了在适用于 Tensorflow 2.4.1 及更高版本的不规则张量上使用 tf.map_fn 的示例:

digits = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2], [6], []])
print(tf.map_fn(tf.math.square, digits))

但是,以下示例在 Tensorflow 2.4.1 或 Tensorflow 2.5 中运行时会导致错误“'RaggedTensor' 类型的对象没有 len”:

import tensorflow as tf

X=tf.ragged.constant([[1.,2.],[3.,4.,5.]], dtype=tf.float32)

@tf.function
def powerX(i):
    global X
    return X**i

Y = tf.map_fn(powerX, tf.range(3, dtype=tf.float32))

有没有办法让它工作?我不明白抛出的错误。一般来说,我试图通过映射一个用户定义的函数来获得完全的并行性,该函数在一个参差不齐的张量上只有 Tensorflow 操作,结果是参差不齐的张量。

【问题讨论】:

    标签: python-3.x tensorflow2.0 ragged-tensors


    【解决方案1】:

    tf.map_fn 需要输出签名。我不确定为什么它不能从输入中推断出这一点,但这是 tensorflow 人的问题。 以下代码将为您工作。

    import tensorflow as tf
    
    X=tf.ragged.constant([[1.,2.],[3.,4.,5.]], dtype=tf.float32)
    
    @tf.function
    def powerX(i):
        global X
        return X**i
    signature = tf.type_spec_from_value(powerX(X))
    Y = tf.map_fn(powerX, tf.range(3, dtype=tf.float32),fn_output_signature=signature)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2021-04-28
      • 2015-01-17
      • 1970-01-01
      • 2013-03-14
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多