【发布时间】:2017-06-07 23:01:45
【问题描述】:
我正在使用 tf.train.string_input_producer 从 tfRecord 文件中读取数据。我想它创建了一个队列和管道,数据将自动加载并输入我的模型。但是,它卡在了第一批,并显示了这个异常:
FailedPreconditionError(回溯见上文):尝试使用未初始化的值 input_producer/limit_epochs/epochs
我的 tfrecord 是由 tf.train.SequenceExample 制作的,而不是 tf.train.Example,官方指南中没有明确的文档。
这里是重现我的问题的代码快照。 (我相信我的问题来自队列初始化或某事。因为似乎整个管道都挂了)
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)
【问题讨论】:
标签: python tensorflow