包含TFRecord文件記錄的數(shù)據(jù)集

2018-04-26 10:20 更新

TFRecordDataset 類

繼承自: Dataset

定義在:tensorflow/contrib/data/python/ops/dataset_ops.py

使用 TensorFlow 函數(shù):tf.contrib.data.TFRecordDataset 表示包含一個(gè)或多個(gè) TFRecord 文件的記錄的數(shù)據(jù)集.

屬性

  • output_shapes
  • output_types

方法

__init__

__init__(
    filenames,
    compression_type=None
)

創(chuàng)建一個(gè) TFRecordDataset.

ARGS:

  • filenames:包含一個(gè)或多個(gè)文件名的 tf.string 類型的張量.
  • compression_type:一個(gè) tf.string 類型標(biāo)量對(duì)" "(no compression)、"ZLIB" 或 "GZIP" 中的某一個(gè)進(jìn)行評(píng)價(jià).

batch

batch(batch_size)

將此數(shù)據(jù)集的連續(xù)元素組合成批.

ARGS:

  • batch_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示在單個(gè)批處理中合并的此數(shù)據(jù)集的連續(xù)元素的數(shù)量.

返回值:

返回一個(gè) Dataset.

cache

cache(filename='')

緩存這個(gè)數(shù)據(jù)集中的元素.

ARGS:

  • filename:一個(gè) tf.string 類型的標(biāo)量 tf.Tensor,表示文件系統(tǒng)中用于緩存此數(shù)據(jù)集中的張量的目錄的名稱.如果未提供文件名,則數(shù)據(jù)集將緩存在內(nèi)存中.

返回值:

返回一個(gè) Dataset.

concatenate

concatenate(dataset)

通過將給定的數(shù)據(jù)集與此數(shù)據(jù)集連接來(lái)創(chuàng)建數(shù)據(jù)集.

# NOTE: The following examples use `{ ... }` to represent the
# contents of a dataset.
a = { 1, 2, 3 }
b = { 4, 5, 6, 7 }

# Input dataset and dataset to be concatenated should have same
# nested structures and output types.
# c = { (8, 9), (10, 11), (12, 13) }
# d = { 14.0, 15.0, 16.0 }
# a.concatenate(c) and a.concatenate(d) would result in error.

a.concatenate(b) == { 1, 2, 3, 4, 5, 6, 7 }

ARGS:

  • dataset:需要連接的 Dataset.

返回值:

該操作件返回一個(gè) Dataset.

dense_to_sparse_batch

dense_to_sparse_batch ( 
    batch_size ,
    row_shape
)

將該數(shù)據(jù)集的不規(guī)則元素批量放入到 tf . sparsetenUNK 中.

像 Dataset.padded_batch() 一樣,此方法將此數(shù)據(jù)集的多個(gè)連續(xù)元素 (可能具有不同的形狀) 合并到單個(gè)元素中.所得到的元素具有三個(gè)組件(indices,values 和dense_shape),它們中包含一個(gè) tf.SparseTensor 表示相同數(shù)據(jù)的組件.row_shape 表示生成的 tf.SparseTensor 中每行所得的稠密形狀,其中有效的批量大小被前置.例如:

# 注意: 以下示例使用 `{ ... }` 來(lái)表示數(shù)據(jù)集的內(nèi)容
a = { ['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c', 'd'] }

a.dense_to_sparse_batch(batch_size=2, row_shape=[6]) == {
    ([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1]],  # indices
     ['a', 'b', 'c', 'a', 'b'],                 # values
     [2, 6]),                                   # dense_shape
    ([[2, 0], [2, 1], [2, 2], [2, 3]],
     ['a', 'b', 'c', 'd'],
     [1, 6])
}

ARGS:

  • batch_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示在單個(gè)批次中組合的此數(shù)據(jù)集的連續(xù)元素的數(shù)量.
  • row_shape:一個(gè) tf.TensorShape 或 tf.int64 類型的矢量張量對(duì)象,表示生成的 tf.SparseTensor 中某一行的等效稠密形狀.此數(shù)據(jù)集的每個(gè)元素必須具有與 row_shape 相同的秩,并且在每個(gè)維度中必須具有小于或等于 row_shape 的大小.

返回值:

返回一個(gè) Dataset.

enumerate

enumerate(start=0)

