4

TensorFlowを使用して完全畳み込みネットワークの結果を再現しようとしました。私はMarvin Teichmann's implementation from githubを使用しました。私はトレーニングラッパーを書く必要があります。変数と2つの入力キューを共有する2つのグラフを作成します.1つはトレーニング用、もう1つは検証用です。トレーニングラッパーをテストするには、トレーニングと検証ファイルの2つの短いリストを使用し、各トレーニングエポックの直後に検証を行います。また、入力キューからすべての画像の形をプリントアウトして、正しい入力が得られるかどうかを確認しました。しかし、トレーニングを開始した後は、トレーニングキューの画像だけがデキューされているように見えます。したがって、トレーニングおよび検証グラフの両方がトレーニングキューから入力を受け取り、検証キューにアクセスすることはありません。誰もこの問題を説明して解決するのを助けることができますか?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

私は良い答えはありませんでしたが、評価を別のプロセスで実行することをお勧めします。はるかに簡単で清潔です。それをしたくない場合は、2つの異なるグラフとセッションを作成し、検証入力キューをそれに関連付けることができます。 –

答えて

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) 
関連する問題