4

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 
+0

아직 답변을 찾지 못하셨습니까? – thigi

+0

좋은 대답은 아니지만 별도의 프로세스에서 평가를 실행하는 것이 좋습니다. 훨씬 쉽고 깨끗합니다. 그렇게하고 싶지 않으면 두 개의 다른 그래프와 세션을 만들고 유효성 검사 입력 대기열을 그와 연관시킬 수 있습니다. –

답변

0

하는 것은 서로 다른 이미지를 읽고 있는지 확인하기 위해 실행할 수 :

[train_image_np, val_image_np] = sess.run([train_image, val_image]) 

이 더 나은 및 안전 변수를 다시 사용하려면

다음은 관련 코드의 일부

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) 
with tf.variable_scope(scope, reuse=True): 
    val_vgg16_fcn = fcn16_vgg.FCN16VGG() 
    val_vgg16_fcn.build(val_image, train=False, num_classes=NUM_CLASS, keep_prob = 1)