tensorflow dataset在线数据库tfds.load

tfds.load

tfds.load是一种方便的方法,它是构建和加载tf.data.Dataset的最简单方法。
设置download = True将下载并准备数据。 只要构bulider name和data_dir保持不变,使用download = True多次调用load是安全的。 已经下载好的数据将被重用。

mnist_train = tfds.load(name="mnist", split=tfds.Split.TRAIN)
assert isinstance(mnist_train, tf.data.Dataset)
mnist_train

获取dataset的“image”和“label”

如果想获取dataset中的“image”和“label”直接使用

dataset=tfds.load(name='cifar10',split=tfds.Split.TRAIN)
image=datasetp['image']

是不可以的吗,会报错:
TypeError:'DatasetV1Adapter' object is not subscriptable
如果打印dataset信息:

print(dataset)
<DatasetV1Adapter shapes:{image:(32,32,3),label:(),types:{image:tf.uint8,label:tf,int64}}>

1.方法1:Build your input pipeline

ds_train, ds_test = tfds.load(name="mnist", split=["train", "test"])
# Build your input pipeline
ds_train = ds_train.shuffle(1000).batch(128).prefetch(10)
for features in ds_train.take(1):
  image, label = features["image"], features["label"]

2. 方法2:use tfds.as_numpy

为了方便那些在程序中需要简单NumPy数组的用户,可以使用 tfds.as_numpy 返回一个生成NumPy数组记录的生成器tf.data.Dataset。这允许您使用tf.data接口构建高性能输入管道,同时也可以使用您希望的模型组件。

train_ds = tfds.load("mnist", split=tfds.Split.TRAIN)
train_ds = train_ds.shuffle(1024).batch(128).repeat(5).prefetch(10)
for example in tfds.as_numpy(train_ds):
  numpy_images, numpy_labels = example["image"], example["label"]

您还可以tfds.as_numpy结合使用batch_size=-1从返回的tf.Tensor对象中获取NumPy数组中的完整数据集:

train_ds = tfds.load("mnist", split=tfds.Split.TRAIN, batch_size=-1)
numpy_ds = tfds.as_numpy(train_ds)
numpy_images, numpy_labels = numpy_ds["image"], numpy_ds["label"]

请注意,库仍然需要tensorflow作为内部依赖项。
画出cifar10 的图像

dataset=tfds.load(name='cifar10',split=tfds.Split.TRAIN)
for example in tfds.as_numpy(train_ds):
  numpy_images, numpy_labels = example["image"], example["label"]
  plt.imshow(image.astype(np.uint8))
  plt.show()

参考: https://github.com/tensorflow/datasets
参考: https://www.oipapio.com/question-4880172

疑问:

dataset.map() 的运行机制需要看源码再去理解

def change(record):
   img=record['image']
   label=record['label']
   img=tf.cast(img,tf.float32)
   img=tf,random(img,[24,24,3])
   ...#各种图片处理..
   return dict(image=img, label=label)  

dataset=tfds.load(name='cifar10',split=tfds.Split.TRAIN)
print(dataset)
dataset=dataset.map(change)
print(dataset)

打印结果:

<DatasetV1Adapter shapes:{image:(32,32,3),label:(),types:{image:tf.uint8,label:tf,int64}}>
<DatasetV1Adapter shapes:{image:(24,24,3),label:(),types:{image:tf.tf.float32,label:tf,int64}}>

为什么change函数里面可以直接通过record调用record [‘image’]recor [‘label’] ???

  • 3
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 6

打赏作者

言论的花

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值