Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:具有num_parallel_调用的数据集映射不提供加速_Python_Tensorflow_Tensorflow Datasets - Fatal编程技术网

Python Tensorflow:具有num_parallel_调用的数据集映射不提供加速

Python Tensorflow:具有num_parallel_调用的数据集映射不提供加速,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我正在使用TensorFlow和tf.data.DatasetAPI来执行一些文本预处理。在我的dataset.map调用中,如果不使用num\u parallel\u调用,预处理10K记录需要0.03秒 当我使用num\u parallel\u trials=8(我机器上的内核数)时,预处理10K记录也需要0.03秒 我在谷歌上搜索了一下,发现了这个: 它们表明您需要使用TensorFlow操作来查看加速。事情是这样的:我只使用TensorFlow操作。具体来说,我正在映射此函数: def p

我正在使用TensorFlow和
tf.data.Dataset
API来执行一些文本预处理。在我的
dataset.map
调用中,如果不使用
num\u parallel\u调用
,预处理10K记录需要0.03秒

当我使用
num\u parallel\u trials=8
(我机器上的内核数)时,预处理10K记录也需要0.03秒

我在谷歌上搜索了一下,发现了这个:

它们表明您需要使用TensorFlow操作来查看加速。事情是这样的:我只使用TensorFlow操作。具体来说,我正在映射此函数:

def preprocess(self, x, data_table):
    x['reviews'] = tf.string_split(x['reviews'], delimiter=' ')
    x['reviews'] = tf.sparse_tensor_to_dense(x['reviews'], default_value=' ')
    x['reviews'] = tf.cast(data_table.lookup(x['reviews']), tf.int32)
    nbatch = tf.cast(tf.shape(x['reviews'])[0], tf.int32)
    nseq = tf.cast(tf.shape(x['reviews'])[1], tf.int32)
    padding = tf.cond(tf.less(nseq, 100),
                      lambda: 0 * tf.ones([nbatch, 100 - nseq], tf.int32),
                      lambda: 0 * tf.ones([nbatch, 0], tf.int32))
    x['reviews'] = tf.concat((x['reviews'], padding), axis=1)[:, :100]
    x['reviews'].set_shape([None, 100])
    return x
知道为什么我没有看到任何加速吗


谢谢

我的第一个假设是,对lambda的调用会破坏您的速度,因为每次迭代和核心都会延迟初始化。根据这个url,他在速度和核心使用方面也有类似的问题。
我基本上是张量和管道的初学者,但我将在以后访问计算机时进行研究,我想知道哪些可执行文件正在哪里运行。

可能有很多原因,但我发现这两个操作
稀疏张量到密集
lambda
是这里的瓶颈。但为了进一步研究,您应该提供更多详细信息,说明您想要实现什么,以及您的数据集和管道如何准确地查找传递给
dataset.map()的函数
preprocess()
?(询问是因为我不希望
data_table
成为map函数中的参数。)正如mlRocks所建议的,查看输入管道的更大上下文会有所帮助。例如,如果输入数据位于速度较慢的存储系统上,则可能存在I/O瓶颈,
map()
中的并行性将无法恢复。