Tôi đang cố gắng chạy biểu đồ tensorflow để đào tạo một mô hình và định kỳ đánh giá bằng cách sử dụng một tập dữ liệu đánh giá riêng biệt. Cả dữ liệu đào tạo và đánh giá đều được triển khai bằng cách sử dụng trình chạy hàng đợi.tensorflow: cho ăn hiệu quả dữ liệu eval/train bằng cách sử dụng hàng đợi runners
Giải pháp hiện tại của tôi là tạo cả hai yếu tố đầu vào trong cùng một biểu đồ và sử dụng tf.cond
tùy thuộc vào trình giữ chỗ is_training
. Vấn đề của tôi được đánh dấu bằng đoạn mã sau:
import tensorflow as tf
from tensorflow.models.image.cifar10 import cifar10
from time import time
def get_train_inputs(is_training):
return cifar10.inputs(False)
def get_eval_inputs(is_training):
return cifar10.inputs(True)
def get_mixed_inputs(is_training):
train_inputs = get_train_inputs(None)
eval_inputs = get_eval_inputs(None)
return tf.cond(is_training, lambda: train_inputs, lambda: eval_inputs)
def time_inputs(inputs_fn, n_runs=10):
graph = tf.Graph()
with graph.as_default():
is_training = tf.placeholder(dtype=tf.bool, shape=(),
name='is_training')
images, labels = inputs_fn(is_training)
with tf.Session(graph=graph) as sess:
coordinator = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coordinator)
t = time()
for i in range(n_runs):
im, l = sess.run([images, labels], feed_dict={is_training: True})
dt = time() - t
coordinator.request_stop()
coordinator.join(threads)
return dt/n_runs
print('Train inputs: %.3f' % time_inputs(get_train_inputs))
print('Eval inputs: %.3f' % time_inputs(get_eval_inputs))
print('Mixed inputs: %.3f' % time_inputs(get_mixed_inputs))
Tôi cũng đã phải nhận xét ra các image_summary
dòng 133
của tensorflow/models/image/cifar10/cifar10_inputs.py
.
Việc này mang lại kết quả như sau:
Train inputs: 0.055
Eval inputs: 0.050
Mixed inputs: 0.105
Có vẻ như trong trường hợp hỗn hợp cả hai đầu vào đang được đọc/phân tích, mặc dù chỉ có 1 được sử dụng. Có cách nào để tránh tính toán dư thừa này không? Hoặc có cách nào tốt hơn để chuyển đổi giữa dữ liệu đào tạo/đánh giá mà vẫn thúc đẩy thiết lập xếp hàng đợi không?
tôi đã cố gắng để bắt đầu vận động viên xếp hàng một lần nữa sau khi ngừng và tham gia các đề tài, nhưng tôi không thể nhận được rằng để làm việc. Dường như hàng đợi được đóng lại sau – piotr