1. 程式人生 > >tensorflow-佇列(3)

tensorflow-佇列(3)

dequeue_many
dequeue_many(
    n,
    name=None
)

將佇列中的n個元素出列並連線起來。

此操作將佇列元素元件張量沿著零維度連線成單個元件張量。在零個維度中,出列元組中的所有元件的大小都為n。如果佇列被關閉,並且還有小於n個元素,則引發一個OutOfRange異常。

在執行時,如果佇列是tf.QueueBase.close。在執行之前或執行期間關閉,則此操作可能會引發錯誤。如果佇列關閉,則佇列包含少於n個元素,並且沒有可以滿足此請求的掛起的入列操作,即tf.error.OutOfRangeErrouqr。如果這個佇列是tf.Session.close, tf.errors.CancelledError將被丟擲。

引數:

n: 一個scalar Tensor,包括入列元素的數目
name: 操作的名字(可選)
返回:

tensors拼接生成的列表,這些列表將出列

enqueue
 

enqueue(
    vals,
    name=None
)

在佇列裡入列一個元素

當操作執行時,如果這個佇列是滿的則它將阻止,直到元素已被入隊。

在執行時,如果佇列在執行之前或執行過程中的佇列是tf.QueueBase.close,則此操作可能會引發錯誤tf.errors.CancelledError。如果該操作被阻塞,並且要麼(i)佇列通過具有cancel_pending_enque.=True的閉合操作關閉,要麼(ii)會話為tf.Session.close、f.errors.CancelledError將被觸發。

引數:

vals:一個tensor,tensors的元組列表 ,或包含入隊值的字典。
name: 操作名字(可選)
返回:

將張量的新元組入列到佇列的操作。

enqueue_many
 
enqueue_many(
    vals,
    name=None
)

將零或多個元素入隊到此佇列

該操作將每個分量張量沿零維切片,以形成多個佇列元素。在零維中,所有在vals中的張量必須具有相同的大小。

如果此操作執行時佇列已滿,則它將阻塞,直到所有元素都已入隊。

在執行時,如果佇列在執行之前或執行過程中的佇列是tf.QueueBase.close,如果在執行之前關閉該佇列,則將引發tf.errors.CancelledError。如果該操作被阻塞,並且要麼(i)佇列通過具有cancel_pending_enqueues=True的閉合操作關閉,要麼(ii)會話為tf.Session.close、tf.errors.CancelledError將被引發。

引數:

vals: 一個tensor,tensors元組的列表,或一個字典 從中獲取佇列元素的字典
name: A name for the operation (optional).
返回:

將張量的一批元組排到佇列中的操作。

from_list
 
from_list(
    index,
    queues
)

從queues[index]中使用佇列引用建立佇列

引數:

index: 一個整數標量,決定輸入選擇範圍
queues: 一個QueueBase物件列表
返回:

一個QueueBase物件

丟擲:

TypeError: 當queues不是queues物件的列表,或當queues資料型別並非都相同。
is_closed
 
is_closed(name=None)

如果佇列關閉,返回true。

如果佇列是關閉的,此操作返回true;如果佇列是開啟的,則返回false。

引數:

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

如果佇列是關閉的,此操作返回true;如果佇列是開啟的,則返回false。

size
 
size(name=None)

計算佇列元素數量

引數:

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

標量張量,包括佇列元素數量

dequeue_up_to
 
dequeue_up_to(
    n,
    name=None
)

從佇列中出列並拼接n個元素。

注:此操作不受所有佇列的支援。如果佇列不支援DequeueUpTo,則引發一個tf.errors.UnimplementedError。

此操作將佇列元素元件張量沿著零維連線成單個元件張量。如果佇列尚未關閉,則在零維度中,佇列中的元組中的所有元件都將具有大小N。

如果佇列關閉,並且剩餘的元素多於0但少於n個,則立即返回少於n個的元素,而不是引發tf.error.OutOfRangeError,像tf.QueueBase.dequeue_many。如果佇列關閉,並且佇列中剩餘的元素為0,tf.errors.OutOfRangeError將被丟擲,就像就像dequeue_many中一樣。否則行為與dequeue_many一樣。

引數:

n: 一個標量Tensor,包含出列元素的數目。
name: A name for the operation (optional).
返回:

拼接出列tensors的元組,

#!/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,tf.int32)

with tf.Session() as sess:
    for i  in xrange(n):
        if i%3==0:
            sess.run(xQueue.enqueue(i))
    xLen=sess.run(xQueue.size())
    mySum=0
    print
    for i in range(xLen):
        myx=sess.run(xQueue.dequeue())
        print myx,
        mySum+=myx

    print 
    print mySum

0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
1683
求被3整除的100以內數之和

下面列出1-4的數字

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

with tf.Session() as sess:
    queue = tf.FIFOQueue(100, dtypes=[tf.int32], shapes=[()])
    enqueue_op = queue.enqueue_many([[1, 2,3,4]])
    inputs = queue.dequeue_many(4)
    sess.run(enqueue_op)
    sess.run(enqueue_op)
    print sess.run(inputs)

[1 2 3 4]
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Sep  6 10:16:37 2018
@author: [email protected]
"""
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))
    xLen=sess.run(xQueue.size())
    myx=sess.run(xQueue.dequeue_many(xLen))
    print myx    
    print sum(myx)

[ 0 3 6 ... 93 96 99]
1683
上面求100以內被3整除的數之和