1. 程式人生 > >tensorflow-隊列(4)

tensorflow-隊列(4)

strong tuple 最大 names 可選 ref nts 可能 enqueue

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Thu Sep 6 10:16:37 2018 @author: myhaspl """ import tensorflow as tf n = 100 xQueue=tf.FIFOQueue(100,dtypes=[tf.int32],shapes=[]) with tf.Session() as sess: for i in xrange(n): if i%3==0: sess.run(xQueue.enqueue(i)) sess.run(xQueue.close()) myx=sess.run(xQueue.dequeue_up_to(100)) print myx print sum(myx)

使用close後,再使用dequeue_up_to,不會有阻塞

[ 0 ?3 ?6 ... 93 96 99]
1683

但下面程序會報錯

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep  6 10:16:37 2018
@author: myhaspl
"""
import tensorflow as tf

n = 100

xQueue=tf.FIFOQueue(100,dtypes=[tf.int32],shapes=[])

with tf.Session() as sess:
    for i  in xrange(n):
        if i%3==0:
            sess.run(xQueue.enqueue(i))
    sess.run(xQueue.close())
    myx=sess.run(xQueue.dequeue_many(100))
    print myx    
    print sum(myx)

OutOfRangeError (see above for traceback): FIFOQueue ‘_2_fifo_queue_2‘ is closed and has insufficient elements (requested 100, current size 34)``

Class?RandomShuffleQueue
繼承自:?QueueBase

以隨機順序從元素中取出隊列的隊列類。

屬性
dtypes
隊列元素中每個組件的dtypes列表。

name
底層隊列的名字

names
隊列元素每個組件的名字列表

queue_ref
底層隊列的引用

shapes

隊列元素中每個組件的形狀列表。

方法
init
init(
? ? capacity,
? ? min_after_dequeue,
? ? dtypes,
? ? shapes=None,
? ? names=None,
? ? seed=None,
? ? shared_name=None,
? ? name=‘random_shuffle_queue‘
)

創建一個以隨機順序從元素中取出元素的隊列。

隨機隊列具有有限的容量;支持多個並發生產者和消費者;並提供正確的一次傳遞。

RandomShuffleQueue則包含容量最大元素的列表。每個元素都是一個定長張量元組,其dtype由dtypes描述,其形狀可由shapes描述。

如果指定了shapes參數,那麽隊列元素的每個組件必須具有各自的固定形狀。如果沒有指定,不同的隊列元素可能有不同的形狀,但是不允許使用dequeue_many。

min_after_dequeue參數允許調用者指定在dequeue_many操作完成後留在隊列中的元素的最小數量,以確保元素的最小混合級別。通過阻塞這些操作來維護這個不變式,直到有足夠的元素被加入隊列。在隊列關閉後,min_after_dequeue參數將被忽略。

參數:

capacity:一個整數 ,可能存儲在此隊列中的元素數量的上限。
min_after_dequeue: 一個整數
dtypes: ?DType對象的列表。dtypes的長度必須等於每個隊列元素中的張量的數量。
shapes: (Optional.) (可選)與dtype長度相同或沒有長度相同的完整定義的TensorShape對象列表。
names: (Optional.) (可選)。與dtypes或None長度相同的隊列中組件的字符串列表。如果指定了dequeue方法,則返回一個名稱為鍵的字典。
seed: 用於創建隨機種子。看到tf.set_random_seed?行為。
shared_name: (Optional.) (可選)。如果不是空的,這個隊列將在多個會話之間以給定的名稱共享。
名稱:
name: 隊列操作的可選名稱。
close
close(
? ? cancel_pending_enqueues=False,
? ? name=None
)

關閉此隊列。

這個操作表明沒有更多的元素將被放入給定隊列中。隨後的入隊列和入隊列很多操作都會失敗。如果隊列中仍然有足夠的元素,後續的dequeue_many操作將繼續成功。隨後,將阻塞等待更多元素(如果沒有調用close)的dequeue和dequeue_many操作將立即失敗。

如果cancel_pending_enqueues為真,所有未決請求也將被取消。

參數:

cancel_pending_enqueues: (可選)。一個布爾值,默認為False(如上所述)。
name: 操作的名稱(可選)。
返回:

關閉隊列的操作。

dequeue
?
dequeue(name=None)

從這個隊列中取出一個元素。

如果執行此操作時隊列為空,它將阻塞,直到有一個元素要出隊列為止。

在運行時,如果隊列是tf.QueueBase.close,在執行之前或執行期間則此操作可能引發錯誤。如果隊列是關閉的,隊列是空的,這裏沒有可以完成此請求的掛起出隊操作,將會出現tf.errors.OutOfRangeError。如果會話是tf.Session.close、?tf.errors,tf.errors.CancelledError?錯誤將被觸發。

參數:

name: 操作名字(可選)
返回:

出隊的張量元組。

dequeue_many
?
dequeue_many(
? ? n,
? ? name=None
)

從這個隊列中取出並連接n個元素。

這個操作沿著第0維串聯排隊元素分量張量,形成單個分量張量。dequeue_tuple中的所有組件的大小都是第0維的n。

在運行時,如果隊列是tf.QueueBase,則此操作可能引發錯誤。在執行之前或執行期間關閉。如果隊列是關閉的,則該隊列包含的元素不超過n個,並且沒有可執行此請求tf.errors的掛起排隊操作。將會出現OutOfRangeError。如果會話是tf.Session.close,則tf.errors.CancelledError將觸發。

參數:

n: 一個標量Tensor,出列元素的數量
name: 操作名字(可選)
返回:

出列的連接張量的列表。

tensorflow-隊列(4)