모델을 교육하고 별도의 평가 데이터 세트를 사용하여 주기적으로 평가하는 tensorflow 그래프를 실행하려고합니다. 교육 및 평가 데이터는 모두 대기열 러너를 사용하여 구현됩니다.tensorflow : 큐 러너를 사용하여 eval/train 데이터를 효율적으로 전달합니다.
내 현재 해결 방법은 같은 그래프에 두 입력을 모두 만들고 자리 표시 자에 따라 tf.cond
을 사용하는 것입니다. 내 문제는 다음 코드에 의해 강조 : 나는 또한 image_summary
라인 tensorflow/models/image/cifar10/cifar10_inputs.py
의 133
을 주석했다
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))
.
이Train inputs: 0.055
Eval inputs: 0.050
Mixed inputs: 0.105
단지 하나를 사용하더라도, 두 입력 구문 분석/읽기되고있는 혼합 된 경우에 보일 것입니다 :
이
다음과 같은 결과를 얻었다. 이 중복 계산을 피할 수있는 방법이 있습니까? 또는 여전히 대기열 러너 설정을 활용하는 교육/평가 데이터를 전환하는 더 좋은 방법이 있습니까?
내가 중지 및 스레드에 가입 한 후 다시 큐 주자을 시작했지만, 나는 그 일을 얻을 수 없습니다. 나중에 대기열이 닫힌 것 같아 – piotr