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


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


用法

@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 操作是一種反模式,可能會導致內存增長。

相關用法


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