TensorFlow之数据集(dataset)

本文介绍如何在TensorFlow中使用数据集(dataset)进行数据读取,包括从数组、文本文档和TFRecord文件创建数据集,以及数据集的高层操作如map、shuffle、batch和repeat。示例代码展示了如何实现这些功能。
摘要由CSDN通过智能技术生成

学习记录

前面学习过队列和线程用于读取训练数据,今天学习《TensorFlow实战Google深度学习框架》一书中的另外一种数据的读取方式:通过数据集读取训练数据。
利用数据集读取数据有三个基本步骤:

  1. 定义数据集的构造方式。
  2. 定义迭代器。
  3. 使用get_next()方法从迭代器中读取数据张量,作为计算图其他部分的输出。

数据集的基本使用方法

首先注明两点:

  1. 在数据集框架中,每一个数据集代表一个数据来源:数据可能来自一个张量,一个文本文件,或者一个TFRecord文件等。
  2. 用于训练数据通常无法全部写入内存中,所以从数据集读取数据时需要使用一个迭代器(Iterator)按顺序进行读取,这点与队列的dequeue()操作以及Reader的read()操作类似。

在正式叙述利用数据集读取训练数据之前,先集中了解一下数据集的创建。

数组创建数据集

在正式介绍利用队列与多线程读取数据之前,先给出一个简单的程序来生成样例数据。

# 从一个数组创建数据集
input_data = [1,2,3,5,8]
dataset = tf.data.Dataset.from_tensor_slices(input_data)

# 定义一个迭代器用于遍历数据集。
# 因为上面定义的数据集没有用placeholder作为输入参数,
# 所以这里可以使用最简单的one_shot_iterator
iterator = dataset.make_one_shot_iterator()

# get_next()返回代表一个输入数据的张量,类似于队列的dequeue()
x = iterator.get_next()
y = x * x


with tf.Session() as sess:
    for i in range(len(input_data)):
        print(sess.run(y))
  1. tf.data.Dataset.from_tensor_slices()
    用于从一个数组创建一个数据集。

  2. make_one_shot_iterator() 产生一个单次的迭代器。这种迭代器进支持对数据进行一次迭代,迭代完成后如还要继续迭代就会报错:OutOfRangeError: End of sequence

  3. get_next()
    用于从迭代器中取出并返回一个数据

文本文档创建数据集

# 从文本文档创建数据集
input_files = [r'C:\Users\USER\Desktop\hekai.txt',r'C:\Users\USER\Desktop\1.txt']
dataset = tf.data.TextLineDataset(input_files)

iterator = dataset.make_one_shot_iterator()

x = iterator.get_next()

with tf.Session() as sess:
    for i in range(10):
        print(sess.run(x))
  1. tf.data.TextLineDataset()
    利用文本文档创建数据集

TFRecord文件创建数据集

# 从文本文档创建数据集
# 解析一个TFRecord的方法
def parser(record):
    features = tf.parse_single_example(
            record,
            features={
   
                    'image_raw'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值