OperatorNotAllowedInGraphError:不允许在tf.Tensor上进行迭代尝试使用numpy()

时间:2020-03-30 03:55:59

标签: python numpy tensorflow

我有一些tfrecord文件正在加载到TFRecordDataset中,然后试图传递给dataset.map。此数据集中有很多数据,我只是尝试从每条记录中提取图像和2D边界框。我正在使用Waymo数据集及其API提取数据。

为了使用Waymo API提取此信息,我必须将Tensor转换为numpy数组。我这样叫地图功能

dataset.map(read_tfrecord, num_parallel_calls=4)

映射功能在这里

@tf.function
def read_tfrecord(example):
  image, true_boxes = tf.py_function(read_tfrecord_np, [example], tf.float32)
  return image, true_boxes

我的read_tfrecord_np函数看起来像

def read_tfrecord_np(example):
    frame = open_dataset.Frame()
    frame.ParseFromString(bytearray(example.numpy()))
    ...
    return front_image, true_boxes

这是堆栈跟踪

tensorflow.python.framework.errors_impl.OperatorNotAllowedInGraphError: 在转换后的代码中:train.py:66 read_tfrecord *
true_boxes,图片= tf.py_function(read_tfrecord_np,[示例],tf.float32)
/home/vagrant/anaconda3/envs/projf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:539 iter
self._disallow_iteration()/home/vagrant/anaconda3/envs/projf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:532 _disallow_iteration
self._disallow_when_autograph_enabled(“迭代tf.Tensor”)
/home/vagrant/anaconda3/envs/projf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:510 _disallow_when_autograph_enabled
“直接用@ tf.function装饰。”。format(task))OperatorNotAllowedInGraphError:不在tf.Tensor上进行迭代 允许:AutoGraph没有转换此函数。尝试装饰它 直接使用@ tf.function。

它说“尝试直接使用@ tf.function装饰它”,但是我正在这样做。我在这里做错了什么?我正在使用tensorflow 2.1.0

0 个答案:

没有答案