7

Tôi đang sử dụng hàng đợi để cấp các ví dụ đào tạo cho mạng của mình bằng cách sử dụng mã bên dưới và hoạt động bình thường.Làm thế nào để kiểm tra mạng trong khi đào tạo trong tensorflow khi sử dụng hàng đợi

Tuy nhiên, tôi muốn có thể cung cấp một số dữ liệu thử nghiệm mỗi n lặp lại, nhưng tôi thực sự không biết phải tiến hành như thế nào. Tôi có nên dừng hàng đợi trong giây lát và nạp dữ liệu thử nghiệm theo cách thủ công không? Tôi có nên tạo một hàng đợi khác chỉ để kiểm tra dữ liệu không?

Chỉnh sửa: Cách thực hiện đúng là tạo một tệp riêng biệt, giả sử eval.py, liên tục đọc điểm kiểm tra cuối cùng và đánh giá mạng? Đây là cách họ làm điều đó trong ví dụ 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

Có một số chức năng mức cao tốt cho việc này gần đây đã được thêm vào [kho lưu trữ github] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/slim/ python/slim/evaluation.py). Chúng dựa trên việc chạy các đánh giá với một tệp thực thi riêng biệt đọc các tệp điểm kiểm tra được tạo bằng cách đào tạo. – user728291

+0

@ user728291, có ví dụ nào để làm điều đó trong cùng một tập lệnh không? Có vẻ như các công cụ khác như Caffe chỉ làm như thế này. –

+0

Làm thế nào về việc sử dụng hai hàng đợi (hoặc hàng đợi và trình giữ chỗ được cấp) và sử dụng 'tf.where' để quyết định nguồn nào trong hai nguồn này được sử dụng để cấp nguồn cho mạng? –

Trả lời

-1

Bạn có thể thêm eval_op vào mã của mình và sau đó thực hiện đánh giá trong mỗi n (n = 1000) lần lặp lại. Một ví dụ là như sau:

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

Bạn có thể bulid khác Queue thử nghiệm và một bản sao của mô hình đào tạo như mô hình thử nghiệm như thế này:

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) 

Bằng cách này có thể tiêu thụ bộ nhớ hơn vì 2 mô hình này được khởi tạo, hy vọng sẽ thấy giải pháp tốt hơn

Các vấn đề liên quan