如何在使用队列时在tensorflow训练期间测试网络

BiB*_*iBi 8 queue training-data neural-network deep-learning tensorflow

我正在使用队列使用下面的代码将我的训练示例提供给我的网络,并且它正常工作.

但是,我希望每n次迭代能够提供一些测试数据,但我真的不知道应该如何进行.我应该暂时停止队列并手动提供测试数据吗?我应该创建另一个队列来测试数据吗?

编辑:这样做的正确方法是创建一个单独的文件,比如eval.py连续读取最后一个检查点并评估网络?这就是他们在CIFAR10示例中的做法.

batch = 128 # size of the batch
x = tf.placeholder("float32", [None, n_steps, n_input])
y = tf.placeholder("float32", [None, n_classes])

queue = tf.RandomShuffleQueue(capacity=4*batch,
                      min_after_dequeue=3*batch,
                      dtypes=[tf.float32, tf.float32],
                      shapes=[[n_steps, n_input], [n_classes]])
enqueue_op = queue.enqueue_many([x, y])
X_batch, Y_batch = queue.dequeue_many(batch)

sess = tf.Session()

def load_and_enqueue(data):
    while True:
        X, Y = data.get_next_batch(batch)
        sess.run(enqueue_op, feed_dict={x: X, y: Y})

train_thread = threading.Thread(target=load_and_enqueue, args=(data))
train_thread.daemon = True
train_thread.start()

for _ in xrange(max_iter):
    sess.run(train_op)
Run Code Online (Sandbox Code Playgroud)

Jua*_*ang -1

您可以在代码中添加 eval_op,然后在每 n(例如 n=1000)次迭代中进行评估。示例如下:

for niter in xrange(max_iter):
    sess.run(train_op)
    if niter % 1000 == 0:
        sess.run(eval_op)
Run Code Online (Sandbox Code Playgroud)