2017-10-23 1 views
0

Ich benutze TFrecord als Eingabe.
Und jetzt brauche ich dreifache Batch-Eingabe. Die image_batch und label_batch ist in Ordnung. Aber zweite posimage_batch, poslabel_batch ist ein Fehler. Ich habe viele Beiträge über RandomShuffleQueue Fehler Frage gelesen.
Die Antwort tf.local_variables_initializer() löst nicht meinen Fehler
Weil ich suche nur eine batch_data und batch_label als Eingabe. Also habe ich keine Ahnung von dreifachem Input.
Ich suche lange im Netz. Aber keine Verwendung. Bitte helfen oder versuchen Sie, einige Ideen zu geben, wie dies zu erreichen ist.OutOfRangeError (siehe oben für Traceback): RandomShuffleQueue '_5_shuffle_batch_1/random_shuffle_queue' ist geschlossen und hat keine ausreichenden Elemente

def real_read_and_decode(filename): 
    filename_queue = tf.train.string_input_producer([filename]) 

    reader = tf.TFRecordReader() 
    _, serialized_example = reader.read(filename_queue) 
    features = tf.parse_single_example(serialized_example, 
             features={ 
              'label': tf.FixedLenFeature([], tf.int64), 
              'img_raw' : tf.FixedLenFeature([], tf.string), 
             }) 
    img = tf.decode_raw(features['img_raw'], tf.uint8) 
    img = tf.reshape(img, [WIDTH,HEIGHT, 3]) 
    label = tf.cast(features['label'], tf.int32) 
    labels = tf.one_hot(label, NUM_CLASSES) 
    return img, labels  

def main(): 

    image, label = read_and_decode("sketch_train.tfrecords") 
    posimage, poslabel = real_read_and_decode("pos_train.tfrecords") 
    negimage, neglabel = real_read_and_decode("neg_train.tfrecords") 

    image_batch, label_batch =tf.train.shuffle_batch([image, label],batch_size=BATCH_SIZE,capacity=1500, min_after_dequeue=1000) 
    posimage_batch, poslabel_batch = tf.train.shuffle_batch([posimage, poslabel],batch_size=BATCH_SIZE,capacity=1500, min_after_dequeue=1000) 
    negimage_batch, neglabel_batch = tf.train.shuffle_batch([negimage, neglabel],batch_size=BATCH_SIZE,capacity=1500, min_after_dequeue=1000) 

    with tf.Session(config=config) as sess: 
     sess.run(tf.local_variables_initializer()) 
     sess.run(tf.global_variables_initializer()) 
     coord = tf.train.Coordinator() 
     threads = tf.train.start_queue_runners(sess=sess,coord=coord) 
     for i in range(ITERATION): 
      if coord.should_stop(): 
       print('corrd break!!!!!!') 
       break 
      #sess.run(tf.local_variables_initializer()) 
      example_train, l_train = sess.run([image_batch, label_batch]) 
      example_train2, l_train2= sess.run([posimage_batch, poslabel_batch]) 
      example_train3, l_train3 = sess.run([negimage_batch, neglabel_batch]) 
      _, loss_v = sess.run([train_step, loss],feed_dict={x1: example_train,y1: l_train,x2: example_train2, y2: l_train2,x3: example_train3, y3: l_train3}) 

This is my log

Weil ich ein neuer Benutzer bin, und mein Englisch ist nicht gut.
Ich hoffe, es macht Ihnen nichts aus.

Antwort

0

Sie wahrscheinlich nur brauchen eine Handhabung der OutOfRangeError Ausnahme hinzuzufügen, die früher geschehen erwartet wird oder später:

try: 
    sess.run(tf.local_variables_initializer()) 
    sess.run(tf.global_variables_initializer()) 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(sess=sess,coord=coord) 
    for i in range(ITERATION): 
    #.... 
except tf.errors.OutOfRangeError: 
    print('Done training -- limit reached') 
finally: 
    coord.request_stop() 
Verwandte Themen