枚舉此數(shù)據(jù)集的元素.類似于 python 的枚舉.

例如:

# 注意:以下示例使用 `{ ... }` 來(lái)表示數(shù)據(jù)集的內(nèi)容
a = { 1, 2, 3 }
b = { (7, 8), (9, 10), (11, 12) }

# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
a.enumerate(start=5) == { (5, 1), (6, 2), (7, 3) }
b.enumerate() == { (0, (7, 8)), (1, (9, 10)), (2, (11, 12)) }

ARGS:

  • start:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,用來(lái)表示枚舉的起始值.

返回指:

返回一個(gè) Dataset.

filter

filter(predicate)

根據(jù) predicate 過濾此數(shù)據(jù)集.

ARGS:

  • predicate:一個(gè)函數(shù),用于映射張量的嵌套結(jié)構(gòu)(具有由 self.output_shapes 和 self.output_types 定義的形狀和類型)到標(biāo)量類型為 tf.bool 的張量.

返回值:

返回一個(gè) Dataset.

flat_map

flat_map(map_func)

將 map_func 映射到這個(gè)數(shù)據(jù)集,并拼合結(jié)果.

ARGS:

  • map_func:一個(gè)函數(shù),用于映射張量嵌套結(jié)構(gòu)(具有由 self.output_shapes 和 self.output_types 定義的形狀和類型)到一個(gè) Dataset.

返回值:

返回一個(gè) Dataset.

from_sparse_tensor_slices

from_sparse_tensor_slices(sparse_tensor)

在此數(shù)據(jù)集中逐行分割每個(gè)秩為 N 的 tf.SparseTensor.

ARGS:

  • sparse_tensor:一個(gè) tf.SparseTensor.

返回值:

秩為(N-1)的稀疏張量的數(shù)據(jù)集.

from_tensor_slices

from_tensor_slices(tensors)

創(chuàng)建一個(gè)數(shù)據(jù)集,其元素是給定張量的 slices.

ARGS:

  • tensors:張量的嵌套結(jié)構(gòu),在第0維度中各有相同的大小.

返回值:

返回一個(gè) Dataset.

from_tensors

from_tensors(tensors)

創(chuàng)建一個(gè)包含給定張量的單個(gè)元素的數(shù)據(jù)集.

ARGS:

  • tensors:張量的嵌套結(jié)構(gòu).

返回值:

返回一個(gè) Dataset.

group_by_window

group_by_window(
    key_func,
    reduce_func,
    window_size
)

對(duì)此數(shù)據(jù)集執(zhí)行窗口化的 “group-by” 操作.

該方法將該數(shù)據(jù)集中的每個(gè)連續(xù)元素映射到一個(gè)使用 key_func 的 key,并通過該 key 對(duì)元素進(jìn)行分組.然后將 reduce_func 最多應(yīng)用于與同一 key 匹配的大多數(shù) window_size 元素.每個(gè) key 將包含 window_size 元素,除了最后的窗口,最后的窗口可能較小.

ARGS:

  • key_func:一個(gè)函數(shù),用于映射張量的嵌套結(jié)構(gòu)(具有由 self.output_shapes 和 self.output_types 定義的形狀和類型)到標(biāo)量類型為 tf.int64 的張量.
  • reduce_func:一個(gè)函數(shù),將一個(gè) key 和一個(gè)數(shù)據(jù)集映射到 batch_size 的連續(xù)元素,并將該 key 匹配到另一個(gè)數(shù)據(jù)集.
  • window_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示與同一 key 相匹配的連續(xù)元素的個(gè)數(shù),以便在單個(gè)批處理中合并,將傳遞給 reduce_func.

返回值:

返回一個(gè) Dataset.

ignore_errors

ignore_errors()

從此項(xiàng)創(chuàng)建數(shù)據(jù)集,并默認(rèn)忽略任何錯(cuò)誤.

使用此轉(zhuǎn)換可以生成包含與輸入相同元素的數(shù)據(jù)集,但會(huì)默認(rèn)刪除導(dǎo)致錯(cuò)誤的任何元素.例如:

dataset = tf.contrib.data.Dataset.from_tensor_slices([1., 2., 0., 4.])

# Computing `tf.check_numerics(1. / 0.)` will raise an InvalidArgumentError.
dataset = dataset.map(lambda x: tf.check_numerics(1. / x, "error"))

