Tensorflow-tf.FixedLengthRecordReader詳解
Tensorflow-tf.FixedLengthRecordReader詳解
描述
tf.FixedLengthRecordReader是從一個檔案中輸出固定長度Recorder的類,是從ReaderBase繼承而來,ReaderBase是一個管理各種型別Reader(Reader資料讀取的類)的基類,它可以將字串(一般是一系列檔名)轉化為Records(每個Recorder是一個Key,Value對),Reader的每一步操作都會生成一個Record,這些Records都是從這些檔案內容裡提煉出來的。Reader可以通過Read()方法,從佇列Queue裡出列一條記錄Recorder,通過佇列可以進行解耦。Reader不相容eager execution。
初始化
init
建立一個FixedLengthRecordReader
__init__(
record_bytes,
header_bytes=None,
footer_bytes=None,
hop_bytes=None,
name=None,
encoding=None
)
引數
- record_bytes: 整形數,輸出的Record的長度
- header_bytes: 整形數,非必填,預設值為0
- footer_bytes: 整形數,非必填,預設值為0
- hop_bytes: 整形數,非必填,預設值為0
- name: 設定操作的名稱,非必填
- encoding: 檔案編碼的型別,預設為none。
屬性
- reader_ref:Reader執行的操作
- supports_serialize:是否支援序列化
方法
- num_records_produced:
num_records_produced(name=None)
返回Reader生成的Recorders的個數,其實和Read()成功執行的次數相同
引數
name:操作的名稱,非必填。
返回
64位的整形張量
- num_work_units_completed
num_work_units_completed(name=None)
返回Reader已經處理的work units(檔案)的數量
引數
name:操作的名稱,非必填。
返回
64位的整形張量
- read
read(
queue,
name=None
)
返回Reader產生的Record(key,value對)
引數
queue:佇列或佇列控制代碼(可變的字串張量描述),佇列元素為字串
name:操作的名稱,非必填。
返回
具有(key,value對)的張量元組,key和value都是字串張量
- read_up_to
read_up_to(
queue,
num_records,
name=None
)
返回Reader產生的最多num_records個Record(key,value對),可以返回比num_records少的Record
引數
queue:佇列或佇列控制代碼(可變的字串張量描述),佇列元素為字串
num_records:Reader最多可以產生的Record數
name:操作的名稱,非必填。
返回
具有(key,value對)的張量元組,key和value都是字串張量
- reset
reset(name=None)
恢復一個Reader的初始化狀態
引數
name:操作的名稱,非必填
返回
重置操作
- restore_state
restore_state(
state,
name=None
)
恢復一個Reader到之前儲存的狀態,不是所有的Reader都支援這個操作,所以執行中可能會報錯。
引數
state:一個字串張量,
name:操作的名稱,非必填
返回
重置操作
- serialize_state
serialize_state(name=None)
產生一個字串張量,標識Reader的序列化狀態。不是所有的Reader都支援這個操作,所以執行中可能會報錯。
引數
name:操作的名稱,非必填
返回
一個字串型別的張量
示例
設定tf.train.string_input_producer的引數shuffle=False
import tensorflow as tf
# 構造字串張量,包含要讀取的檔名
input_files=['inputs/input1.txt','inputs/input2.txt']
# 將input_files中包含的檔案打包生成一個先入先出佇列(FIFOQueue)
# 並且在計算圖的QUEUE_RUNNER集合中新增一個QueueRunner(QueueRunner包含一個佇列的一系列的入列操作)
# shuffle=True時,會對檔名進行亂序處理
input_queues=tf.train.string_input_producer(string_tensor=input_files,shuffle=False)
# 生成檔案閱讀器Reader,設定每次從檔案中讀取固定長度(4)的字串記錄Record
reader=tf.FixedLengthRecordReader(record_bytes=4)
# 檔案閱讀器讀取佇列的值返回key,value
key,value=reader.read(input_queues)
output_key=key
output_val=value
sess=tf.Session()
# 在運算圖中執行佇列操作
tf.train.start_queue_runners(sess=sess)
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
執行結果如下:
key: b'inputs/input1.txt:0'
key: b'inputs/input1.txt:1'
key: b'inputs/input1.txt:2'
key: b'inputs/input2.txt:0'
key: b'inputs/input2.txt:1'
key: b'inputs/input2.txt:2'
val: b'abcd'
val: b'efgh'
val: b'ijkl'
val: b'ABCD'
val: b'EFGH'
val: b'IJKL'
修改tf.train.string_input_producer的引數shuffle=True
import tensorflow as tf
# 構造字串張量,包含要讀取的檔名
input_files=['inputs/input1.txt','inputs/input2.txt']
# 將input_files中包含的檔案打包生成一個先入先出佇列(FIFOQueue)
# 並且在計算圖的QUEUE_RUNNER集合中新增一個QueueRunner(QueueRunner包含一個佇列的一系列的入列操作)
# shuffle=True時,會對檔名進行亂序處理
input_queues=tf.train.string_input_producer(string_tensor=input_files,shuffle=True)
# 生成檔案閱讀器Reader,設定每次從檔案中讀取固定長度(4)的字串記錄Record
reader=tf.FixedLengthRecordReader(record_bytes=4)
# 檔案閱讀器讀取佇列的值返回key,value
key,value=reader.read(input_queues)
output_key=key
output_val=value
sess=tf.Session()
# 在運算圖中執行佇列操作
tf.train.start_queue_runners(sess=sess)
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('key:',sess.run(output_key))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
print('val:',sess.run(output_val))
執行結果如下:
key: b'inputs/input2.txt:0'
key: b'inputs/input2.txt:1'
key: b'inputs/input2.txt:2'
key: b'inputs/input1.txt:0'
key: b'inputs/input1.txt:1'
key: b'inputs/input1.txt:2'
val: b'ABCD'
val: b'EFGH'
val: b'IJKL'
val: b'abcd'
val: b'efgh'
val: b'ijkl'
官網連結
https://tensorflow.google.cn/api_docs/python/tf/FixedLengthRecordReader