阅读(13.4k) 书签 (0)

TensorFlow创建固定长度记录的Dataset

2018-09-20 16:10 更新

tf.contrib.data.FixedLengthRecordDataset

tf.contrib.data.FixedLengthRecordDataset 类

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

来自一个或多个二进制文件的固定长度记录的 Dataset.

属性

  • output_shapes
  • output_types

方法

__init__

__init__ ( 
    filenames, 
    record_bytes , 
    header_bytes = None, 
    footer_bytes = None
 )

创建 FixedLengthRecordDataset.

ARGS:

  • filenames:tf.string 类型的张量,包含一个或多个文件名.
  • record_bytes:tf.int64 的标量,表示每个记录中的字节数.
  • header_bytes:(可选)tf.int64 类型的标量,表示在文件开头跳过的字节数.
  • footer_bytes:(可选)tf.int64 类型的标量,表示在文件末尾要忽略的字节数.

batch

batch( batch_size )

将此数据集的连续元素组合成批量.

ARGS:

  • batch_size:一个 tf.int64 类型的标量 tf.Tensor,表示在单个批次中组合的此数据集的连续元素的数量.

返回:

返回一个 Dataset.

dense_to_sparse_batch

dense_to_sparse_batch ( 
    batch_size ,
    row_shape
)

将这个数据集的不规则元素批量放入 tf.SparseTensors.

与 Dataset.padded_batch() 一样,此方法将此数据集的多个连续元素 (可能具有不同的形状) 合并到单个元素中.生成的元素有三组件 (索引、值和 dense_shape),它们包含一个tf.SparseTensor 来表示相同数据的组件.row_shape 代表在生成的 tf.SparseTensor 中每行的稠密形状,其中有效批次的大小被前置.例如:

#注意:以下示例使用“{...}”来表示
#数据集的内容.
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:一个 tf.int64 类型的标量 tf.Tensor,表示在单个批次中组合的此数据集的连续元素的数量.
  • row_shape:表示一个 tf.TensorShape 或一个 tf.int64 类型的向量张量样的对象,表示生成的 tf.SparseTensor 中某一行的等效稠密形状,此数据集的每个元素必须具有与 row_shape 相同的秩, 并且在每个维度中必须有小于或等于 row_shape 的大小.

返回:

返回一个 Dataset.

enumerate

enumerate( start = 0 )

枚举此数据集的元素.类似于 python 的 enumerate.

例如:

#注意:以下示例使用“{...}”来表示
#数据集的内容.
a =  {  1 , 2 , 3  } 
b =  {  (7 , 8 ), (9 , 10 ), (11 , 12 ) }

#“datasets”参数的嵌套结构决定
#了结果数据集中元素的结构.
a.enumerate(start = 5 ) ==  {(5 ,1),(6 ,2 ), (7 ,3 )} 
b.enumerate() ==  {(0 ,(7 ,8)),(1 ,(9 ,10 )),(2 ,(11 ,12))}
####Args:
*  <b> `start` </ b> :一个 `tf .int64` 类型的标量 `tf.Tensor` ,代表着开始值的枚举.

####Returns:

  一个 `Dataset` .

< h3 id = “filter” > < code > filter < / code > < / h3 >