# Using `ignore_errors()` will drop the element that causes an error.
dataset = dataset.ignore_errors()  # ==> { 1., 0.5, 0.2 }

返回值:

返回一個(gè) Dataset.

interleave

interleave(
    map_func,
    cycle_length,
    block_length=1
)

將 map_func 映射到這個(gè)數(shù)據(jù)集,并插入結(jié)果.

例如,您可以 Dataset.interleave() 同時(shí)處理多個(gè)輸入文件:

# 同時(shí)處理4個(gè)文件,并從每個(gè)文件的16個(gè)記錄塊中插入結(jié)果.
filenames = ["/var/data/file1.txt", "/var/data/file2.txt", ..."]
dataset = (Dataset.from_tensor_slices(filenames)
           .interleave(
               lambda x: TextLineDataset(x).map(parse_fn, num_threads=1),
               cycle_length=4, block_length=16))

cycle_length 和 block_length 參數(shù)控制元素的生成順序.cycle_length 控制并發(fā)處理的輸入元素的數(shù)量.如果設(shè)置 cycle_length 為1,則此轉(zhuǎn)換將一次處理一個(gè)輸入元素,并將產(chǎn)生與 tf.contrib.data.Dataset.flat_map 相同的結(jié)果.一般來(lái)說(shuō),這種轉(zhuǎn)換將適用 map_func 到 cycle_length 的輸入元素,開啟迭代器對(duì)返回的Dataset 對(duì)象,并循環(huán)通過它們生成每個(gè)迭代器的 block_length 連續(xù)元素,并且每次當(dāng)?shù)鹘Y(jié)束時(shí),都要使用下一個(gè)輸入元素.

例如:

# 注意:以下示例使用 `{ ... }` 來(lái)表示數(shù)據(jù)集的內(nèi)容
a = { 1, 2, 3, 4, 5 }

# 注意:新行顯示 "block" 邊界
a.interleave(lambda x: Dataset.from_tensors(x).repeat(6),
             cycle_length=2, block_length=4) == {
    1, 1, 1, 1,
    2, 2, 2, 2,
    1, 1,
    2, 2,
    3, 3, 3, 3,
    4, 4, 4, 4,
    3, 3,
    4, 4,
    5, 5, 5, 5,
    5, 5,
}

ARGS:

  • map_func:一個(gè)函數(shù),用于映射張量的嵌套結(jié)構(gòu)(具有由 self.output_shapes 和 self.output_types 定義的形狀和類型)到一個(gè)Dataset.
  • cycle_length:將同時(shí)處理該數(shù)據(jù)集中的元素個(gè)數(shù).
  • block_length:在循環(huán)到另一個(gè)輸入元素之前,從每個(gè)輸入元素生成的連續(xù)元素的數(shù)量.

返回值:

返回一個(gè) Dataset.

list_files

list_files(file_pattern)

與模式匹配的所有文件的數(shù)據(jù)集.

示例:如果我們的文件系統(tǒng)上有以下文件: - /path/to/dir/a.txt - /path/to/dir/b.py - /path/to/dir/c.py;如果我們傳遞 “/ path / to / dir / *.py“ 作為目錄,數(shù)據(jù)集將產(chǎn)生: - /path/to/dir/b.py - /path/to/dir/c.py

ARGS:

  • file_pattern:字符串或標(biāo)量字符串 tf.Tensor,表示將匹配的文件名模式.

返回值:

返回一個(gè)與文件名相對(duì)應(yīng)的字符串的數(shù)據(jù)集.

make_dataset_resource

make_dataset_resource ()

make_initializable_iterator

make_initializable_iterator(shared_name=None)

創(chuàng)建一個(gè) Iterator 用來(lái)枚舉這個(gè)數(shù)據(jù)集的元素.

注意:返回的 Iterator 將處于未初始化狀態(tài),您必須先運(yùn)行 iterator.initializer 操作,然后再使用它.

ARGS:

  • shared_name:(可選)如果非空,則該 Iterator 將在共享相同設(shè)備的多個(gè)會(huì)話(例如,使用遠(yuǎn)程服務(wù)器)時(shí)在給定名稱下共享.

返回值:

返回一個(gè)此數(shù)據(jù)集的元素上的 Iterator.

make_one_shot_iterator

make_one_shot_iterator()

