AttributeError: 'Tensor' object has no attribute 'numpy' eager execution is enabled using version 2.4.1
AttributeError: 'Tensor' object has no attribute 'numpy' eager execution is enabled using version 2.4.1
我一直在尝试将我建造的发电机转换为 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 数据集的map 函数中使用numpy。否则,您需要将函数包装在 tf.py_function
或 tf.numpy_function
中。所以它应该如下所示:
dataset = dataset.map(lambda: item: tf.py_function(transform_img, [item], [tf.float32]))
py_function
的第一个参数是你想要的预处理函数,第二个参数是传递给函数的参数。最后一个参数是预处理函数 return 的数据类型。 (同样适用于tf.numpy_function
)
我不记得在文档中读过这个,但在教程中,您可以找到它 here。
我一直在尝试将我建造的发电机转换为 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 数据集的map 函数中使用numpy。否则,您需要将函数包装在 tf.py_function
或 tf.numpy_function
中。所以它应该如下所示:
dataset = dataset.map(lambda: item: tf.py_function(transform_img, [item], [tf.float32]))
py_function
的第一个参数是你想要的预处理函数,第二个参数是传递给函数的参数。最后一个参数是预处理函数 return 的数据类型。 (同样适用于tf.numpy_function
)
我不记得在文档中读过这个,但在教程中,您可以找到它 here。