TensorFlow:是否可以使用for循环将函数映射到数据集?

时间:2019-05-20 12:05:57

标签: python tensorflow tensor map-function

我有一个tf.data.TFRecordDataset和一个(计算上昂贵的)函数,我想映射到它。我使用TensorFlow 1.12并渴望执行,并且该函数使用EagerTensor.numpy()使用我的数据集中的张量的NumPy ndarray解释。但是,赋予给tf.Dataset.map()的函数内部的代码没有急切执行,这就是.numpy()转换在那里不起作用并且.map()不再可用的原因。是否可以循环浏览数据集并修改其中的示例?简单地分配给他们似乎无效。

1 个答案:

答案 0 :(得分:1)

不,不完全是。

数据集在本质上是惰性计算的,因此不能以这种方式分配给它-从概念上讲,它试图将其视为管道而不是变量:读取每个值,并通过任何with requests.Session() as s: for query in queries: url = 'https://scholar.google.com/scholar?q=' + query + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search' r = s.get(url) soup = bs(r.content, 'lxml') # or 'html.parser' title = soup.select_one('.gs_rt a') if title is None: title = 'No title' link = 'No link' else: link = title['href'] title = title.text citations = soup.select_one('[title=Cite] + a') if citations is None: citations = 'No citation count' else: citations = citations.text print(title, link, citations) 操作,{{1 }}操作等,并根据需要浮出水面。 “分配”一个值就是将其写入.tfrecord文件中的磁盘中,而且几乎不可能得到支持(这些文件专门设计为快速读取而不是随机访问的)。

您可以改为使用TensorFlow进行预处理,并使用map()写完完成昂贵的预处理后的新tfrecord,然后将此新数据集用作模型的输入。如果您有足够的磁盘空间,那么这可能是您的最佳选择。