《TensorFlow机器学习项目实战》 OutOfRangeError : FIFOQueue '_0_input_producer'

在阅读《TensorFlow机器学习项目实战》第1章 探索和转换数据,1.5 从磁盘读取信息,1.5.1 列表格式——CSV时,读取CSV文件示例代码运行报错

OutOfRangeError (see above for traceback): FIFOQueue '_0_input_producer' is closed and has insufficient elements

解决办法:

  1. 注释掉
tf.initialize_all_variables().run(session=sess)
  1. 添加
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)

建议:

  1. 同文件夹下不要放无关的.csv文件,会遍历读取
  2. 报错可以试下重启IDE

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/87372484