何时使用张量流数据集api与pandas或numpy

ira*_*ira 11 csv preprocessor tensorflow tensorflow-datasets

我已经看到了很多关于使用LSTM进行张量流时间序列的指南,但我仍然不确定当前读取和处理数据的最佳实践 - 特别是当人们应该使用tf.data.DatasetAPI时.

在我的情况下,我有一个文件data.csv与我features,并希望做以下两个任务:

  1. 计算目标 - 目标时间t是某个范围内某些列的百分比变化,即

    labels[i] = features[i + h, -1] / features[i, -1] - 1
    
    Run Code Online (Sandbox Code Playgroud)

    我想h在这里成为一个参数,所以我可以尝试不同的视野.

  2. 滚动窗口 - 出于培训目的,我需要将我的功能滚动到长度为的窗口window:

    train_features[i] = features[i: i + window]
    
    Run Code Online (Sandbox Code Playgroud)

我很乐意使用pandas或构建这些对象numpy,所以我不会问如何实现这一点 - 我的问题是具体应该是什么样的管道tensorflow.

编辑:我想我也想知道我列出的2个任务是否适合数据集api,或者我最好使用其他库来处理它们?

Max*_*xim 9

首先,请注意您可以将数据集API pandas或numpy数组一起使用,如教程中所述:

如果所有输入数据都适合内存,那么从中创建Dataset它们的最简单方法 是将它们转换为tf.Tensor对象并使用 Dataset.from_tensor_slices()

一个更有趣的问题是,您是否应该使用session feed_dict或via Dataset方法组织数据管道.正如评论中已经说明的那样,数据集API更有效,因为数据直接流向设备,绕过客户端.来自"绩效指南":

虽然使用a feed_dict提供数据提供了高度的灵活性,但在大多数情况下使用feed_dict不能以最佳方式进行扩展.但是,在仅使用单个GPU的情况下,差异可以忽略不计.仍强烈建议使用数据集API.尽量避免以下情况:

# feed_dict often results in suboptimal performance when using large inputs  
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
Run Code Online (Sandbox Code Playgroud)

但是,正如他们自己所说,差异可能是微不足道的,GPU仍可以通过普通feed_dict输入充分利用.当训练速度不是很关键时,没有区别,使用任何你觉得舒服的管道.当速度很重要且你有一个大的训练集时,数据集API似乎是一个更好的选择,尤其是你计划分布式计算.

数据集API可以很好地处理文本数据,例如CSV文件,结帐数据集教程的这一部分.