TensorFlow를 사용하여 완전 컨벌루션 네트워크 결과를 복제하려고했습니다. 나는 Marvin Teichmann's implementation from github을 사용했다. 트레이닝 래퍼 만 작성하면됩니다. 변수와 두 개의 입력 대기열을 공유하는 두 개의 그래프를 만듭니다. 하나는 교육용이고 다른 하나는 유효성 검사 용입니다. 훈련 용 랩퍼를 테스트하기 위해 두 개의 간단한 교육 목록과 유효성 검사 파일을 사용했으며 모든 교육 기간 후에 즉시 유효성 검사를 수행했습니다. 나는 또한 올바른 입력을 받았는지 확인하기 위해 입력 큐에서 모든 이미지의 모양을 출력했다. 그러나 교육을 시작한 후에는 교육 대기열의 이미지 만 대기열에서 제외됩니다. 따라서 교육 및 유효성 검사 그래프는 모두 교육 대기열에서 입력을받으며 유효성 검사 대기열에는 액세스하지 않습니다. 누구든지이 문제를 설명하고 해결할 수 있습니까?Tensorflow 교육 및 유효성 검사 입력 큐 분리
def get_data(image_name_list, num_epochs, scope_name, num_class = NUM_CLASS):
with tf.variable_scope(scope_name) as scope:
images_path = [os.path.join(DATASET_DIR, i+'.jpg') for i in image_name_list]
gts_path = [os.path.join(GT_DIR, i+'.png') for i in image_name_list]
seed = random.randint(0, 2147483647)
image_name_queue = tf.train.string_input_producer(images_path, num_epochs=num_epochs, shuffle=False, seed = seed)
gt_name_queue = tf.train.string_input_producer(gts_path, num_epochs=num_epochs, shuffle=False, seed = seed)
reader = tf.WholeFileReader()
image_key, image_value = reader.read(image_name_queue)
my_image = tf.image.decode_jpeg(image_value)
my_image = tf.cast(my_image, tf.float32)
my_image = tf.expand_dims(my_image, 0)
gt_key, gt_value = reader.read(gt_name_queue)
# gt stands for ground truth
my_gt = tf.cast(tf.image.decode_png(gt_value, channels = 1), tf.float32)
my_gt = tf.one_hot(tf.cast(my_gt, tf.int32), NUM_CLASS)
return my_image, my_gt
train_image, train_gt = get_data(train_files, NUM_EPOCH, 'training')
val_image, val_gt = get_data(val_files, NUM_EPOCH, 'validation')
with tf.variable_scope('FCN16') as scope:
train_vgg16_fcn = fcn16_vgg.FCN16VGG()
train_vgg16_fcn.build(train_image, train=True, num_classes=NUM_CLASS, keep_prob = KEEP_PROB)
scope.reuse_variables()
val_vgg16_fcn = fcn16_vgg.FCN16VGG()
val_vgg16_fcn.build(val_image, train=False, num_classes=NUM_CLASS, keep_prob = 1)
"""
Define the loss, evaluation metric, summary, saver in the computation graph. Initialize variables and start a session.
"""
for epoch in range(starting_epoch, NUM_EPOCH):
for i in range(train_num):
_, loss_value, shape = sess.run([train_op, train_entropy_loss, tf.shape(train_image)])
print shape
for i in range(val_num):
loss_value, shape = sess.run([val_entropy_loss, tf.shape(val_image)])
print shape
아직 답변을 찾지 못하셨습니까? – thigi
좋은 대답은 아니지만 별도의 프로세스에서 평가를 실행하는 것이 좋습니다. 훨씬 쉽고 깨끗합니다. 그렇게하고 싶지 않으면 두 개의 다른 그래프와 세션을 만들고 유효성 검사 입력 대기열을 그와 연관시킬 수 있습니다. –