首页 文章

Tensorflow合并数据集可选

提问于
浏览
1

所以我在tensorflow中编写一个GAN,需要将鉴别器和生成器作为对象 . 现在我遇到了为鉴别器创建训练数据集的问题 .

目前,我的代码的相关部分如下所示:

self.dataset=tf.data.Dataset.from_tensor_slices((self.y_,self.x_)) #creates dataset
self.fake_dataset=tf.data.Dataset.from_tensor_slices((self.x_fake_)) #creates dataset

self.dataset=self.dataset.shuffle(buffer_size=BUFFER_SIZE) #shuffles
self.fake_dataset=self.fake_dataset.shuffle(buffer_size=BUFFER_SIZE) #shuffles

self.dataset=self.dataset.repeat().batch(self.batch_size) #batches      
self.fake_dataset=self.fake_dataset.repeat().batch(self.batch_size) #batches

self.iterator=tf.data.Iterator.from_structure(self.dataset.output_types,self.dataset.output_shapes) #creates iterators  
self.fake_iterator=tf.data.Iterator.from_structure(self.fake_dataset.output_types,self.fake_dataset.output_shapes) #creates iterators   

self.x=self.iterator.get_next() 
self.x_fake=self.fake_iterator.get_next() 

self.dataset_init_op = self.iterator.make_initializer(self.dataset,name=self.name+'_dataset_init')  
self.fake_dataset_init_op=self.fake_iterator.make_initializer(self.fake_dataset,name=self.name+'_dataset_init')

我需要的是该函数可以交替地给出一批self.x,然后是一批self.x_fake .

有没有一种简单的方法可以做到这一点,或者我必须得到一个计数器和一个if语句?

1 回答

  • 0

    不确定我是否正确理解你需要什么,但是如果你想在图形构造时定义的同一个调用中使用不同的迭代器,那么你可以使用Python逻辑来选择你需要的迭代器 . 例如:

    def __init__(self):
        # Make graph and iterators...
        self._use_fake_batch = False
    
    def next_batch(self):
        iter = self.fake_iterator if self._use_fake_batch else self.iterator
        self._use_fake_batch = not self._use_fake_batch
        return iter.get_next()
    

    或者没有其他变量,使用 itertools

    from itertools import chain, repeat
    
    def __init__(self):
        # Make graph and iterators...
        self._iterators = chain.from_iterable(repeat((self.iterator, self.fake_iterator)))
    
    def next_batch(self):
        return next(self._iterators).get_next()
    

相关问题