【问题标题】:Get list of object in tensorflow iterating tensor获取tensorflow迭代张量中的对象列表
【发布时间】:2021-10-06 14:00:44
【问题描述】:

所以我想在张量流中返回一个对象列表, 列表对象是使用大小为 [n,k,d] 的张量 X 构造的 当我尝试时:

listofobject = [Myobject(x) for x in X]

它返回:

OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed: AutoGraph did convert this function. This might indicate you are trying to use an unsupported feature.

我也试过了:

listofobject = tf.map_fn(lambda x:Myobject(x), X)

得到了这个错误:

 ValueError: Tried to convert 'y' to a tensor and failed. Error: None values not supported.

当我检查对象的构造函数内部时,有时我的 x 形状是 [None, d] 不确定我在这里缺少什么。我的问题是,在 tensorflow 中返回这样的对象列表的正确方法是什么?

【问题讨论】:

    标签: python tensorflow object tensorflow2.0


    【解决方案1】:

    这对我有用,

    import tensorflow as tf
    
    class Myobject:
    
        def __init__(self, x):
           self.x = x
    
    
    X = tf.random.uniform(shape = (3, 2 ,1))
    
    listofobject = [Myobject(x) for x in X]
    
    print(listofobject[1].x)
    <tf.Tensor: shape=(2, 1), dtype=float32, numpy=
    array([[0.09055722],
           [0.7195903 ]], dtype=float32)>
    

    【讨论】:

    • 你用的是哪个tf版本?
    • tf.__version__ == '2.4.1'
    • ok 正在尝试您的代码,它在我的机器上也运行良好。我的情况很复杂,这个对象列表将是我想要导出的某个函数的一部分,并且错误发生在那里
    【解决方案2】:

    您能否详细说明您需要它的原因。

    两种方法:

    tf.ragged.constant([Myobject(x) for x in X])
    

    2:

    tf.map_fn(Myobject,elems=X,fn_ouput_signature=tf.RaggedTensorSpec(dtype=tf.float32orWHATEVER))

    因为问题是衣衫褴褛,或者值是占位符,请您多多包涵。

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 2018-08-02
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      相关资源
      最近更新 更多