我有一个tf.data.TFRecordDataset
和一个(计算上昂贵的)函数,我想映射到它。我使用TensorFlow 1.12并渴望执行,并且该函数使用EagerTensor.numpy()
使用我的数据集中的张量的NumPy ndarray解释。但是,赋予给tf.Dataset.map()
的函数内部的代码没有急切执行,这就是.numpy()
转换在那里不起作用并且.map()
不再可用的原因。是否可以循环浏览数据集并修改其中的示例?简单地分配给他们似乎无效。
答案 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,然后将此新数据集用作模型的输入。如果您有足够的磁盘空间,那么这可能是您的最佳选择。