使用tf.TextLineReader仅读取奇数行问题及解决方法咨询
解决TensorFlow TextLineReader只读取奇数行的问题
你遇到的这个问题其实是因为每次调用.eval()都会触发一次独立的数据读取操作,咱们来拆解下你的代码逻辑:
在循环里,你先执行key.eval()——这会让reader.read()读取一行数据并返回该行的key;接着执行value.eval()——又会触发一次reader.read(),读取下一行数据的value。相当于每次循环你其实消耗了两行数据,但只打印了这两次读取的结果,所以看起来像是只拿到了奇数行的key和偶数行的value,整体感觉只读到了“奇数行”。
修正方案:一次读取同一行的key和value
把key.eval()和value.eval()换成一次sess.run([key, value]),这样就能一次性获取同一行的key和value,不会重复读取:
import tensorflow as tf filename_queue=tf.train.string_input_producer(["./data/all_c_dev.en"]) reader=tf.TextLineReader() key,value=reader.read(filename_queue) with tf.Session() as sess: tf.train.start_queue_runners() for i in range(10): # 一次run操作获取同一行的key和value current_key, current_value = sess.run([key, value]) print(current_key, current_value)
额外建议:使用TensorFlow 2.x的推荐方式
如果你的环境是TensorFlow 2.x,TextLineReader已经属于旧版API了,更推荐使用tf.data.TextLineDataset,用法更直观,也不会出现这类坑:
import tensorflow as tf # 直接读取文本文件为数据集 dataset = tf.data.TextLineDataset("./data/all_c_dev.en") # 读取前10行 for idx, line in enumerate(dataset.take(10)): # 把tensor转成可读的字符串 print(f"Line {idx+1}: {line.numpy().decode('utf-8')}")
这样就能逐行读取所有数据啦~
内容的提问来源于stack exchange,提问作者nomadlx
相关产品推荐
相关产品推荐

