Python 在每个数据获取操作中获得稍微不同的输入
我正在遵循,并使用调用的函数获取数据。我的代码如下:Python 在每个数据获取操作中获得稍微不同的输入,python,io,tensorflow,Python,Io,Tensorflow,我正在遵循,并使用调用的函数获取数据。我的代码如下: import tensorflow as tf import cifar10 # Get images and labels images, labels = cifar10.inputs(eval_data='test') # Start running operations on the Graph. sess = tf.Session() sess.run(tf.initialize_all_variables()) # Star
import tensorflow as tf
import cifar10
# Get images and labels
images, labels = cifar10.inputs(eval_data='test')
# Start running operations on the Graph.
sess = tf.Session()
sess.run(tf.initialize_all_variables())
# Start the queue runners.
tf.train.start_queue_runners(sess=sess)
img, lab = sess.run([images, labels])
print(lab)
为了测试这一点,我运行批大小为10的代码,并打印第一批的标签。每次执行此代码时,我都希望得到相同的输出,因为函数中的shuffle=False。但是,我观察到每次执行中的标签略有不同,例如,三次连续执行的输出为:
run-1: [0 1 2 2 1 1 1 9 8 8]
run-2: [1 2 2 0 1 1 1 9 8 8]
run-3: [0 2 2 1 1 1 1 9 8 8]
我想知道:
正在启动的队列运行程序有多个线程正在从磁盘加载数据并将其添加到队列中 队列本身是线程安全的,但没有任何强制命令 因此,即使不使用洗牌队列,获取和插入项目的线程之间的竞争条件也会稍微随机化顺序
使其完全可重复的最简单方法是只使用1个线程来获取项目。这可能会很慢。您正在启动的队列运行程序有多个线程正在从磁盘加载数据并将其添加到队列中 队列本身是线程安全的,但没有任何强制命令 因此,即使不使用洗牌队列,获取和插入项目的线程之间的竞争条件也会稍微随机化顺序
使其完全可重复的最简单方法是只使用1个线程来获取项目。这可能会很慢。Hi@mdaoust,回答这个问题很有帮助。还有一个问题。我有这样的标签:[0 0 0 1 1 1…]。在获取数据时,我观察到它不是从第一个索引开始的,例如,当批量大小为5时,我得到[0 1]。你能告诉我为什么吗?它使用函数。摘要编写器使用队列中的数据,因此,轮流使用摘要线程查看所有数据hi@mdaoust,这对澄清问题非常有用。还有一个问题。我有这样的标签:[0 0 0 1 1 1…]。在获取数据时,我观察到它不是从第一个索引开始的,例如,当批量大小为5时,我得到[0 1]。你能告诉我为什么吗?它使用函数。摘要编写器使用队列中的数据,所以打开摘要线程以查看所有数据