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’] ???

你可能感兴趣的:(tensorflow,tensorflow)