創(chuàng)建一個(gè) Iterator 用來(lái)枚舉這個(gè)數(shù)據(jù)集的元素.

注意:返回的 Iterator 將自動(dòng)初始化."one-shot"  Iterator 當(dāng)前不支持重新初始化.

返回:

返回一個(gè)此數(shù)據(jù)集的元素上的 Iterator.

map

map(
    map_func,
    num_threads=None,
    output_buffer_size=None
)

將 map_func 映射到這個(gè)數(shù)據(jù)集.

ARGS:

  • map_func:一個(gè)函數(shù),用于映射張量的嵌套結(jié)構(gòu)(具有由 self.output_shapes 和 self.output_types 定義的形狀和類型)到另一個(gè)張量的嵌套結(jié)構(gòu).
  • num_threads:(可選)一個(gè) tf.int32 類型的標(biāo)量 tf.Tensor,表示要用于并行處理元素的線程數(shù).如果未指定,元素將被順序處理而不進(jìn)行緩沖.
  • output_buffer_size:(可選)一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示在并行處理時(shí)將緩沖的已處理元素的最大數(shù)量.

返回值:

返回一個(gè) Dataset.

padded_batch

padded_batch ( 
    batch_size , 
    padded_shapes , 
    padding_values = None
 )

將此數(shù)據(jù)集的連續(xù)元素合并到填充的批處理中.

和 Dataset.dense_to_sparse_batch() 相同,此方法將此數(shù)據(jù)集的多個(gè)連續(xù)元素 (可能具有不同的形狀) 合并到單個(gè)元素中.所得元素中的張量具有一個(gè)額外的外部維度,并且被填充到 padded_shapes 中的相應(yīng)形狀.

ARGS:

  • batch_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示在單個(gè)批次中組合的此數(shù)據(jù)集的連續(xù)元素的數(shù)量.
  • padded_shapes:tf.TensorShape 的嵌套結(jié)構(gòu)或 tf.int64類型的矢量張量樣對(duì)象,表示每個(gè)輸入元素的各個(gè)組件在批處理之前應(yīng)填充的形狀.任何未知的維度(例如,在一個(gè) tf.TensorShape 中的 tf.Dimension(None) 或張量樣對(duì)象中的-1)將被填充到每個(gè)批次中該維度的最大尺寸.
  • padding_values:(可選)標(biāo)量形狀的 tf.Tensor 的嵌套結(jié)構(gòu),表示用于各個(gè)組件的填充值.對(duì)于數(shù)字類型,默認(rèn)值為 0,字符串類型為空字符串.

返回值:

返回一個(gè) Dataset.

range

range(*args)

創(chuàng)建一個(gè)逐步分離的值范圍的數(shù)據(jù)集.

例如:

Dataset.range(5) == [0, 1, 2, 3, 4]
Dataset.range(2, 5) == [2, 3, 4]
Dataset.range(1, 5, 2) == [1, 3]
Dataset.range(1, 5, -2) == []
Dataset.range(5, 1) == []
Dataset.range(5, 1, -2) == [5, 3]

ARGS:

* args:遵循與 python 的 xrange 相同的語(yǔ)義.即: len(args) == 1 -> start = 0,stop = args[0],step = 1 len(args) == 2 -> start = args[0], stop = args[1], step = 1 len(args) == 3 -> start = args[0], stop = args[1, stop = args[2]

返回值:

返回一個(gè) RangeDataset.

注意:

  • ValueError:當(dāng) len(args)== 0 時(shí)發(fā)生.

read_batch_features

read_batch_features(
    file_pattern,
    batch_size,
    features,
    reader,
    reader_args=None,
    randomize_input=True,
    num_epochs=None,
    capacity=10000
)

讀取實(shí)例的批次.

ARGS:

  • file_pattern:字符串模式或帶有文件名列表的占位符.
  • batch_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示在單個(gè)批處理中組合的此數(shù)據(jù)集的連續(xù)元素的數(shù)量.
  • features:dict 映射功能鍵 FixedLenFeature 或 VarLenFeature 值.
  • reader:可以用 filenames 張量和(可選)reader_args 調(diào)用的函數(shù)或類,并返回序列化示例的數(shù)據(jù)集.
  • reader_args:要傳遞給讀取器的其他參數(shù).
  • randomize_input:輸入是否應(yīng)該是隨機(jī)的.
  • num_epochs:整數(shù),指定讀取數(shù)據(jù)集的次數(shù).如果無(wú),則永遠(yuǎn)循環(huán)遍歷數(shù)據(jù)集.
  • capacity:ShuffleDataset 的容量.

返回值:

返回一個(gè) Dataset.

repeat

repeat(count=None)

重復(fù)此數(shù)據(jù)集的 count 次數(shù).

ARGS:

  • count:(可選)一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示應(yīng)該重復(fù)此數(shù)據(jù)集的元素的次數(shù).默認(rèn)行為(如果 count 是 None 或-1)是為了無(wú)限期地重復(fù)這些元素.

返回值:

返回一個(gè) Dataset.

shuffle

shuffle(
    buffer_size,
    seed=None
)

隨機(jī)地打亂這個(gè)數(shù)據(jù)集的元素.

ARGS:

  • buffer_size:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示來(lái)自此數(shù)據(jù)集的元素?cái)?shù), 新數(shù)據(jù)集將從中取樣.
  • seed:(可選)一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示將用于創(chuàng)建分布的隨機(jī)種子.見 tf. set_random_seed 的行為.

