7

Я использую очередь для подачи моих учебных примеров в свою сеть, используя приведенный ниже код, и он работает правильно.Как проверить сеть во время обучения в тензорном потоке при использовании очереди

Однако, я хотел бы иметь возможность кормить некоторые тестирования данных каждые п итераций, но я не знаю, как мне действовать. Должен ли я временно приостановить очередь и загрузить данные тестирования вручную? Должен ли я создать другую очередь только для тестирования данных?

Edit: ли правильный способ сделать это, чтобы создать отдельный файл, скажем 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) 
+0

Есть несколько хороших функций высокого уровня для этого, которые недавно были добавлены в [репозиторий github] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/slim/ Python/тонкий/evaluation.py). Они основаны на выполнении оценок с помощью отдельного исполняемого файла, который считывает файлы контрольной точки, созданные путем обучения. – user728291

+0

@ user728291, есть ли какой-нибудь пример в этом же скрипте? Кажется, другие инструменты, такие как Caffe, просто делают это так. –

+0

Как насчет использования двух очередей (или очереди и заполнителя, которые подаются), и использовать 'tf.where', чтобы решить, какой из этих двух источников используется для питания сети? –

ответ

-1

Вы можете добавить eval_op в свои коды, а затем выполнить оценку во всех n (скажем n = 1000) итерациях. Примером может служить следующим образом:

for niter in xrange(max_iter): 
    sess.run(train_op) 
    if niter % 1000 == 0: 
     sess.run(eval_op) 
1

Вы можете Bulid другой очереди испытаний и копию модели обучения в качестве тестовой модели, как это:

trainX, trainY = Queue0(batchSize, ...)... 
testX, testY= Queue1(batchSize, ...)... 
modelTrain = inference(trainX, trainY, ...) 
# reuse variables 
modelTest = inference(testX, testY, ...) 
sess.run(train_op,loss_op,trainX,trainY) 
sess.run(test_op,testX,testY) 

Таким образом, может потреблять больше памяти, так как 2 модели инициализируются, надеюсь, что лучшее решение

 Смежные вопросы

  • Нет связанных вопросов^_^