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

时间:2018-01-14 03:24:13

标签: csv tensorflow preprocessor tensorflow-datasets

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

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

  1. 计算目标 - 时间t的目标是变化的百分比 某些视野中的某些专栏,即

    labels[i] = features[i + h, -1] / features[i, -1] - 1
    

    我希望h成为这里的参数,所以我可以尝试不同的视野。

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

    train_features[i] = features[i: i + window]
    
  3. 我完全可以使用pandasnumpy来构建这些对象,所以我不会问如何实现这一目标 - 我的问题是具体的问题是这样的管道在{中应该是什么样子的{1}}。

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

1 个答案:

答案 0 :(得分:9)

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

  

如果您的所有输入数据都适合内存,则最简单的方法是创建一个   来自他们的Dataset是将它们转换为tf.Tensor个对象并使用   Dataset.from_tensor_slices()

一个更有趣的问题是,您是否应该使用会话feed_dictDataset方法组织数据管道。正如评论中已经说明的那样,数据集API更有效,因为数据直接流向设备,绕过客户端。来自"Performance Guide"

  

使用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})

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

数据集API可以很好地处理文本数据,例如CSV文件,结帐this section of the dataset tutorial