Tensorflow 属性错误:';张量';对象没有属性';numpy';使用版本2.4.1启用即时执行

Tensorflow 属性错误:';张量';对象没有属性';numpy';使用版本2.4.1启用即时执行,tensorflow,keras,tensorflow-datasets,tf.data.dataset,Tensorflow,Keras,Tensorflow Datasets,Tf.data.dataset,我一直在尝试将我构建的生成器转换为tf.data.dataset。 我已经走了很长的路,现在我有了这样简单的事情 def parse_image(filename): file = tf.io.read_file(filename) # this will work only with filename as tensor image = tf.image.decode_image(file) return image def transform_img(img):

我一直在尝试将我构建的生成器转换为tf.data.dataset。 我已经走了很长的路,现在我有了这样简单的事情

def parse_image(filename):
    file = tf.io.read_file(filename) # this will work only with filename as tensor
    image = tf.image.decode_image(file)
    return image

def transform_img(img):
  img = parse_image(img).numpy()
  img = transforms_train(image = img)["image"]
  return img
当我在文件名本身上调用transform img时,它会按预期工作。比如:

plt.imshow(transform_img(array_of_filenames[0]))
但当我把它映射到数据集时

dataset = tf.data.Dataset.from_tensor_slices(array_of_filenames)
dataset = dataset.map(transform_img)
我得到了标题中的错误

我又在做傻事了,不是吗?
谢谢你的帮助

无法在tensorflow数据集的映射函数中使用numpy。否则,您需要将函数包装在
tf.py_函数
tf.numpy_函数
中。因此,它应该如下所示:

dataset=dataset.map(lambda:item:tf.py_函数(transform_img,[item],[tf.float32]))
py_函数的第一个参数是您想要的预处理函数,第二个参数是要传递给函数的参数。最后一个参数是返回预处理函数的数据类型。(同样适用于
tf.numpy\u函数


我不记得在文档中读过这篇文章,但在教程中,您可以找到它。

谢谢,这确实是解决方案,我在这里也找到了,很高兴我能提供帮助:)