1.队列输入数据错误 错误语句:
enq_many = Q.enqueue_many([0.1, 0.2, 0.3])出现的错误类型:
ValueError: Shape () must have rank at least 1修改方法: 这里需要输入的是列表变量,如果输入一维,则默认输入的是tensor,需要加一个括号变成列表变量。
enq_many = Q.enqueue_many([[0.1, 0.2, 0.3],])2.会话定义错误 错误语句:
with tf.Session as sess:错误类型:
AttributeError: __exit__修改方法:
with tf.Session() as sess:3.子线程在会话结束后的释放问题 错误类型:
CancelledError (see above for traceback): Enqueue operation was cancelled原因: 在会话中,主线程与子线程异步执行,当主线程的取数据和训练操作完成之后,主线程结束,会话结束,内存被释放。 但这时,子线程还在写入数据。
修改方法: 开启线程管理器回收子线程
with Session() as sess: # 初始化变量 sess.run(init_op) # 开启线程管理器 coord = tf.train.Coordinator() # 开启子线程,指定coord, threads = qr.create_threads(sess, coord=coord, start=True) # 主线程读取数据并训练 for i in range(300): print(sess.run(Q.dequeue())) # 回收线程 coord.request_stop() coord.join(threads)3.其他注意事项
在会话外定义队列op、数据操作op 在会话内部,首先对队列进行初始化才能显示,显示方法是*.eval()
