tf.Dataset.from_tensor_slices性能问题

时间:2018-09-15 14:54:47

标签: tensorflow machine-learning deep-learning tensorflow-datasets tensorflow-estimator

对于我的输入fn,我正在填充tf.Data.Dataset.from_tensor_slices((np.array1,np.array2,np.array3)

我正在通过调用dataset.map解析它们。结果,我要返回我的数据集。

我将理解数据集的初始化可能会很慢,但是当我调用tf.estimator train_and_evaluate函数来训练和评估模型时,它的表现非常糟糕。可能是每个时期都在填充数据。请问是什么原因?我该如何克服这个问题。您有什么建议?

谢谢。

2 个答案:

答案 0 :(得分:0)

问题是您正在执行c ++ Python往返。如果可以的话,请尽量避免使用numpy。也许尝试使用tf记录。

您在地图功能中到底在做什么?

答案 1 :(得分:0)

要提高数据提取的效率,您可以尝试以下三种方法:

  1. 使用Tfrecords。
  2. 使用生成器函数
  3. 使用自定义数据集阅读器

使用tf记录可能是解决此问题的最简单,最有效的方法。将数据集转换为tf记录数据集后,它可以大大加快速度

如果您不想转换数据集,则会遇到另外两种方法:

使用生成器并使用tfdataset.from_generator函数(https://www.tensorflow.org/api_docs/python/tf/data/Dataset)创建数据集。因为您没有使用优化的C ++阅读器,但是这会减慢您的数据接收速度,但是如果您使用一点点麻木的魔术,就可以创建很好的阅读器。如果您想快速浏览数据集,请使用此方法。

如果您想要与tfrecords相似的速度,则必须为tf数据集创建自定义阅读器。您可以在此处找到说明:https://www.tensorflow.org/extend/new_data_formats 为此,您需要一点点c ++知识。

总共:

Tf记录是否要转换

from_generator,如果您想快速变脏,而性能不是最重要的

如果您想正确使用自己的阅读器功能

我希望我能有所帮助:)