sess.run()读取数据卡住,死循环

sess.run()读取数据死循环,卡住

这个问题困扰了我好几天,要读取tfrecord文件里面存储的二进制数据,发现用sess.run去读取tensor张量的值时候,一直卡住,一开始以为可能数据量较大,卡住了,但是等了三四分钟发现还是没有反应

第一种情况

数据量计算太大,需要加上线程,在with tf.Session() as sess: 下加上一下代码,开启线程

coord=tf.compat.v1.train.Coordinator()
threads=tf.compat.v1.train.start_queue_runners(coord=coord)
第二种情况

在我加上线程代码后,发现还是死循环卡住,下面是代码:

def read_and_decode():
    file1='data.tfrecords'
    data1=tf.compat.v1.train.string_input_producer([file1])
    reader=tf.compat.v1.TFRecordReader()
    _,serialized_example=reader.read(data1)
    feature=tf.compat.v1.parse_single_example(serialized_example,
                                              features={
                                                  'label':tf.compat.v1.FixedLenFeature([],tf.int64),
                                                  'img_row':tf.compat.v1.FixedLenFeature([],tf.string)
                                              })
    image=tf.compat.v1.decode_raw(feature['img_row'],tf.uint8)
    image=tf.reshape(image,[128,128,3])
    label=tf.compat.v1.cast(feature['label'],tf.int64)
    with tf.compat.v1.Session() as sess:
        init=tf.compat.v1.global_variables_initializer()
        sess.run(init)  
        coord=tf.compat.v1.train.Coordinator()
        threads=tf.compat.v1.train.start_queue_runners(coord=coord)
        for i in range(2):
            example,I=sess.run([image,label])    //发生卡住
            img=Image.fromarray(example,'RGB')
            img.save(str(i)+'.jpg')
            print(example,I)

我开始debug了下,发现sess.run 发生死循环,运行到后面一直在两个函数互相跳跃,首先sess.run([image,label]),image,label是两个张量,sess.run两个tensor量是负责取值,在后台debug后发现卡住的原因是tensor向量里面为空值,就是image和label都为空,追溯到上面,这两个量是从feature里面得到后进行处理的,开始用sess.run()去读取feature的数组值(在TensorFlow中,你不能用print去输出tensor的值,print只会输出它的数据类型,并不会输出tensor张量的值,所以只能用print(sess.run()) ),发现还是死循环,说明feature读取数据失败,为空,继续往上,用sess.run去输出serialized_example,发现还是空,那么只有一点,你文件为空,跑到对应的tfrecord文件里一看尽为空文件,这才发现问题所在

我以为只要运行一次保存tfrecord文件的函数就可以了,该文件就永久保存了,不用一直去调用函数让其重复保存,然后以后直接就运行对tfrecord文件操作的函数就够了,但是每次再一次运行,tfrecord文件就会清空,所以sess.run死循环就两个原因 1.没有加上线程控制 2.sess.run所要读取的数据即tensor张量为空,他就会陷入死循环,发生卡住的现象

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值