tfds.load出现TypeError问题

本文解决了一个在使用TensorFlow Datasets (TFDS) 加载MNIST数据集时遇到的UnimplementedError和TypeError问题。通过更改tensorflow-datasets的版本从3.2.0至3.0.0,成功避免了错误。

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

前段时间使用tfds.load("mnist",with-info=True)的时候发现出error了。

信息为:

UnimplementedError                        Traceback (most recent call last)
c:\python37\lib\site-packages\tensorflow_datasets\core\utils\py_utils.py in try_reraise(*args, **kwargs)
    398   try:
--> 399     yield
    400   except Exception:   # pylint: disable=broad-except

c:\python37\lib\site-packages\tensorflow_datasets\core\registered.py in builder(name, **builder_init_kwargs)
    243       prefix="Failed to construct dataset {}".format(name)):
--> 244     return builder_cls(name)(**builder_kwargs)
    245 

c:\python37\lib\site-packages\wrapt\wrappers.py in __call__(self, *args, **kwargs)
    602             return self._self_wrapper(self.__wrapped__, self._self_instance,
--> 603                     args, kwargs)
    604 

c:\python37\lib\site-packages\tensorflow_datasets\core\api_utils.py in disallow_positional_args_dec(fn, instance, args, kwargs)
     68     _check_required(fn, kwargs)
---> 69     return fn(*args, **kwargs)
     70 

c:\python37\lib\site-packages\tensorflow_datasets\core\dataset_builder.py in __init__(self, data_dir, config, version)
    205     else:  # Use the code version (do not restore data)
--> 206       self.info.initialize_from_bucket()
    207 

c:\python37\lib\site-packages\tensorflow_datasets\core\dataset_info.py in initialize_from_bucket(self)
    422     tmp_dir = tempfile.mkdtemp("tfds")
--> 423     data_files = gcs_utils.gcs_dataset_info_files(self.full_name)
    424     if not data_files:

c:\python37\lib\site-packages\tensorflow_datasets\core\utils\gcs_utils.py in gcs_dataset_info_files(dataset_dir)
     69   """Return paths to GCS files in the given dataset directory."""
---> 70   return gcs_listdir(posixpath.join(GCS_DATASET_INFO_DIR, dataset_dir))
     71 

c:\python37\lib\site-packages\tensorflow_datasets\core\utils\gcs_utils.py in gcs_listdir(dir_name)
     62   root_dir = gcs_path(dir_name)
---> 63   if _is_gcs_disabled or not tf.io.gfile.exists(root_dir):
     64     return None

c:\python37\lib\site-packages\tensorflow\python\lib\io\file_io.py in file_exists_v2(path)
    266   try:
--> 267     _pywrap_file_io.FileExists(compat.as_bytes(path))
    268   except errors.NotFoundError:

UnimplementedError: File system scheme 'gs' not implemented (file: 'gs://tfds-data/dataset_info/imdb_reviews/plain_text/1.0.0')

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-36-06930b64f980> in <module>
      1 #tfds.list_builders()
----> 2 imdb, info = tfds.load('imdb_reviews', with_info=True, as_supervised=True)

c:\python37\lib\site-packages\wrapt\wrappers.py in __call__(self, *args, **kwargs)
    562 
    563         return self._self_wrapper(self.__wrapped__, self._self_instance,
--> 564                 args, kwargs)
    565 
    566 class BoundFunctionWrapper(_FunctionWrapperBase):

c:\python37\lib\site-packages\tensorflow_datasets\core\api_utils.py in disallow_positional_args_dec(fn, instance, args, kwargs)
     67     _check_no_positional(fn, args, ismethod, allowed=allowed)
     68     _check_required(fn, kwargs)
---> 69     return fn(*args, **kwargs)
     70 
     71   return disallow_positional_args_dec(wrapped)  # pylint: disable=no-value-for-parameter

c:\python37\lib\site-packages\tensorflow_datasets\core\registered.py in load(name, split, data_dir, batch_size, shuffle_files, download, as_supervised, decoders, read_config, with_info, builder_kwargs, download_and_prepare_kwargs, as_dataset_kwargs, try_gcs)
    366     data_dir = constants.DATA_DIR
    367 
--> 368   dbuilder = builder(name, data_dir=data_dir, **builder_kwargs)
    369   if download:
    370     download_and_prepare_kwargs = download_and_prepare_kwargs or {}

c:\python37\lib\site-packages\tensorflow_datasets\core\registered.py in builder(name, **builder_init_kwargs)
    242   with py_utils.try_reraise(
    243       prefix="Failed to construct dataset {}".format(name)):
--> 244     return builder_cls(name)(**builder_kwargs)
    245 
    246 

c:\python37\lib\contextlib.py in __exit__(self, type, value, traceback)
    128                 value = type()
    129             try:
--> 130                 self.gen.throw(type, value, traceback)
    131             except StopIteration as exc:
    132                 # Suppress StopIteration *unless* it's the same exception that

c:\python37\lib\site-packages\tensorflow_datasets\core\utils\py_utils.py in try_reraise(*args, **kwargs)
    399     yield
    400   except Exception:   # pylint: disable=broad-except
--> 401     reraise(*args, **kwargs)
    402 
    403 

c:\python37\lib\site-packages\tensorflow_datasets\core\utils\py_utils.py in reraise(prefix, suffix)
    390   suffix = '\n' + suffix if suffix else ''
    391   msg = prefix + str(exc_value) + suffix
--> 392   six.reraise(exc_type, exc_type(msg), exc_traceback)
    393 
    394 

