我有一些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