```python
filter(predicate)

根据谓词筛选此数据集.

ARGS:

  • predicate:一个函数,用来映射张量的嵌套结构(具有自 output_shapes 和自 output_types 定义的形状和类型)到标量 tf.bool 张量.

返回:

返回一个 Dataset.

flat_map

flat_map ( map_func )

将 map_func 映射到这个数据集,并将结果合并.

ARGS:

  • map_func:一个函数,用来映射张量的嵌套结构(具有由 self.output_shapes 和 self.output_types 定义的形状和类型)到一个 Dataset.

返回:

返回一个 Dataset.

from_sparse_tensor_slices

from_sparse_tensor_slices ( sparse_tensor )

在此数据集中逐行分裂每个秩为 N 的 tf.SparseTensor.

ARGS:

  • sparse_tensor:一个 tf.SparseTensor.

返回:

返回秩为 (N-1) 的稀疏张量的数据集.

from_tensor_slices

from_tensor_slices (tensors)

创建一个数据集,它的元素是给定张量的某部分.

ARGS:

  • tensors:张量的嵌套结构,在第0维度中各有相同的大小.

返回:

返回一个 Dataset.

from_tensors

from_tensors (tensors)

创建一个包含给定张量的单个元素的数据集.

ARGS:

  • tensors:张量的嵌套结构.

返回:

一个 Dataset.

group_by_window

group_by_window ( 
    key_func , 
    reduce_func ,
    WINDOW_SIZE
)

对此数据集执行窗口的 “group-by” 操作.

此方法将此数据集中的每个连续元素映射到使用 key_func 的键, 并按键对元素进行分组.然后, 它将 reduce_func 应用于与同一密钥匹配的大多数 window_size 元素.每个键除了最后窗口外的其它窗口将包含 window_size 元素,最后的窗口可能会较小.

ARGS:

  • key_func:一个函数映射张量的嵌套结构 (具有由 self. output_shapes 和 self.output_types 定义的形状和类型) 到标量 tf.int64 张量.
  • reduce_func:一个函数将一个键和一个数据集映射到 batch_size 的连续元素,并将该键匹配到另一个数据集.
  • window_size:一个 tf.int64 类型的标量 tf.Tensor,表示匹配同一密钥的连续元素的数量,并将其合并到一个批处理中,将被传递给 reduce_func.

返回:

返回一个 Dataset.

make_dataset_resource

make_dataset_resource ()

make_initializable_iterator

make_initializable_iterator (shared_name = None)

创建一个 Iterator 枚举这个数据集的元素.

返回的迭代器将处于未初始化状态,您必须在使用之前运行 iterator.initializer 操作.

ARGS:

  • shared_name:(可选)如果不是空的,这个迭代器将在共享相同设备的多个会话中以给定的名称共享(例如,当使用远程服务器时).

返回

在这个数据集的元素的一个 Iterator .

make_one_shot_iterator

make_one_shot_iterator ()

创建一个 Iterator 枚举这个数据集的元素.

返回的迭代器将被自动初始化.“一键式” 迭代器目前不支持重新初始化.

返回:

在这个数据集的元素的一个 Iterator .

map

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

将 map_func 映射到这个数据集.

ARGS:

  • map_func:一个函数用来映射一个嵌套结构的张量(具有由 self.output_shapes 和 self.output_types 定义的形状和类型)到另一个嵌套结构的张量.
  • num_threads:(可选)一个 tf.int32 类型的标量 tf.Tensor,表示用于并行处理元素的线程数.如果未指定,元素将被顺序处理而不进行缓冲.
  • output_buffer_size:(可选)一个 tf.int64 类型的标量 tf.Tensor,表示在并行处理时将被缓冲的已处理元素的最大数量.

返回:

一个 Dataset.

padded_batch

padded_batch ( 
    batch_size , 
    padded_shapes , 
    padding_values = None
 )

将此数据集的连续元素合并为填充的批处理.

像 Dataset.dense_to_sparse_batch() 一样, 此方法将此数据集的多个连续元素 (可能具有不同的形状) 合并到单个元素中.结果元素中的张量有一个额外的外部维度, 并填充到 padded_shapes 中的相应形状.

ARGS:

  • batch_size:一个tf.int64标量tf.Tensor,表示此数据集的连续元素在单个批处理中合并的数量.
  • padded_shapes:tf.TensorShape 的嵌套结构或 tf. int64 向量张量样对象,表示每个输入元素的各自组件在批处理之前应填充的形状.任何未知的维度 (例如 tf.Dimension(None) 在一个 TensorShape 或-1 在一个类似张量的对象中) 将被填充到每个批次中该维度的最大维度.
  • padding_values:(可选)一个标量形状的嵌套结构 tf.Tensor,表示要用于各个组件的填充值.对于数字类型和字符串类型的空字符串,默认值为 0.

返回:

一个 Dataset.

range

range(* args )

创建一个分步分隔的值范围的数据集.

例如:

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 相同的语义,即: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]

返回:

一个 RangeDataset.

注意:

  • ValueError:当 len(args)== 0

read_batch_features

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

读取批次的示例.

ARGS:

  • file_pattern:字符串模式或带有文件名列表的占位符.
  • batch_size:一个 tf.int64 类型的标量 tf.Tensor,表示此数据集的连续元素在单个批处理中合并的数量.
  • features:字典映射功能键 FixedLenFeature 或 VarLenFeature 值.见 tf.parse_example.
  • reader:可以用 filenames 张量和 (可选) reader_args 调用的函数或类, 并返回序列化示例的数据集.
  • reader_args:要传递给读取器类的其他参数.
  • randomize_input:输入是否应该是随机的
  • num_epochs:整数, 指定通过数据集读取的次数.如果没有, 则永远循环遍历数据集.
  • capacity:ShuffleDataset 的容量.

返回:

返回一个 Dataset.

repeat

repeat( count = None )

重复此数据集 count 次数.

ARGS:

  • count:(可选)一个 tf.int64 类型的标量 tf.Tensor,表示应该重复此数据集的元素的次数.默认行为(如果 count 是 None 或-1)是为了无限期地重复这些元素.

返回:

返回一个 Dataset.

shuffle

shuffle( 
    buffer_size , 
    seed = None
 )

随机地打乱这个数据集的元素.

ARGS:

  • buffer_size:一个 tf.int64 类型的标量 tf.Tensor,表示来自此数据集的元素数, 新数据集将从中取样.
  • seed:(可选.)一个 tf.int64 类型的标量 tf.Tensor,表示将用于创建分布的随机种子.

返回:

返回一个 Dataset.

skip

skip(count)

创建一个从该数据集中跳过计数元素的数据集.

ARGS:

  • count:一个 tf.int64 类型的标量 tf.Tensor,表示应跳过的此数据集的元素数, 以形成新的数据集.如果 count 大于此数据集的大小, 则新数据集将不包含任何元素.如果计数为-1, 则跳过整个数据集.

返回:

返回一个 Dataset.

take

take(count)

使用此数据集中的最多计数元素创建 Dataset.

ARGS:

  • count:一个 tf.int64 类型的标量 tf.Tensor,表示应用于形成新数据集的此数据集的元素数,如果 count 为-1, 或者如果 count 大于此数据集的大小, 则新数据集将包含此数据集的所有元素.

返回:

返回一个 Dataset.

unbatch

unbatch()

将此数据集的元素分解为连续元素的序列.

例如,如果此数据集的元素被塑造为 [B、a0、a1,...], 其中 B 可能因元素而异, 则对于此数据集中的每个元素, unbatched 数据集将包含形状的 B 连续元素 [a0, a1,......].

返回:

返回一个 Dataset.

zip

zip (datasets)

通过将给定数据集合在一起来创建 Dataset .

该方法与 Python 中的内置函数 zip() 具有相似的语义,主要区别在于 datasets 参数可以是 Dataset 对象的任意嵌套结构.例如:

#注意:以下示例使用“{...}”来表示
#数据集的内容.
a =  {1 ,2 ,3} 
b =  {4 ,5 ,6} 
Ç =  {(7 ,8), (9 ,10 ),(11 ,12 )} 
ð =  {13 ,14 }

#“datasets”参数的嵌套结构决定
#了结果数据集中元素的结构.
Dataset.zip((a, b )) ==  {(1 , 4 ),(2 , 5 ),(3 , 6 )} 
Dataset.zip(( b ,a)) ==  {(4 , 1 ),(5 , 2 ),(6 , 3 )}

#“datasets”参数可能包含任意数量的
#数据集.
Dataset.zip((a, b ,c) ==  { (1 , 4 , (7 , 8 )),
                           (2 , 5 ,(9 , 10 )),
                           (3 , 6 ,(11 , 12 ))}

#结果数据集中的元素数与
#数据集中最小数据集的大小相同.
Dataset.zip((a,d)) ==  {  (1 , 13 ), (2 , 14 ) }

ARGS:

  • datasets:数据集的嵌套结构.

返回:

返回一个 Dataset.