我是初学者。我正在使用STL-10数据集训练CNN。
我试图从火车数据集中获取10张图像的随机洗牌。
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
现在,问题在于,当我看到要获得的输出时,我会观察到每个重新定位后输出相同。
数据集的第一端和第1个重新调整初始化
End of Dataset
2 initialization
[6 1 7 6 9 3 8 4 6 2]
数据集的第二端和第二个重新调整初始化
End of Dataset
3 initialization
[6 1 7 6 9 3 8 4 6 2]
但是,我应该如何更改此代码,以便即使在重新定位后也会获得不同的输出?
在我看上去好像您在每个初始化中都在使用相同的种子一样。显然,每次都会导致同样的改组。在当前的TF版本中,应该不设置任何种子,即"新"重新换句应该是默认行为。