首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tensorflow中的迭代器在初始化后返回相同的输出

Tensorflow中的迭代器在初始化后返回相同的输出
EN

Stack Overflow用户
提问于 2018-02-23 13:43:40
回答 1查看 281关注 0票数 0

我是个初学者。我正在使用STL-10数据集来训练CNN。

我正在尝试从训练数据集中随机获取10张图像。

代码语言:javascript
运行
复制
img_tensor = get_images_tensor()
label_tensor = get_labels_tensor()
print img_tensor.get_shape()

def create_ds_from_tensor():
    #Creating Dataset from images and labels
    stl_ds = tf.data.Dataset.from_tensor_slices({"images":img_tensor,"labels":label_tensor})
    return stl_ds


def create_next_batch_iterator(dataset,seedin = 6,batch_size = 10):
    #Setting batch size
    batch_size = batch_size
    #Shuffling the dataset
    shuffled_ds = dataset.shuffle(100,seed = seedin,reshuffle_each_iteration = True)
    #Getting batch_size number of images
    batch = shuffled_ds.apply(tf.contrib.data.batch_and_drop_remainder(batch_size))

    #Creating a iterator for the dataset
    #iterator = batch.make_one_shot_iterator()
    iterator = batch.make_initializable_iterator()
    #Getting the next batch
    #next_batch = iterator.get_next()
    return iterator

def get_next_batch(iterator):
    return iterator.get_next()

#Create session
sess = tf.Session()
dataset = create_ds_from_tensor()
iterator = create_next_batch_iterator(dataset)
next_batch = get_next_batch(iterator)['labels']
sess.run(iterator.initializer)
count = 0
init_count = 1
while True:
    try:
        print(sess.run(next_batch))
        count+=1
    except tf.errors.OutOfRangeError:
        print 'End of Dataset'
        #break
        sess.run(iterator.initializer)
        init_count+=1
        print init_count,' initialization'
        if init_count==10:
            break  

现在的问题是,当我看到我得到的输出时,我观察到每次重新初始化后的输出都是相同的。

在数据集的第一次结束和第一次重新初始化初始化之后

代码语言:javascript
运行
复制
End of Dataset
2 initialization
[6 1 7 6 9 3 8 4 6 2]

在数据集的第二次结束和第二次重新初始化初始化之后

代码语言:javascript
运行
复制
End of Dataset
3 initialization
[6 1 7 6 9 3 8 4 6 2]

但是,我应该如何更改这段代码,以便即使在重新初始化之后也能得到不同的输出呢?

EN

回答 1

Stack Overflow用户

发布于 2018-02-24 01:58:15

在我看来,您似乎在每次初始化时都使用相同的种子。这显然会导致每次都进行相同的洗牌。在当前的TF版本中,不设置任何种子就足够了,即“新的”重新洗牌应该是默认行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48941836

复制
相关文章

相似问题

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