tensorflow随笔 -QueueRunner
使用基于隊(duì)列的api實(shí)現(xiàn)輸入管道,屬于數(shù)據(jù)API。
從文件中讀取記錄的典型基于隊(duì)列的管道有以下幾個(gè)階段:
1.文件名列表
2.可選的文件名洗牌式重排
3.可選的epoch限制
4.文件名隊(duì)列
5.文件格式的閱讀器
6.一種×××,供讀者閱讀記錄
7.可選的預(yù)處理
8.例子隊(duì)列
文件名、變換和epoch限制
對(duì)于文件名列表,可以使用常量字符串張量(如[“file0”, “file1”]或[(“file%d” % i) For i in range(2)])或tf.train.match_filenames_once函數(shù)。
將文件名列表傳遞給tf.train.string_input_producer函數(shù)。string_input_producer創(chuàng)建一個(gè)FIFO隊(duì)列,用于保存文件名,直到讀者需要它們?yōu)橹埂?/p>
string_input_producer有一些選項(xiàng),可以選擇變換和設(shè)置最大的epoch數(shù)量。隊(duì)列運(yùn)行器為每個(gè)epoch向隊(duì)列中添加完整的文件名列表,如果shuffle=True,則在epoch中對(duì)文件名進(jìn)行洗牌式重排。這個(gè)過(guò)程提供了文件的統(tǒng)一采樣,這樣示例就不會(huì)彼此之間采樣不足或過(guò)采樣。
隊(duì)列運(yùn)行程序在一個(gè)與從隊(duì)列中提取文件名的讀取器分離的線程中工作,因此洗牌和排隊(duì)過(guò)程不會(huì)阻塞讀取器。
文件格式
選擇與輸入文件格式匹配的閱讀器,并將文件名隊(duì)列傳遞給閱讀器的read方法。read方法輸出一個(gè)標(biāo)識(shí)文件和記錄的鍵(如果有一些奇怪的記錄,這對(duì)調(diào)試很有用)和一個(gè)標(biāo)量字符串值。使用一個(gè)(或多個(gè))×××和轉(zhuǎn)換操作將這個(gè)字符串解碼成構(gòu)成示例的張量。
CSV文件
要讀取逗號(hào)分隔值(CSV)格式的文本文件,請(qǐng)使用帶有tf.decode_csv操作的tf.TextLineReader。例如:
filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])reader = tf.TextLineReader() key, value = reader.read(filename_queue)# Default values, in case of empty columns. Also specifies the type of the # decoded result. record_defaults = [[1], [1], [1], [1], [1]] col1, col2, col3, col4, col5 = tf.decode_csv(value, record_defaults=record_defaults) features = tf.stack([col1, col2, col3, col4])with tf.Session() as sess:# Start populating the filename queue.coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)for i in range(1200):# Retrieve a single instance:example, label = sess.run([features, col5])coord.request_stop()coord.join(threads)每次執(zhí)行read都會(huì)從文件中讀取一行內(nèi)容。然后,decode_csv op將結(jié)果解析為張量列表。record_defaults參數(shù)確定產(chǎn)生的張量的類型,如果輸入字符串中缺少一個(gè)值,則設(shè)置要使用的默認(rèn)值。
你必須調(diào)用tf.train.start_queue_runners填充隊(duì)列,然后調(diào)用run或eval執(zhí)行讀取。否則,read在等待隊(duì)列中的文件名時(shí)將阻塞。
要讀取每個(gè)記錄都是固定字節(jié)數(shù)的二進(jìn)制文件,usetf.FixedLengthRecordReader與tf.decode_raw操作結(jié)合使用。decode_raw op從一個(gè)字符串轉(zhuǎn)換為一個(gè)uint8張量。
例如,CIFAR-10數(shù)據(jù)集使用一種文件格式,其中每個(gè)記錄使用固定字節(jié)表示:標(biāo)簽用1字節(jié)表示,圖像數(shù)據(jù)用3072字節(jié)表示。一旦你有了一個(gè)uint8張量,標(biāo)準(zhǔn)的操作可以切下每一塊,然后根據(jù)需要重新格式化。
類TextLineReader
繼承自:ReaderBase
輸出用換行符分隔的文件行的閱讀器。
從輸出中刪除換行符。急切的兼容性
讀者是不兼容的迫切執(zhí)行。相反,請(qǐng)使用tf。將數(shù)據(jù)放入模型中。
屬性
reader_ref
實(shí)現(xiàn)閱讀器的操作。
supports_serialize
閱讀器實(shí)現(xiàn)是否可以序列化其狀態(tài)。
init
init(
skip_header_lines=None,
name=None
)
創(chuàng)建一個(gè)TextLineReader。
參數(shù):
skip_header_lines:可選int.默認(rèn)為0。每個(gè)文件開(kāi)頭要跳過(guò)的行數(shù)。
name:操作的名稱(可選)。
num_records_produced(name=None)
返回此閱讀器生成的記錄的數(shù)量。
這與已成功執(zhí)行的讀執(zhí)行次數(shù)相同。
參數(shù):
name:操作的名稱(可選)。
返回:
一個(gè)int64張量。
num_work_units_completed
num_work_units_completed(name=None)
返回此閱讀器已完成處理的工作單元數(shù)。
參數(shù):
name:操作的名稱(可選)。
返回:
一個(gè)int64張量。
read
read(
queue,
name=None
)
返回閱讀器生成的下一個(gè)record (key, value)(記錄(鍵,值))對(duì)。
如果需要,將工作單元從隊(duì)列中取出(例如,當(dāng)讀取器需要從一個(gè)新文件開(kāi)始讀取,因?yàn)樗呀?jīng)完成了前一個(gè)文件)。
參數(shù):
queue: 表示隊(duì)列句柄的隊(duì)列或可變字符串張量,帶有字符串工作項(xiàng)。
name: 操作的名稱(可選)。
返回:
張量元組 (key, value)。key:一個(gè)字符串標(biāo)量張量。key:一個(gè)字符串標(biāo)量張量。
read_up_to
read_up_to(
queue,
num_records,
name=None
)
返回由閱讀器生成的num_records (key, value)對(duì)。
如果需要,將工作單元從隊(duì)列中取出(例如,當(dāng)讀取器需要從一個(gè)新文件開(kāi)始讀取時(shí),因?yàn)樗呀?jīng)完成了前一個(gè)文件)。甚至在最后一批之前,它可能返回小于num_records的結(jié)果。
參數(shù):
queue:表示隊(duì)列句柄的隊(duì)列或可變字符串張量,帶有字符串工作項(xiàng)。
num_records:要讀取的記錄數(shù)量。
name: 操作的名稱(可選)。
返回:
張量元組 (key, value)。key:一個(gè)字符串標(biāo)量張量。key:一個(gè)字符串標(biāo)量張量。
reset
reset(name=None)
將閱讀器恢復(fù)到初始的清潔狀態(tài)。
參數(shù):
name:操作的名稱(可選)。
返回:
創(chuàng)建操作。
restore_state
restore_state(
state,
name=None
)
將讀取器恢復(fù)到先前保存的狀態(tài)。
并不是所有的閱讀器都支持被還原,因此這會(huì)產(chǎn)生一個(gè)未實(shí)現(xiàn)的錯(cuò)誤。
參數(shù):
state:字符串張量。匹配類型的閱讀器的序列化狀態(tài)的結(jié)果。
name:操作的名稱(可選)。
返回:
創(chuàng)建操作。
serialize_state
serialize_state(name=None)
生成一個(gè)字符串張量來(lái)編碼讀取器的狀態(tài)。
并不是所有的閱讀器都支持序列化,因此這會(huì)產(chǎn)生未實(shí)現(xiàn)的錯(cuò)誤。
參數(shù):
name:操作的名稱(可選)。
返回:
一個(gè)字符串張量。
總結(jié)
以上是生活随笔為你收集整理的tensorflow随笔 -QueueRunner的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android创建空文件,ADT 更新
- 下一篇: tensorflow随笔-tf.Read