python - 如何将 prefetch_to_device 与 make_initializer 结合使用
问题描述
根据官方文档, Tensorflow 1.8已经引入tf.contrib.data.prefetch_to_device
,可以配合使用。tf.data.Dataset.apply
我已经编写了一些自定义数据加载,我想利用它来预取到 GPU。问题是这个操作需要是数据集所有转换中的最后一个。我正在使用tf.data.Iterator.make_initializer
,tf.data.Iterator.from_structure
如下所示。这是引发错误的最小示例。
import tensorflow as tf
class MyData(object):
def __call__(self):
return range(100)
expected_shapes = []
expected_types = tf.int32
iterator = tf.data.Iterator.from_structure(output_types=expected_types, output_shapes=expected_shapes)
dataset = tf.data.Dataset.from_generator(MyData(), output_types=expected_types, output_shapes=expected_shapes)
prefetch_op = tf.contrib.data.prefetch_to_device(device="/gpu:0")
dataset = dataset.apply(prefetch_op)
# This raises NotImplementedError: `prefetch_to_device()` must be the last transformation in a dataset pipeline.
initializer = iterator.make_initializer(dataset)
当然,当我将顺序翻转时不会发生这种情况,但是初始化器不会考虑预取转换。
initializer = iterator.make_initializer(dataset)
dataset = dataset.apply(prefetch_op)
在告诉它预取之后,我怎样才能让它工作来创建初始化程序?或者这根本不可能(目前)?与来自 tensorflow 的这个测试用例Iterator
不同,我想避免创建一个新的.
解决方案
推荐阅读
- apache-spark - 使用 Airflow dag 运行 EMR 集群创建,一旦任务完成 EMR 将被终止
- reactjs - 获取请求后无法设置状态
- list - 使用 PowerShell 在文本文档中搜索包含关键字列表的大型文件夹
- tinymce - TinyMCE 4.9.x 仍然不能在 shadow dom 中工作。有什么想法可以解决吗?
- json - Excel 转 JSON 解析
- r - 使用 voronoi 在 Leaflet 中创建 surface_polygons 创建包含点数据的等值线图
- c - 在 C++ 中的链接列表中成对交换
- tesseract - 如何在新应用界面的 jTessBoxEditor (tesseract) 中生成 tiff/box?
- c - 如何在编译时检查 liblua 版本?
- r - df$horsepower 中的错误:“闭包”类型的对象不是子集