迭代 tf.data.Dataset 的有效方法
Efficient way to iterate over tf.data.Dataset
我想知道在 TensorFlow 2.4 中迭代 tf.data.Dataset 的最有效方法是什么。
我使用的是典型的:
for example in dataset:
code
但是,我已经测量了wall time,并且由于我的数据集很大,所以计算循环需要太多时间。有没有其他选项可以减少计算时间?
您可以使用 .map(map_func)
函数,这是对数据集中的每个样本应用一些预处理的有效方法。它在数据集的每个样本上并行运行 map_func
。您甚至可以通过 num_parallel_calls
参数设置并行调用的数量。 [Reference]
这里有一个来自 tensorflow 网站的例子:
dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
dataset = dataset.map(lambda x: x + 1) # instead of adding 1 to each sample in a for loop
list(dataset.as_numpy_iterator()) # ==> [ 2, 3, 4, 5, 6 ]
你也可以传递一个函数:
def my_map(x): # if dataset has y, it should be like "def my_map(x,y)" and "return x,y"
return x+1
dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
dataset = dataset.map(my_map) # instead of adding 1 to each sample in a for loop
list(dataset.as_numpy_iterator()) # ==> [ 2, 3, 4, 5, 6 ]
我想知道在 TensorFlow 2.4 中迭代 tf.data.Dataset 的最有效方法是什么。
我使用的是典型的:
for example in dataset:
code
但是,我已经测量了wall time,并且由于我的数据集很大,所以计算循环需要太多时间。有没有其他选项可以减少计算时间?
您可以使用 .map(map_func)
函数,这是对数据集中的每个样本应用一些预处理的有效方法。它在数据集的每个样本上并行运行 map_func
。您甚至可以通过 num_parallel_calls
参数设置并行调用的数量。 [Reference]
这里有一个来自 tensorflow 网站的例子:
dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
dataset = dataset.map(lambda x: x + 1) # instead of adding 1 to each sample in a for loop
list(dataset.as_numpy_iterator()) # ==> [ 2, 3, 4, 5, 6 ]
你也可以传递一个函数:
def my_map(x): # if dataset has y, it should be like "def my_map(x,y)" and "return x,y"
return x+1
dataset = tf.data.Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
dataset = dataset.map(my_map) # instead of adding 1 to each sample in a for loop
list(dataset.as_numpy_iterator()) # ==> [ 2, 3, 4, 5, 6 ]