2017-07-05 6 views
0

Ich bekomme diesen Fehler für den unten genannten Code. Bitte hilf mir dabei. Dieser Code druckt Variablen Anzahl der Stapel jedes Mal, wenn ich diesen Code ausführen. Ich kann den Fehler nicht herausfinden.Fehler in der Eingabe-Pipeline mit Warteschlangen in Tensorflow

OutOfRangeError (siehe oben für Traceback): FIFOQueue '_2_batch/fifo_queue' geschlossen ist, und hat nicht genügend Elemente (angeforderte 15, aktuelle Größe 0) [[node: batch = QueueDequeueManyV2 [component_types = [DT_FLOAT] , timeout_ms = -1, _device = "/ Job: localhost/Replik: 0/Aufgabe: 0/cpu: 0"] (Batch/fifo_queue, batch/n)]]

import tensorflow as tf 
import numpy as np 
import os 

batch_size = 16 
min_queue = 256 


def load_image(): 
    length = calculate_size("./Coco_subset_5356") 

    names = tf.train.match_filenames_once("./Coco_subset_5356/*.jpg") 

    # Extracted names from the file 
    filename_queue = tf.train.string_input_producer(names) 

    #Initialised the File reader 
    reader = tf.WholeFileReader() 

    key, value = reader.read(filename_queue) 
    my_img = tf.image.decode_jpeg(value, channels = 3) 
    my_img = tf.image.resize_images(my_img, [256,256]) 
    my_img.set_shape((256,256,3)) 


    print(length) 

    images = tf.train.batch(
     [my_img], 
     batch_size=batch_size, 
     num_threads=1, 
     capacity=min_queue + 3*batch_size) 

    print(images) 

with tf.Session() as sess: 
    #sess.run(init_op) 
    tf.local_variables_initializer().run() 
    #print(tf.get_collection(tf.GraphKeys.LOCAL_VARIABLES)) 

    #For coordination between queue runner and the reader 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord = coord) 
    for j in range(length/batch_size): 
     #optimizer.run(feed_dict={input_batch: images[i]) 
     x = sess.run(images)  
     print(j) 
     print(x.shape) 

    coord.request_stop() 
    coord.join(threads) 

def calculate_size(img_dir): 
    file = [] 
    for subdir, dirs, files in os.walk(img_dir): 
     for i in files: 
      i = os.path.join(img_dir, i) 
      file.append(i) 
     length = len(file) 
    return length 

load_image() 
+0

Ich hatte ein ähnliches Problem und in meinem Fall wurden einige Bilder nicht korrekt decodiert (in meinem Datensatz hatte ich 1x1 Pixel Bilder, die den Filterungsprozess überstanden haben ..). Sind Sie sicher * alle * Ihre Bilder können korrekt als JPG-Dateien geöffnet und entschlüsselt werden? (Sie dürfen auch nicht abgeschnitten werden, Tensorflow wird standardmäßig einen Fehler bei der Verarbeitung von abgeschnittenen Bildern auslösen.) – GPhilo

+0

Wie viele * .jpg-Dateien enthält das Verzeichnis? Ist es ein Vielfaches von 15? Was, wenn Sie 'allow_smaller_final_batch = True' in der 'tf.train.batch' Methode setzen? – npf

+0

Würden Sie Ihre Frage auch bearbeiten, um den Fehler lesbarer zu machen (z. B. mit dem Zeichen>)? – npf

Antwort

0

Haftungsausschluss: Das ist keine richtige Antwort, aber ich kann keinen Code in einem Kommentar schreiben und das könnte Sie in die richtige Richtung verweisen ction.

Wie in meinem Kommentar zu der Frage erwartet, hatte ich den gleichen Fehler auf einem meiner Datensätze. In meinem Fall war das Problem, dass nicht alle Bilder in meinem Dataset als JPG-Dateien dekodiert werden konnten. Abgeschnittene Bilder und, in meinem Fall, 1x1-Pixel-Bilder wurden in meinen Daten versteckt und wann immer ich versuchen würde, den Datensatz zu verarbeiten, würde ich die Warteschlangen schließen, wenn ich Berichtsfehler melde, hatte ich eine harte Zeit zu verlieren.

Ich löste das Problem ein kleines Filterskript zu schreiben, die one-by-one durch alle Dateien geht und protokollieren die es nicht verarbeiten kann:

import tensorflow as tf 
import glob 

image_data_placeholder = tf.placeholder(tf.string) 

filenames = glob.glob(r'C:\my_test_folder\*.jpg') 
decoded_img_op = tf.image.decode_jpeg(image_data_placeholder) 

with tf.Session() as sess: 
    for fn in filenames: 
    with open(fn, 'rb') as fp: 
     image_data = fp.read() 
    try: 
     sess.run(decoded_img_op, feed_dict={image_data_placeholder:image_data}) 
    except: 
     # log the filename o the broken image (or delete/move/etc) 
     print('Cannot decode file {}'.format(fn)) 

Es ist nicht die effizienteste von Implementierungen, aber es ist gut genug für meinen Anwendungsfall.

Verwandte Themen