2017-06-07 9 views
0

私はtf.train.string_input_producerを使ってtfRecordファイルからデータを読み込みます。私はそれがキューとパイプラインを作成し、データが自動的に読み込まれ、私のモデルにフィードされると思います。しかし、それは最初のバッチで立ち往生し、この例外を示しています。tf.train.string_input_producerを使ったテンソルフロー

FailedPreconditionError(トレースバックについては上記参照):初期化されていない値を使用しようとinput_producer/limit_epochs /エポック

私tfrecordは、TFによって作られました公式ガイドに明確な文書がないtf.train.Exampleの代わりに.train.SequenceExampleを使用してください。

ここに私の問題を再現するためのコードスナップショットです。

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) 

答えて

1

がtf.train内部

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

Variabes(num_epochsまたは容量)を試してみてください(全体のパイプラインがハングアップしているようですので、私は。私の問題は、キューの初期化やSTHから来ると信じて)。 string_input_producer()はローカル変数です。上記のようにローカル変数初期化子で初期化する必要があります。

これが役立ったかどうか教えてください。

+0

これは機能します!多くのありがとう! –

関連する問題