从tfrecords中读取数据时,运行sess.run()时卡住,无法继续运行下去

遇到好几次这个问题了,每次都不长记性,检查错误检查了半天才反应过来

运行错误:

     从tfrecords中读取数据时,比如把读取的数据赋给变量test_x,test_y

     当运行sess.run([test_x,test_y])时卡住,无法继续运行下去

解决方案:

    添加下面两行代码:

    coord = tf.train.Coordinator() #创建一个协调器,管理线程
    threads = tf.train.start_queue_runners(coord=coord)  #启动QueueRunner, 此时文件名队列已经进队。

解释:

TensorFlow提供了两个类来实现对Session中多线程的管理:tf.Coordinator和 tf.QueueRunner,这两个类往往一起使用。

Coordinator类用来管理在Session中的多个线程,可以用来同时停止多个工作线程并且向那个在等待所有工作线程终止的程序报告异常,该线程捕获到这个异常之后就会终止所有线程。使用 tf.train.Coordinator()来创建一个线程管理器(协调器)对象。

QueueRunner类用来启动tensor的入队线程,可以用来启动多个工作线程同时将多个tensor(训练数据)推送入文件名称队列中,具体执行函数是 tf.train.start_queue_runners , 只有调用 tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中,供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态

 

参考博客:https://blog.csdn.net/weixin_42052460/article/details/80714539

你可能感兴趣的:(tensorflow)