关于tf.contrib.data.Dataset(来自TensorFlow 1.2,请参见此处和此处)用法:如何获取数据的方式并不真正适合我通常如何获取数据.在我的情况下,我有一个线程,我在那里收到数据,我不知道它什么时候会结束但我看到它何时结束.然后我等到我处理完所有的缓冲区,然后我完成了一个纪元.我怎样才能得到这个逻辑Dataset?
请注意,我更喜欢Dataset接口而不是QueueBase接口,因为它为我提供了迭代器接口,我可以重新初始化,甚至重置为不同的接口Dataset.与在关闭后无法重新打开的队列相比,这更加强大(请参阅此处和此处).
也许是一个类似的问题,或者同样的问题:我如何绕过Dataset一个队列?我有一些线程从某处读取一些数据,可以提供它并以某种方式排队.如何将数据输入Dataset?我可以无限次重复一些虚拟张量然后map用来返回我的queue.dequeue()但是这真的只能让我回到队列的所有原始问题,即如何重新打开队列.
我想管理我的培训tf.estimator.Estimator但是在tf.dataAPI 旁边使用它有些麻烦.
我有这样的事情:
def model_fn(features, labels, params, mode):
# Defines model's ops.
# Initializes with tf.train.Scaffold.
# Returns an tf.estimator.EstimatorSpec.
def input_fn():
dataset = tf.data.TextLineDataset("test.txt")
# map, shuffle, padded_batch, etc.
iterator = dataset.make_initializable_iterator()
return iterator.get_next()
estimator = tf.estimator.Estimator(model_fn)
estimator.train(input_fn)
Run Code Online (Sandbox Code Playgroud)
因为我不能使用一个make_one_shot_iterator用于我的用例,我的问题是input_fn包含一个应该在其中初始化的迭代器model_fn(这里,我tf.train.Scaffold用来初始化本地操作).
此外,我明白我们不能只使用input_fn = iterator.get_next其他ops将不会添加到同一图表.
初始化迭代器的推荐方法是什么?