2017-06-07 7 views
0

Ich benutze tf.train.string_input_producer, um Daten aus tfRecord-Datei zu lesen. Ich nehme an, es erstellt eine Warteschlange und eine Pipeline und die Daten werden automatisch geladen und in mein Modell eingezogen. Allerdings ist es bei der ersten Charge stecken, und zeigt diese Ausnahme:tensorflow mit tf.train.string_input_producer

FailedPreconditionError (siehe oben für Traceback): Der Versuch, nicht initialisierte Wert input_producer/limit_epochs/Epochen

meine tfrecord von tf gemacht zu verwenden .train.SequenceExample, anstelle von tf.train.Example, die keine eindeutige Dokumentation im offiziellen Handbuch haben.

Hier ist Code-Snapshot mein Problem zu reproduzieren. (Ich glaube, mein Problem aus der Warteschlange Ersteinstellung bzw. etw kommen., Weil es scheint, dass die gesamte Pipeline aufzuhängen ist)

from config.config import get_config 

init = tf.global_variables_initializer() 
config = get_config() 

filename_queue = tf.train.string_input_producer(['data0.tfrecord,data1.tfrecord'], 5, capacity=16384) 
reader = tf.TFRecordReader() 

(keys, values) = reader.read_up_to(filename_queue, config.batch_size) 

context_features = { 
    "seq_len": tf.FixedLenFeature([1], dtype=tf.int64), 
} 
audio_features = { 
    "audio": tf.FixedLenSequenceFeature([config.num_features], dtype=tf.float32), 
    "label": tf.FixedLenSequenceFeature([config.num_classes], dtype=tf.float32) 
} 
audio_list = [] 
label_list = [] 
len_list = [] 

for i in range(config.batch_size): 
    print(i) 
    context, sequence = tf.parse_single_sequence_example(
     serialized=values[i], 
     context_features=context_features, 
     sequence_features=audio_features 
    ) 
    audio = sequence['audio'] 
    label = sequence['label'] 
    # seq_len = context['seq_len'][0] 
    seq_len = tf.shape(audio)[0] 
    audio_list.append(audio) 
    label_list.append(label) 
    len_list.append(seq_len) 

audio_tensor = tf.stack(audio_list) 
label_tenor = tf.stack(label_list) 
len_tensor = tf.stack(len_list) 

with tf.Session() as sess: 
    sess.run(init) 

    threads = tf.train.start_queue_runners(sess=sess) 
    for i in range(3): 
     x, y, z = sess.run([audio_tensor, label_tenor, len_tensor]) 
     print(z) 

Antwort

1

Versuchen

init2 = tf.local_variables_initializer() 
sess.run(init2) 

Variabes (num_epochs oder Kapazität) innerhalb tf.train. string_input_producer() sind lokale Variablen. Sie müssen sie wie oben gezeigt mit dem lokalen Variableninitialisierer initialisieren.

Lassen Sie mich wissen, ob dies geholfen hat.

+0

das funktioniert! vielen Dank! –

Verwandte Themen