首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Dataset时重置OutOfRangeError后的Tensorflow图

在使用Dataset时重置OutOfRangeError后的Tensorflow图
EN

Stack Overflow用户
提问于 2017-08-30 09:00:10
回答 1查看 774关注 0票数 2

我试图使用接口用于Dataset API。将多轮输入注入到一个图形中。

在我的首次尝试上,我使用函数使生成器连续运行3次。但是,批处理大小不是每轮迭代次数的偶数倍的打电话 (10次迭代,批大小为3),来自不同“轮次”/“纪元”的数据最终在同一批中结束(取决于处理张量的顺序;图中有一些并行性)。

在我的第二次尝试上,我尝试在每个时代完成后重新运行迭代器。但是,一旦抛出,所有对关于批处理调用的输出的后续调用都会再次抛出OutOfRangeError,即使在重新运行迭代器的初始化器之后也是如此。

我想将多轮输入依次注入到一个图中,而不是像第一个示例那样使它们重叠(例如,在批处理选项上使用allow_smaller_final_batch )。我在自定义的Tensorflow叉中实例化的一些内核重新启动非常昂贵,例如,mmap处理O文件(10‘d),因此我想从某种程度上充分利用这两个世界。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 20:22:11

我认为问题源于使用tf.contrib.data.Dataset (它支持重新初始化)和tf.train.batch_join() (它使用TensorFlow队列和队列运行程序,因此不支持重新初始化)。

我不完全清楚您的代码在做什么,但我认为您可以将整个管道实现为一个Dataset。替换以下代码片段:

代码语言:javascript
复制
my_iterator = MyIterator(iterations=iterations)
dataset = ds.Dataset.from_generator(my_iterator, 
output_types=my_iterator.output_types, 
output_shapes=my_iterator.output_shapes)
#dataset = dataset.repeat(count=repetitions)
iterator = dataset.make_initializable_iterator()
next_elem = iterator.get_next()

#change constant to 1 or 2 or something to see that the batching is more predictable
ripple_adds = [(tf.stack((next_elem[0], next_elem[1] + constant)),) 
for constant in ripple_add_coefficients]
batch = tf.train.batch_join(ripple_adds, batch_size=batch_size, 
enqueue_many=False, name="sink_queue")

...with如下所示:

代码语言:javascript
复制
my_iterator = MyIterator(iterations=iterations)
dataset = tf.contrib.data.from_generator(my_iterator,
                                         output_types=my_iterator.output_types,
                                         output_shapes=my_iterator.output_shapes)

def ripple_add_map_func(x, y):
  return (tf.contrib.data.Dataset.range(num_ripples)
          .map(lambda r: tf.stack([x, y + r])))

dataset = dataset.flat_map(ripple_add_map_func).batch(batch_size)

iterator = dataset.make_initializable_iterator()
batch = iterator.get_next()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45956139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档