当前位置:   article > 正文

基于tensorflow的图像处理(四) 数据集处理_数据集处理算法

数据集处理算法

参考  基于tensorflow的图像处理(四) 数据集处理 - 云+社区 - 腾讯云

除队列以外,tensorflow还提供了一套更高的数据处理框架。在新的框架中,每一个数据来源被抽象成一个“数据集”,开发者可以以数据集为基本对象,方便地进行batching、随机打乱(shuffle)等操作。

一、数据集的基本使用方法

在数据集框架中,每一个数据集代表一个数据来源:数据可能来自一个张量,一个TFRecord文件,一个文本文件,或者经过sharding的一系列文件,等等。由于训练数据集通常无法全部写入内存中,从数据中读取数据时需要使用一个迭代器(iterator)按顺序进行读取,这点与队列的dequeue()操作和Reader的read()操作相似。与队列相似,数据集也是计算图上的一个点。

下面先看一个简单的例子,这个例子从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y=x^2的值。

  1. import tensorflow as tf
  2. # 从一个数组创建数据集。
  3. input_data = [1, 2, 3, 4, 5, 6]
  4. dataset = tf.data.Dataset.from_tensor_slices(input_data)
  5. # 定义一个迭代器用于遍历数据集。因为上面定义的数据集没有用placeholder
  6. # 作为输入参数,所以这里可以使用最简单的one_shot_iterator。
  7. iterator = dataset.make_one_shot_iterator()
  8. # get_next() 返回代表一个输入数据的张量,类似于队列中dequeue()。
  9. x = iterator.get_next()
  10. y = x * x
  11. with tf.Session() as sess:
  12. for i in range(len(input_data)):
  13. print(sess.run(y))
  14. 输出:
  15. ---
  16. 1
  17. 4
  18. 9
  19. 16
  20. 25
  21. 36
  22. ---

从以上例子可以看到,利用数据集读取数据有三个基本步骤。

1.定义数据集的构造方法

这个例子使用了tf.data.Dataset.from_tensor_slice(),表明数据集是从一个张量中构建的。如果数据集是从文件中构建的,则需要相应调用不同的构造方法。

2.定义遍历器

这个例子使用了最简单的one_shot_iterator来遍历数据集。

3.使用get_next()方法从遍历器中读取数据张量,作为计算图其他部分的输入

在图像相关任务中,输入数据通常以TFRecord形式存储,这时可以用TFRecordDataset来读取数据。与文本文件不同, 每一个TFRecord都有自己不同的feature格式,因此在读取TFRecord时,需要提供一个parser函数来解析所读取的TFRecord的数据格式。

  1. import tensorflow as tf
  2. # 解析一个TFRecord的方法。record是从文件中读取的一个样例。
  3. def parser(record):
  4. # 解析读入的一个样例
  5. features = tf.parse_single_example(
  6. record,
  7. features={
  8. 'feat1': tf.FixedLenFeature([], tf.int64),
  9. 'feat2': tf.FixedLenFeature([], tf.int64),
  10. })
  11. return features['feat1'], features['feat2']
  12. # 从TFRecord文件创建数据集
  13. input_files = ["/path/to/input_file1", "/path/to/input_fi
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/123845
推荐阅读
相关标签
  

闽ICP备14008679号