Python 如何在可初始化迭代器上使用共享_名称

Python 如何在可初始化迭代器上使用共享_名称,python,tensorflow-datasets,Python,Tensorflow Datasets,在分布式tensorflow中,我需要在一个worker上处理输入数据,并在其他不同会话上使用它们。 “make_initializable_iterator”有一个未记录的参数“shared_name”,但是如果不在每个会话上创建数据集,如何初始化迭代器呢 def make_initializable_iterator(self, shared_name=None): """Creates an `Iterator` for enumerating the elements of th

在分布式tensorflow中,我需要在一个worker上处理输入数据,并在其他不同会话上使用它们。 “make_initializable_iterator”有一个未记录的参数“shared_name”,但是如果不在每个会话上创建数据集,如何初始化迭代器呢

def make_initializable_iterator(self, shared_name=None):
    """Creates an `Iterator` for enumerating the elements of this dataset.
    Note: The returned iterator will be in an uninitialized state,
    and you must run the `iterator.initializer` operation before using it"""

更清楚的是,如果我定义了一个名为shared_的迭代器,那么如何在另一个会话中使用该迭代器。
iter_init_op
可能就是您要搜索的:

# this's how a input pipeline usually looks like
ncores = multiprocessing.cpu_count()
dataset = tf.data.Dataset.from_tensor_slices(file_list))
dataset = dataset.map(augmentation_function, num_parallel_calls=ncores)
batch = dataset.shuffle(batch_size).batch(batch_size).prefetch(5)

# construct iterator
it = batch.make_initializable_iterator(shared_name='shared_iterator')
iter_init_op = it.initializer # you call this operation within session to initialiser
会议期间:

with tf.Session() as sess:
     ...
     for epoch in range(nb_epoch):
          # init iterator during epoch
          sess.run(iter_init_op)

iter\u init\u op
可能就是您正在搜索的内容:

# this's how a input pipeline usually looks like
ncores = multiprocessing.cpu_count()
dataset = tf.data.Dataset.from_tensor_slices(file_list))
dataset = dataset.map(augmentation_function, num_parallel_calls=ncores)
batch = dataset.shuffle(batch_size).batch(batch_size).prefetch(5)

# construct iterator
it = batch.make_initializable_iterator(shared_name='shared_iterator')
iter_init_op = it.initializer # you call this operation within session to initialiser
会议期间:

with tf.Session() as sess:
     ...
     for epoch in range(nb_epoch):
          # init iterator during epoch
          sess.run(iter_init_op)

这不是关于成员初始值设定项,而是我如何在其他会话中获取“批处理”数据集。我可能会误解你的问题,因为它不清楚。通过这样做,可以在CPU上处理输入数据并预取(为GPU做好准备)。此iterator.initializer在培训之外调用。预取允许您以某种方式使数据队列为培训做好准备,以最大限度地提高gpu的占用率。检查。@路人,你能不能再给我一些代码来说明你想要什么?我已经弄明白了。在一个会话中通过“make_initializable_iterator”定义具有共享_名称的迭代器,并在另一个会话中使用此迭代器。“用户”会话不需要初始化迭代器,但没有正确的方法检查它是否已初始化。@路人告诉我,如果我错了,您的“用户”会话是一个还原图形和权重的会话?我认为您可能至少需要初始化一次会话,否则您可能会得到“FailedPremissionError(回溯请参见上文):GetNext()失败,因为迭代器尚未初始化。”这不是关于成员初始值设定项的问题,但我如何获得“批处理”“其他会议上的数据集。我可能会误解你的问题,因为它不清楚。通过这样做,可以在CPU上处理输入数据并预取(为GPU做好准备)。此iterator.initializer在培训之外调用。预取允许您以某种方式使数据队列为培训做好准备,以最大限度地提高gpu的占用率。检查。@路人,你能不能再给我一些代码来说明你想要什么?我已经弄明白了。在一个会话中通过“make_initializable_iterator”定义具有共享_名称的迭代器,并在另一个会话中使用此迭代器。“用户”会话不需要初始化迭代器,但没有正确的方法检查它是否已初始化。@路人告诉我,如果我错了,您的“用户”会话是一个还原图形和权重的会话?我认为您可能至少需要初始化一次会话,否则您可能会得到“FailedPremissionError”(请参见上面的回溯):GetNext()失败,因为迭代器尚未初始化。“经过一些实验,我发现迭代器应该只在创建它的会话上初始化。所以真正的问题应该是如何检查迭代器在分布式会话中是否初始化。经过一些实验,我发现迭代器应该只在创建它的会话上初始化。因此,真正的问题应该是如何检查迭代器在分布式会话中是否初始化。