AttributeError: 'Tensor' object has no attribute 'numpy' 使用版本 2.4.1 启用了急切执行
Posted
技术标签:
【中文标题】AttributeError: \'Tensor\' object has no attribute \'numpy\' 使用版本 2.4.1 启用了急切执行【英文标题】:AttributeError: 'Tensor' object has no attribute 'numpy' eager execution is enabled using version 2.4.1AttributeError: 'Tensor' object has no attribute 'numpy' 使用版本 2.4.1 启用了急切执行 【发布时间】:2021-08-09 13:48:52 【问题描述】:我一直在尝试将我构建的生成器转换为 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
当我在文件名本身上调用它时,转换 img 会按预期工作。喜欢:
plt.imshow(transform_img(array_of_filenames[0]))
但是当我将它映射到数据集时
dataset = tf.data.Dataset.from_tensor_slices(array_of_filenames)
dataset = dataset.map(transform_img)
我得到了标题中的错误。
我又在做傻事了不是吗? 感谢您的帮助!
【问题讨论】:
【参考方案1】:在 tensorflow 数据集的 map 函数中不能使用 numpy。否则,您需要将函数包装在tf.py_function
或tf.numpy_function
中。所以它应该如下所示:
dataset = dataset.map(lambda: item: tf.py_function(transform_img, [item], [tf.float32]))
py_function
的第一个参数是你想要的预处理函数,第二个参数是要传递给函数的参数。最后一个参数是预处理函数返回的数据类型。 (同样适用于tf.numpy_function
)
我不记得在文档中阅读过这个,但在教程中,你可以找到它here。
【讨论】:
谢谢,这确实是解决方案,我也在这里找到了它albumentations.ai/docs/examples/tensorflow-example 很高兴我能帮上忙 :)以上是关于AttributeError: 'Tensor' object has no attribute 'numpy' 使用版本 2.4.1 启用了急切执行的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:“tensorflow.python.framework.ops.EagerTensor”对象没有属性“to_tensor”
AttributeError:“Tensor”对象在自定义损失函数中没有属性“numpy”(Tensorflow 2.1.0)
debug --“AttributeError: ‘Tensor‘ object has no attribute ‘numpy‘ --- tensor 没有 numpy()属性”
AttributeError: 'Tensor' 对象没有属性'_in_graph_mode'。
AttributeError:“张量”对象在 Tensorflow 2.1 中没有属性“numpy”
pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'(示例