tf.data.Dataset读取数据详细文档

tf.data.Dataset

tf.data中包含了两个用于TensorFLow程序的接口:Dataset和Iterator
我们今天主要来看tf.data.Dataset

一 概念
首先Dataset表示一个元素的集合,你可以把它当作函数编程中的lazy list,其中元素是tensor tuple。
tf.data.Dataset经常用来读入数据,处理数据,调整batch,epoch等操作,那读取数据常常依赖Iterator接口,我的其他博客会讲。

二 读数据方式
1. 最简单常用的方式: tf.data.Dataset.from_tensor_slices
>>>1. 将tensor沿第一个维度切片, 返回一个含有N个样本的数据集
>>>2. 得到的数据集是一个类对象,具有“迭代器”等函数,方便遍历数据集中的样本
>>>3. 它需要将整个数据集整体传入,然后做切片处理,这样比较占内存

features, labels = (np.random.sample((100,2)), np.random.sample((100,1)))
dataset = tf.data.Dataset.from_tensor_slices((features,labels))

2. tf.data.Dataset.from_generator()
>>>1.tf.data.Dataset.from_generator(data_generator,output_data_type,output_data_shape).
>>>2. 参数data_generator需要自定去定义,每次yield一个样本
>>>3. 这种方式可以通过自定义的生成器不断传入样本数据,可以通过dataset.prefetch(buffer_size=1000)中的buffer_size限制放入内存的样本的个数

sequence = np.array([[1, 3], [2, 3], [3, 4]])
def generator():
    for el in sequence:
        yield el
dataset = tf.data.Dataset.from_generator(generator,
                                         output_types=(tf.float32),
                                         output_shapes=(tf.TensorShape([1])))

3. tf.data.TextLineDataset

class TextLineDatasetV1(dataset_ops.DatasetV1Adapter):
  """A `Dataset` comprising lines from one or more text files."""

利用这种方式可以读取一个或者多个文件的数据
例:

dataset = tf.data.TextLineDataset(["filename1.txt", "filename2.txt", "filename3.txt"])

4. tf.data.TFRecordDataset

class TFRecordDatasetV1(dataset_ops.DatasetV1Adapter):
  """A `Dataset` comprising records from one or more TFRecord files."""

利用这种方式可以读取一个或者多个tfrecord格式的文件
例:

dataset = tf.data.TFRecordDataset(["filename1.tfrecords", "filename2.tfrecords", "filename3.tfrecords"])

5. tf.data.Dataset.list_files
这种方式可以模糊匹配所有文件,来处理数据
例:

dataset = tf.data.Dataset.list_files("filefloder/*.txt")

三 数据处理
构建好dataset之后,tf.data.Dataset的这几类常用方法也需要注意一下

  • batch(): 用一个整型数字作参数,描述的是batch的batch size
  • repeat(): 用一个整型数字做参数,作用是对整个dataset的重复次数,如果没有参数,则是重复无限次
  • shuffle(): 数据打乱
  • map(): 用作对数据做预处理,参数是一个函数句柄,dataset的每一个元素都会经过这个函数到新的tensor代替原来的元素
  • apply(): 用作对数据做预处理,对整个Dataset重新塑造一个Dataset
  • filter(): 数据集过滤

有兴趣可以看我的专栏: 今天你面试了吗?

你可能感兴趣的:(今天你面试了吗?,tensorflow,深度学习,机器学习)