【Tensorflow2】AttributeError: ‘Tensor‘ object has no attribute ‘numpy‘ 解决 (tf.py_function)

本文介绍了在TensorFlow中使用tf.data.Dataset处理数据时遇到的‘Tensor’对象无numpy属性的问题。问题源于map方法内部的函数在静态图模式下运行,无法直接使用numpy方法。解决方案包括使用tf.py_function和tf.numpy_function,它们允许在Eager模式下执行Python函数。文章提供了两种装饰器的实现,并展示了如何在数据加载函数load_data中应用这些装饰器,以正确处理文件路径并获取数据和标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

tf.data.Dataset 是一种高效好用的数据集载入工具. 使用它的 map 方法对数据进行处理也十分方便, 这个处理的函数最好是用 tf2 已经提供的 API 来实现.
对于一个用文件夹/文件名存储的数据集, 本人想对其文件路径进行解析(用正则库), 从而直接返回每个样本的数据和标签:

def load_data(file_name):  # get tf.Tensor here
    file_name = file_name.numpy().decode("utf8")
    label = label_dict[pattern.search(file_name).group(0)]

    data = np.loadtxt(file_name)[..., np.newaxis]
    return tf.cast(data, tf.float32), tf.cast(label, tf.uint8)

ds_train = tf.data.Dataset.list_files("./data/dataset/train/*/*.txt", shuffle=True) \
    .filter(lambda file_name: tf.strings.regex_full_match(file_name, source_list_regex)) \
    .map(load_data, num_parallel_calls=64)
    .batch(80) \
    .prefetch(tf.data.experimental.AUTOTUNE) \
    .cache
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值