用法
@staticmethod
from_generator(
generator, output_types=None, output_shapes=None, args=None,
output_signature=None, name=None
)
參數
-
generator
返回支持iter()
協議的對象的可調用對象。如果未指定args
,則generator
必須不帶任何參數;否則,它必須采用與args
中的值一樣多的參數。 -
output_types
(可選。)tf.DType
對象的(嵌套)結構對應於generator
產生的元素的每個組件。 -
output_shapes
(可選。)tf.TensorShape
對象的(嵌套)結構對應於generator
產生的元素的每個組件。 -
args
(可選。)tf.Tensor
對象的元組將被評估並作為NumPy-array 參數傳遞給generator
。 -
output_signature
(可選。)tf.TypeSpec
對象的(嵌套)結構對應於generator
產生的元素的每個組件。 -
name
(可選。)from_generator
使用的 tf.data 操作的名稱。
返回
-
Dataset
一個Dataset
。
創建一個 Dataset
,其元素由 generator
生成。 (不推薦使用的參數)
警告:不推薦使用某些參數:(output_shapes, output_types)
。它們將在未來的版本中被刪除。更新說明:改用output_signature
generator
參數必須是可調用對象,該對象返回支持 iter()
協議的對象(例如生成器函數)。
generator
生成的元素必須與給定的 output_signature
參數或給定的 output_types
和(可選)output_shapes
參數兼容,以指定者為準。
調用from_generator
的推薦方法是使用output_signature
參數。在這種情況下,將假定輸出由具有由output_signature
參數中的tf.TypeSpec
對象定義的類、形狀和類型的對象組成:
def gen():
ragged_tensor = tf.ragged.constant([[1, 2], [3]])
yield 42, ragged_tensor
dataset = tf.data.Dataset.from_generator(
gen,
output_signature=(
tf.TensorSpec(shape=(), dtype=tf.int32),
tf.RaggedTensorSpec(shape=(2, None), dtype=tf.int32)))
list(dataset.take(1))
[(<tf.Tensor:shape=(), dtype=int32, numpy=42>,
<tf.RaggedTensor [[1, 2], [3]]>)]
還有一種不推薦使用的方法來調用from_generator
,可以單獨使用output_types
參數或與output_shapes
參數一起使用。在這種情況下,函數的輸出將假定由 tf.Tensor
對象組成,其類型由 output_types
定義,形狀未知或由 output_shapes
定義。
注意:Dataset.from_generator()
的當前實現使用 tf.numpy_function
並繼承相同的約束。特別是,它要求將數據集和迭代器相關操作放置在與調用 Dataset.from_generator()
的 Python 程序相同的進程中的設備上。 generator
的主體不會在 GraphDef
中序列化,如果您需要序列化模型並在不同的環境中恢複它,則不應使用此方法。
注意:如果 generator
依賴於可變全局變量或其他外部狀態,請注意運行時可能會調用 generator
多次(以支持重複 Dataset
)以及在調用 Dataset.from_generator()
和從生成器生產第一個元素。改變全局變量或外部狀態可能會導致未定義的行為,我們建議您在調用 Dataset.from_generator()
之前顯式緩存 generator
中的任何外部狀態。
注意:雖然output_signature
參數可以產生Dataset
元素,但Dataset.from_generator()
的範圍應限於無法通過tf.data 操作表達的邏輯。在生成器函數中使用 tf.data 操作是一種反模式,可能會導致內存增長。
相關用法
- Python tf.data.experimental.SqlDataset.from_tensor_slices用法及代碼示例
- Python tf.data.experimental.SqlDataset.from_tensors用法及代碼示例
- Python tf.data.experimental.SqlDataset.flat_map用法及代碼示例
- Python tf.data.experimental.SqlDataset.filter用法及代碼示例
- Python tf.data.experimental.SqlDataset.enumerate用法及代碼示例
- Python tf.data.experimental.SqlDataset.zip用法及代碼示例
- Python tf.data.experimental.SqlDataset.shard用法及代碼示例
- Python tf.data.experimental.SqlDataset.snapshot用法及代碼示例
- Python tf.data.experimental.SqlDataset.get_single_element用法及代碼示例
- Python tf.data.experimental.SqlDataset.take用法及代碼示例
- Python tf.data.experimental.SqlDataset.random用法及代碼示例
- Python tf.data.experimental.SqlDataset.concatenate用法及代碼示例
- Python tf.data.experimental.SqlDataset.range用法及代碼示例
- Python tf.data.experimental.SqlDataset.rejection_resample用法及代碼示例
- Python tf.data.experimental.SqlDataset.group_by_window用法及代碼示例
- Python tf.data.experimental.SqlDataset.skip用法及代碼示例
- Python tf.data.experimental.SqlDataset.unique用法及代碼示例
- Python tf.data.experimental.SqlDataset.bucket_by_sequence_length用法及代碼示例
- Python tf.data.experimental.SqlDataset.prefetch用法及代碼示例
- Python tf.data.experimental.SqlDataset.batch用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.data.experimental.SqlDataset.from_generator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。