用法
@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.compat.v1.data.Dataset.from_tensors用法及代碼示例
 - Python tf.compat.v1.data.Dataset.from_tensor_slices用法及代碼示例
 - Python tf.compat.v1.data.Dataset.flat_map用法及代碼示例
 - Python tf.compat.v1.data.Dataset.filter用法及代碼示例
 - Python tf.compat.v1.data.Dataset.snapshot用法及代碼示例
 - Python tf.compat.v1.data.Dataset.random用法及代碼示例
 - Python tf.compat.v1.data.Dataset.make_one_shot_iterator用法及代碼示例
 - Python tf.compat.v1.data.Dataset.window用法及代碼示例
 - Python tf.compat.v1.data.Dataset.unbatch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.get_single_element用法及代碼示例
 - Python tf.compat.v1.data.Dataset.padded_batch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.apply用法及代碼示例
 - Python tf.compat.v1.data.Dataset.with_options用法及代碼示例
 - Python tf.compat.v1.data.Dataset.cardinality用法及代碼示例
 - Python tf.compat.v1.data.Dataset.bucket_by_sequence_length用法及代碼示例
 - Python tf.compat.v1.data.Dataset.zip用法及代碼示例
 - Python tf.compat.v1.data.Dataset.make_initializable_iterator用法及代碼示例
 - Python tf.compat.v1.data.Dataset.batch用法及代碼示例
 - Python tf.compat.v1.data.Dataset.take用法及代碼示例
 - Python tf.compat.v1.data.Dataset.reduce用法及代碼示例
 
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.data.Dataset.from_generator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
