亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

tensorflow怎么使用range_input_producer多線程讀取數據

發布時間:2021-06-24 09:27:13 來源:億速云 閱讀:121 作者:小新 欄目:開發技術

這篇文章主要介紹tensorflow怎么使用range_input_producer多線程讀取數據,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

先放關鍵代碼:

i = tf.train.range_input_producer(NUM_EXPOCHES, num_epochs=1, shuffle=False).dequeue()
inputs = tf.slice(array, [i * BATCH_SIZE], [BATCH_SIZE])

原理解析:

第一行會產生一個隊列,隊列包含0到NUM_EXPOCHES-1的元素,如果num_epochs有指定,則每個元素只產生num_epochs次,否則循環產生。shuffle指定是否打亂順序,這里shuffle=False表示隊列的元素是按0到NUM_EXPOCHES-1的順序存儲。在Graph運行的時候,每個線程從隊列取出元素,假設值為i,然后按照第二行代碼切出array的一小段數據作為一個batch。例如NUM_EXPOCHES=3,如果num_epochs=2,則隊列的內容是這樣子;

0,1,2,0,1,2

隊列只有6個元素,這樣在訓練的時候只能產生6個batch,迭代6次以后訓練就結束。

如果num_epochs不指定,則隊列內容是這樣子:

0,1,2,0,1,2,0,1,2,0,1,2...

隊列可以一直生成元素,訓練的時候可以產生無限的batch,需要自己控制什么時候停止訓練。

下面是完整的演示代碼。

數據文件test.txt內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

main.py內容:

import tensorflow as tf
import codecs
 
BATCH_SIZE = 6
NUM_EXPOCHES = 5
 
 
def input_producer():
 array = codecs.open("test.txt").readlines()
	array = map(lambda line: line.strip(), array)
 i = tf.train.range_input_producer(NUM_EXPOCHES, num_epochs=1, shuffle=False).dequeue()
 inputs = tf.slice(array, [i * BATCH_SIZE], [BATCH_SIZE])
 return inputs
 
 
class Inputs(object):
 def __init__(self):
  self.inputs = input_producer()
 
 
def main(*args, **kwargs):
 inputs = Inputs()
 init = tf.group(tf.initialize_all_variables(),
     tf.initialize_local_variables())
 sess = tf.Session()
 coord = tf.train.Coordinator()
 threads = tf.train.start_queue_runners(sess=sess, coord=coord)
 sess.run(init)
 try:
  index = 0
  while not coord.should_stop() and index<10:
   datalines = sess.run(inputs.inputs)
   index += 1
   print("step: %d, batch data: %s" % (index, str(datalines)))
 except tf.errors.OutOfRangeError:
  print("Done traing:-------Epoch limit reached")
 except KeyboardInterrupt:
  print("keyboard interrput detected, stop training")
 finally:
  coord.request_stop()
 coord.join(threads)
 sess.close()
 del sess
	
if __name__ == "__main__":
 main()

輸出:

step: 1, batch data: ['1' '2' '3' '4' '5' '6']
step: 2, batch data: ['7' '8' '9' '10' '11' '12']
step: 3, batch data: ['13' '14' '15' '16' '17' '18']
step: 4, batch data: ['19' '20' '21' '22' '23' '24']
step: 5, batch data: ['25' '26' '27' '28' '29' '30']
Done traing:-------Epoch limit reached

如果range_input_producer去掉參數num_epochs=1,則輸出:

step: 1, batch data: ['1' '2' '3' '4' '5' '6']
step: 2, batch data: ['7' '8' '9' '10' '11' '12']
step: 3, batch data: ['13' '14' '15' '16' '17' '18']
step: 4, batch data: ['19' '20' '21' '22' '23' '24']
step: 5, batch data: ['25' '26' '27' '28' '29' '30']
step: 6, batch data: ['1' '2' '3' '4' '5' '6']
step: 7, batch data: ['7' '8' '9' '10' '11' '12']
step: 8, batch data: ['13' '14' '15' '16' '17' '18']
step: 9, batch data: ['19' '20' '21' '22' '23' '24']
step: 10, batch data: ['25' '26' '27' '28' '29' '30']

有一點需要注意,文件總共有35條數據,BATCH_SIZE = 6表示每個batch包含6條數據,NUM_EXPOCHES = 5表示產生5個batch,如果NUM_EXPOCHES =6,則總共需要36條數據,就會報如下錯誤:

InvalidArgumentError (see above for traceback): Expected size[0] in [0, 5], but got 6
 [[Node: Slice = Slice[Index=DT_INT32, T=DT_STRING, _device="/job:localhost/replica:0/task:0/cpu:0"](Slice/input, Slice/begin/_5, Slice/size)]]

錯誤信息的意思是35/BATCH_SIZE=5,即NUM_EXPOCHES 的取值能只能在0到5之間。

以上是“tensorflow怎么使用range_input_producer多線程讀取數據”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临颍县| 景洪市| 丹凤县| 迁安市| 渝北区| 枣强县| 蒲江县| 大同市| 东乌| 武陟县| 政和县| 石河子市| 木兰县| 上思县| 太保市| 阿拉善盟| 定安县| 河南省| 巨野县| 定南县| 宜章县| 明溪县| 江都市| 铁力市| 沂源县| 固阳县| 葵青区| 通渭县| 新宁县| 沂南县| 龙井市| 浮山县| 大足县| 达拉特旗| 聂荣县| 翁牛特旗| 锦屏县| 肇源县| 晋江市| 石渠县| 岚皋县|