在阅读《TensorFlow机器学习项目实战》第1章 探索和转换数据,1.5 从磁盘读取信息,1.5.1 列表格式——CSV时,读取CSV文件示例代码运行报错
OutOfRangeError (see above for traceback): FIFOQueue '_0_input_producer' is closed and has insufficient elements
解决办法:
- 注释掉
tf.initialize_all_variables().run(session=sess)
- 添加
tf.global_variables_initializer().run(session=sess)
tf.local_variables_initializer().run(session=sess)
书中代码:
import tensorflow as tf
sess = tf.Session()
filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once("./*.csv"),shuffle=True)
reader = tf.TextLineReader(skip_header_lines=1)
key,value = reader.read(filename_queue)
record_defaults = [[0.],[0.],[0.],[0.],[""]]
col1,col2,col3,col4,col5 = tf.decode_csv(value,record_defaults=record_defaults)
features = tf.pack([col1,col2,col3,col4])
tf.initialize_all_variables().run(session=sess)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord,sess=sess)
for iteration in range(0,5):
example = sess.run([features])
print(example)
coord.request_stop()
coord.join(threads)
完善代码:
import tensorflow as tf
sess = tf.Session()
filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once("./*.csv"),shuffle=True)
reader = tf.TextLineReader(skip_header_lines=1)
key,value = reader.read(filename_queue)
record_defaults = [[0.],[0.],[0.],[0.],[""]]
col1,col2,col3,col4,col5 = tf.decode_csv(value,record_defaults=record_defaults)
features = tf.stack([col1,col2,col3,col4])#pack改成stack
tf.global_variables_initializer().run(session=sess)
tf.local_variables_initializer().run(session=sess)
#tf.initialize_all_variables().run(session=sess)#注释掉
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord,sess=sess)
for iteration in range(0,5):
example = sess.run([features])
print(example)
coord.request_stop()
coord.join(threads)
建议:
- 同文件夹下不要放无关的.csv文件,会遍历读取
- 报错可以试下重启IDE