tensorflow Dataset操作

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.Dataset简介

Dataset是tf 1.3加入的新API,主要是用于相关的数据处理与构建,并输入模型。
之前的版本处理数据的方式一般有:
1.使用placeholder,从内存中读取数据,很多早期tf相关的代码与例子大部分都是使用这种方式。
2.使用队列机制读取硬盘上的数据。

2.from_tensor_slices

from_tensor_slices是dataset里经常被使用到的函数,作用就是对给定的各种数据,包括元祖,列表,张量等进行切片。。

举个常见的例子

import tensorflow as tf
import numpy as np

def t1():
    features = np.random.normal(0.0, 1.0, size=(5, 2))
    labels = np.random.normal(0.0, 1.0, (5, 1))
    print(features)
    print(labels)

    data = tf.data.Dataset.from_tensor_slices((features, labels))
    print(data)

t1()

输出结果为

[[ 0.37208844 -1.26077084]
 [-0.71780999  2.58988077]
 [ 1.3527441  -0.44104282]
 [-0.55810738 -1.35183379]
 [-0.40439778 -0.57422795]]
[[ 1.76836302]
 [-0.20405357]
 [ 1.25057682]
 [-0.43016585]
 [ 1.79215106]]
<DatasetV1Adapter shapes: ((2,), (1,)), types: (tf.float64, tf.float64)>

上面的例子中,features是一个 5 ∗ 2 5*2 52大小的矩阵,labels是 5 ∗ 1 5*1 51的矩阵,注意两个矩阵需要行数一致。

from_tensor_slices所做的,就是将特征矩阵中的每一行拿出来,维度为(2,),labels矩阵里的每一行拿出来,维度为(1,),这样就相当于做了一个"切片"。

3.make_one_shot_iterator

import tensorflow as tf
import numpy as np


def t1():
    features = np.random.normal(0.0, 1.0, size=(5, 2))
    labels = np.random.normal(0.0, 1.0, (5, 1))

    data = tf.data.Dataset.from_tensor_slices((features, labels))

    data = data.make_one_shot_iterator().get_next()
    # data = data.shuffle(100).batch(2).make_one_shot_iterator().get_next()

    with tf.Session() as sess:
        try:
            while True:
                print(sess.run(data))
        except tf.errors.OutOfRangeError:
            print("out of range!")

t1()

最终输出为

(array([-0.7805815 ,  0.26261423]), array([-1.08216157]))
(array([ 0.28119871, -1.26563717]), array([0.07952392]))
(array([-1.82131283, -1.75011567]), array([0.29634039]))
(array([-1.41344481,  0.39402909]), array([1.53077699]))
(array([ 3.88245974, -0.65329503]), array([-0.57519203]))
out of range!

4.shuffle repeat batch

实际开发过程中,经常使用的一种方式为

import tensorflow as tf
import numpy as np


def t1():
    features = np.random.normal(0.0, 1.0, size=(5, 2))
    labels = np.random.normal(0.0, 1.0, (5, 1))

    data = tf.data.Dataset.from_tensor_slices((features, labels))

    data = data.shuffle(100).batch(2).make_one_shot_iterator().get_next()

    with tf.Session() as sess:
        try:
            while True:
                print(sess.run(data))
        except tf.errors.OutOfRangeError:
            print("out of range!")

t1()

最终输出为

(array([[ 0.19499576, -0.11807744],
       [ 1.0751453 ,  1.33679166]]), array([[-0.08767326],
       [ 0.34821432]]))
(array([[ 0.0240161 , -1.50674333],
       [ 0.03043996, -0.5588178 ]]), array([[0.98569578],
       [0.69333419]]))
(array([[-0.15767341,  0.63513155]]), array([[-0.64394318]]))
out of range!

shuffle的作用是将数据打散
repeat是将数据重复多次。因为在模型训练过程中,肯定不止一个epoch,使用repeat的话就可以达到多个epoch的目的。
batch是每次取多条数据,每次训练的时候用一个batch的数据去训练。

### 回答1: TensorFlow Dataset(TFDS)是一个用于构建高效、可重复使用的数据管道的库。它提供了一些预先处理好的数据集,同时也支持用户自己导入自定义数据集,并可以在数据集上应用各种转换操作,例如 shufflebatch、map、filter 等等。使用 TensorFlow Dataset 可以帮助用户更加方便地处理数据,并提高数据处理的效率。 ### 回答2: TensorFlow Dataset是一种高性能、易用、可重复的数据输入管道工具,用于处理大规模的训练和验证数据集。TensorFlow Dataset支持多种类型的数据源,如TensorFlow中的张量、numpy数组、Python生成器、CSV文件等等,并提供了一系列数据变换操作,例如shufflebatch、map和repeat等等,有效地减少数据预处理的代码量。TensorFlow Dataset还支持多线程和预取数据操作,可以大幅度提高数据输入的效率。 使用TensorFlow Dataset有以下优点: 1.性能高:TensorFlow Dataset很好地利用了硬件资源,提供了高效的数据输入管道,极大地提高了训练效率。 2.处理数据方便:TensorFlow Dataset提供了一系列数据变换操作,方便地处理数据。 3.易用:TensorFlow Dataset简单易懂,并且有很多示例可以参考。 4.可复制:TensorFlow Dataset的数据输入是可重复的,保证了实验结果的可复现性。 在使用TensorFlow Dataset时,需要先将数据转换成tf.data.Dataset类型,然后使用map、batchshuffle等方法进行数据处理,最后以迭代器的形式读取数据进行训练。TensorFlow Dataset的优点在于提供了一种易于使用,高效灵活的数据处理工具,可以大幅度降低数据预处理的代码量,同时保证训练效率和实验结果的可复现性,适用于大规模深度学习训练及推理。 ### 回答3: TensorFlow Dataset是Google开发的一种灵活、高效的数据载入工具,它是TensorFlow官方推荐的载入数据的方法之一。使用TensorFlow Dataset可以实现对大型数据集进行高效、快速的处理,同时也可以方便地进行数据预处理和输入函数的编写。 TensorFlow Dataset支持多种数据源,如numpy数组、csv文件、TFRecord文件、文本文件等。同时,它也支持对数据进行变换、扩充、重复、分片等操作,方便进行数据预处理。在数据输入时,TensorFlow Dataset可以自动进行多线程读取,提高数据输入的效率。 TensorFlow Dataset同时也支持多种数据集的处理操作,如shufflebatchrepeat、map等。这些操作可以方便地实现数据集的乱序、分批、数据增强等操作。同时,TensorFlow Dataset还提供了一种方便的函数tf.data.Iterator,可以方便地实现对数据集的遍历。 TensorFlow Dataset的使用可以提高训练效率、降低内存消耗、方便数据预处理等,因此在TensorFlow的开发中得到广泛的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值