TypeError: __init__() missing 2 required positional arguments: 'op' and 'message'

(错误信息大致如上,有一位stack overflow的朋友也出现和我一样的问题,所以我只复制了他的错误信息,如果侵权那我删掉吧)

这种情况下,我把运行环境win10换成centos7,把tf版本从2.2到2.0都没法解决问题,tfds版本是3.2.0,装了tfds-nightly也没用。这种情况我怀疑是不是tfds本身的lib出现问题还是说别的地方引起什么冲突,苦索无果。

于是考虑有没有可能是tfds的版本问题,我就把tensorflow-datasets的版本从3.2.0换成3.0.0,再利用tfds.load则不出现TypeError了。

pip uninstall tensorflow-datasets
pip install tensorflow-datasets==3.0.0

问题总算是暂时解决了或者有哪位大佬知道是什么原因的,求下面告知……感激不尽!

<think>我们正在处理用户关于TensorFlow Datasets (tfds)的加载问题。用户要求提供tfds.load的使用示例。 根据引用[1]和引用[5],我们可以知道tfds.load是用于加载数据集的函数,并且可以配合tf.data.Dataset使用。引用[1]中给出了一个加载MNIST数据集并转换为numpy数组的例子。 此外,引用[2]提到了TFRecords的二进制格式,但用户的问题是关于tfds.load的,所以可能不需要深入TFRecords,除非用户需要。 引用[3]和引用[4]提到了Estimators和TensorFlow版本,但用户问题没有涉及这些,所以暂时忽略。 引用[5]提到了Pix2Pix,但用户问题不涉及生成对抗网络,所以忽略。 因此,我们主要参考引用[1]来构建示例。 用户问题:我想加载TensorFlow Datasets中的数据集,请问TensorFlow Datasets tfds.load usage example 我们将提供一个清晰的步骤和示例代码,展示如何使用tfds.load加载数据集,并处理为tf.data.Dataset格式,以及如何转换为numpy数组(如果需要)。 注意:用户可能使用TensorFlow 2.x,所以示例将基于TF2。 步骤: 1. 安装TensorFlow Datasets(如果尚未安装) 2. 导入必要的库 3. 使用tfds.load加载数据集 4. 对数据集进行预处理、批处理、重复、预取等操作 5. 迭代数据集 另外,我们可以展示如何将数据集转换为numpy数组(如引用[1]所示)。 我们以MNIST数据集为例,因为它是常用的。 注意:tfds.load返回的是tf.data.Dataset对象(如果是split指定的单个split)或者一个字典(如果指定多个split)。 示例代码将包括: - 加载训练集 - 对数据集进行shuffle, batch, repeat, prefetch等操作 - 使用tfds.as_numpy将数据转换为numpy数组(可选,根据引用[1]) 我们将提供两种方式:一种是直接使用tf.data.Dataset迭代(返回tensor),另一种是转换为numpy数组。 由于用户可能想要一个简单的示例,我们先展示基本用法。 同时,我们需要考虑用户可能想要知道如何加载多个split(如训练集和测试集)。 因此,我们将提供两个示例:加载单个split和加载多个split。 最后,生成相关问题。</think>### TensorFlow Datasets `tfds.load` 使用示例 #### 1. **基础用法** 加载数据集并拆分为训练集/测试集: ```python import tensorflow_datasets as tfds # 加载MNIST数据集(自动下载) dataset, info = tfds.load( name='mnist', split=['train', 'test'], # 同时加载训练集和测试集 shuffle_files=True, # 打乱文件顺序 as_supervised=True, # 返回(image, label)元组 with_info=True # 获取数据集元信息 ) train_ds, test_ds = dataset print(info) # 查看数据集描述、特征等信息 ``` #### 2. **数据预处理** 结合`tf.data`进行高效预处理: ```python def normalize_img(image, label): """归一化图像到[0,1]范围""" return tf.cast(image, tf.float32) / 255., label # 预处理流程 train_ds = train_ds.map(normalize_img, num_parallel_calls=tf.data.AUTOTUNE) train_ds = train_ds.shuffle(1024).batch(128).prefetch(tf.data.AUTOTUNE) # 验证/测试集处理 test_ds = test_ds.map(normalize_img).batch(128).cache() ``` #### 3. **转换为NumPy数组** 使用`tfds.as_numpy`转换(适用于非TensorFlow模型)[^1]: ```python for example in tfds.as_numpy(train_ds.take(1)): numpy_image, numpy_label = example print(numpy_image.shape, numpy_label) # (128, 28, 28, 1), [标签数组] ``` #### 4. **自定义拆分比例** 使用百分比拆分(如80%训练 + 20%验证): ```python splits = tfds.split.TRAIN.split([80, 20]) # 80%训练, 20%验证 train_ds, val_ds = tfds.load( 'cifar10', split=splits, as_supervised=True ) ``` #### 5. **关键参数说明 | 参数 | 说明 | 示例值 | |------|------|--------| | `split` | 数据集拆分 | `'train'`, `['train', 'test']` | | `as_supervised` | 返回(image,label) | `True`/`False` | | `shuffle_files` | 文件乱序 | `True`(推荐) | | `with_info` | 返回元信息 | `True` | | `batch_size` | 直接批处理 | `tfds.load(..., batch_size=32)` | #### 注意事项 1. **首次运行自动下载**:数据集默认保存在`~/tensorflow_datasets/` 2. **TFRecords格式**:数据以高效二进制格式存储,支持快速读取[^2] 3. **版本兼容**:建议使用`tf-nightly`或TF≥2.4获取最新特性[^4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值