返回值:

返回一個(gè) Dataset.

skip

skip(count)

創(chuàng)建一個(gè)從該數(shù)據(jù)集中跳過 count 元素的數(shù)據(jù)集.

ARGS:

  • count:一個(gè) tf.int64類型的標(biāo)量 tf.Tensor,表示應(yīng)跳過的此數(shù)據(jù)集的元素?cái)?shù), 以形成新的數(shù)據(jù)集.如果 count 大于此數(shù)據(jù)集的大小,則新數(shù)據(jù)集將不包含任何元素.如果 count 為-1,則跳過整個(gè)數(shù)據(jù)集.

返回值:

返回一個(gè) Dataset.

take

take(count)

使用此數(shù)據(jù)集中的最多 count 元素創(chuàng)建數(shù)據(jù)集.

ARGS:

  • count:一個(gè) tf.int64 類型的標(biāo)量 tf.Tensor,表示為形成新數(shù)據(jù)集而應(yīng)采取的此數(shù)據(jù)集的元素?cái)?shù).如果 count 為-1,或者如果 count 大于此數(shù)據(jù)集的大小,則新數(shù)據(jù)集將包含此數(shù)據(jù)集的所有元素.

返回值:

返回一個(gè) Dataset.

unbatch

unbatch()

將此數(shù)據(jù)集的元素分解為連續(xù)元素的序列.

例如,如果此數(shù)據(jù)集的元素被塑造為 [B, a0, a1, ...],其中 B 可能會(huì)因元素而異,那么對(duì)于此數(shù)據(jù)集中的每個(gè)元素, unbatched 數(shù)據(jù)集將包含B連續(xù)的形狀元素[a0, a1, ...].

返回值:

返回一個(gè) Dataset.

zip

zip(datasets)

通過將給定數(shù)據(jù)集壓縮在一起來(lái)創(chuàng)建數(shù)據(jù)集.
此方法與 Python 中內(nèi)置的 zip () 函數(shù)具有相似的語(yǔ)義,主要區(qū)別在于數(shù)據(jù)集參數(shù)可以是數(shù)據(jù)集對(duì)象的任意嵌套結(jié)構(gòu).例如:

# 注意:以下示例使用 `{ ... }` 來(lái)表示數(shù)據(jù)集的內(nèi)容
a = { 1, 2, 3 }
b = { 4, 5, 6 }
c = { (7, 8), (9, 10), (11, 12) }
d = { 13, 14 }

# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
Dataset.zip((a, b)) == { (1, 4), (2, 5), (3, 6) }
Dataset.zip((b, a)) == { (4, 1), (5, 2), (6, 3) }

# The `datasets` argument may contain an arbitrary number of
# datasets.
Dataset.zip((a, b, c)) == { (1, 4, (7, 8)),
                            (2, 5, (9, 10)),
                            (3, 6, (11, 12)) }

# The number of elements in the resulting dataset is the same as
# the size of the smallest dataset in `datasets`.
Dataset.zip((a, d)) == { (1, 13), (2, 14) }

ARGS:

  • datasets:數(shù)據(jù)集的嵌套結(jié)構(gòu).

返回值:

返回一個(gè) Dataset.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)