加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Tensorflow:会话之间正确的队列关闭

发布时间:2020-12-20 13:12:22 所属栏目:Python 来源:网络整理
导读:我有两个图表(一个用于培训,一个用于评估),它们使用相同的推理网络,但输入数据不同.输入是通过读取二进制数据文件创建的.这些图表是一个接一个地运行并在单独的会话中运行.它实际上似乎工作,但我无法摆脱每次关闭会话时发生的警告: W tensorflow/core/commo
我有两个图表(一个用于培训,一个用于评估),它们使用相同的推理网络,但输入数据不同.输入是通过读取二进制数据文件创建的.这些图表是一个接一个地运行并在单独的会话中运行.它实际上似乎工作,但我无法摆脱每次关闭会话时发生的警告:

W tensorflow/core/common_runtime/executor.cc:1102] 0x7fb7ac082980 Compute status: Cancelled: Enqueue operation was cancelled
 [[Node: input_producer/input_producer_EnqueueMany = QueueEnqueueMany[Tcomponents=[DT_STRING],timeout_ms=-1,_device="/job:localhost/replica:0/task:0/cpu:0"](input_producer,input_producer/RandomShuffle)]]
I tensorflow/core/kernels/queue_base.cc:286] Skipping cancelled enqueue attempt

我的问题是,如何正确关闭所有队列和线程以避免警告.我写了一个小例子,它展示了我正在做的事情,希望能让你重现我的问题.

import tensorflow as tf
import struct
import numpy as np


file_name = 'test.bin'

def write_binary_file():
    with open(file_name,'w') as f:
        for i in range(20):
            # image = np.ones([3,3])*i
            image = np.zeros([3,3])
            image[:,0] = i
            image = image.astype('uint8')
            for u in range(3):
                for v in range(3):
                    f.write('%s' % struct.pack('B',image[u,v]))

# write binary file
write_binary_file()
print "size of one entry"
print 9
print "size of file"
print 20*9

# GRAPH DEFINITION
filename_queue = tf.train.string_input_producer([file_name])

reader = tf.FixedLengthRecordReader(header_bytes=0,record_bytes=9)
key,value = reader.read(filename_queue)

value_uint8 = tf.reshape(tf.decode_raw(value,tf.uint8),[3,3])

# FIRST session
sess = tf.Session()
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess,coord=coord)
for i in range(5):
    key_v,value_uint8_v = sess.run([key,value_uint8])
    print key_v
    print value_uint8_v

coord.request_stop() # *HERE* the warning is thrown
coord.join(threads,stop_grace_period_secs=5)
sess.close()

# SECOND session
sess2 = tf.Session()
coord2 = tf.train.Coordinator()
threads2 = tf.train.start_queue_runners(sess=sess2,coord=coord2)
for i in range(5):
    key_v,value_uint8_v = sess2.run([key,value_uint8])
    print key_v
    print value_uint8_v

coord2.request_stop()
coord2.join(threads2,stop_grace_period_secs=5)
sess2.close()

您知道如何修复警告,还是知道更改数据源的更好方法?

解决方法

正如雅罗斯拉夫所说;我相信这个警告在更新版本的TF中得到了修复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读