當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.data.Dataset用法及代碼示例

表示一組可能很大的元素。

用法

tf.data.Dataset(
    variant_tensor
)

參數

  • variant_tensor 表示數據集的 DT_VARIANT 張量。

屬性

  • element_spec 此數據集元素的類型規範。
    dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
    dataset.element_spec
    TensorSpec(shape=(), dtype=tf.int32, name=None)

    如需更多信息,請閱讀本指南。

tf.data.Dataset API 支持編寫說明性和高效的輸入管道。 Dataset 的使用遵循一個常見的模式:

  1. 從輸入數據創建源數據集。
  2. 應用數據集轉換來預處理數據。
  3. 迭代數據集並處理元素。

迭代以流式方式發生,因此整個數據集不需要放入內存中。

源數據集:

創建數據集的最簡單方法是從 python list 創建它:

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
for element in dataset:
  print(element)
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)
tf.Tensor(3, shape=(), dtype=int32)

要處理文件中的行,請使用 tf.data.TextLineDataset

dataset = tf.data.TextLineDataset(["file1.txt", "file2.txt"])

要處理以 TFRecord 格式編寫的記錄,請使用 TFRecordDataset

dataset = tf.data.TFRecordDataset(["file1.tfrecords", "file2.tfrecords"])

要創建與模式匹配的所有文件的數據集,請使用 tf.data.Dataset.list_files

dataset = tf.data.Dataset.list_files("/path/*.txt")

有關創建數據集的更多方法,請參閱tf.data.FixedLengthRecordDatasettf.data.Dataset.from_generator

轉換:

擁有數據集後,您可以應用轉換為模型準備數據:

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset = dataset.map(lambda x:x*2)
list(dataset.as_numpy_iterator())
[2, 4, 6]

常用術語:

元素:調用的單個輸出next()在數據集迭代器上。元素可以是包含多個組件的嵌套結構。例如,元素(1, (3, "apple"))有一個元組嵌套在另一個元組中。組件是1,3, 和"apple".

組件:元素嵌套結構中的葉子。

支持的類型:

元素可以是元組、命名元組和字典的嵌套結構。請注意,Python 列表不被視為組件的嵌套結構。相反,列表被轉換為張量並被視為組件。例如,元素(1, [1, 2, 3]) 隻有兩個組件;張量 1 和張量 [1, 2, 3] 。元素組件可以是 tf.TypeSpec 可以表示的任何類型,包括 tf.Tensortf.data.Datasettf.sparse.SparseTensortf.RaggedTensortf.TensorArray

a = 1 # Integer element
b = 2.0 # Float element
c = (1, 2) # Tuple element with 2 components
d = {"a":(2, 2), "b":3} # Dict element with 3 components
Point = collections.namedtuple("Point", ["x", "y"])
e = Point(1, 2) # Named tuple
f = tf.data.Dataset.range(10) # Dataset element

如需更多信息,請閱讀本指南。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.data.Dataset。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。