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


Python tf.numpy_function用法及代碼示例


包裝一個 python 函數並將其用作 TensorFlow 操作。

用法

tf.numpy_function(
    func, inp, Tout, name=None
)

參數

  • func 一個 Python 函數,它接受 numpy.ndarray 對象作為參數並返回 numpy.ndarray 對象列表(或單個 numpy.ndarray )。此函數必須接受與 inp 中的張量一樣多的參數,並且這些參數類型將匹配 inp 中相應的 tf.Tensor 對象。返回的 numpy.ndarray 必須與定義的數量和類型相匹配 Tout 。重要提示:func 的輸入和輸出 numpy.ndarray 不保證是副本。在某些情況下,它們的底層內存將與相應的 TensorFlow 張量共享。在沒有顯式 (np.) 複製的情況下,在 python 數據結構中就地修改或存儲 func 輸入或返回值可能會產生不確定的後果。
  • inp tf.Tensor 對象的列表。
  • Tout tensorflow 數據類型的列表或元組或單個 tensorflow 數據類型(如果隻有一個),指示 func 返回的內容。
  • name (可選)操作的名稱。

返回

  • func 計算的tf.Tensor 的單個或列表。

給定一個 python 函數 func 將此函數包裝為 TensorFlow 函數中的一個操作。 func 必須將 numpy 數組作為其參數並返回 numpy 數組作為其輸出。

以下示例使用 np.sinh() 作為圖中的操作創建 TensorFlow 圖:

def my_numpy_func(x):
  # x will be a numpy array with the contents of the input to the
  # tf.function
  return np.sinh(x)
@tf.function(input_signature=[tf.TensorSpec(None, tf.float32)])
def tf_function(input):
  y = tf.numpy_function(my_numpy_func, [input], tf.float32)
  return y * y
tf_function(tf.constant(1.))
<tf.Tensor:shape=(), dtype=float32, numpy=1.3810978>

tf.py_function 的比較:tf.py_functiontf.numpy_function 非常相似,除了 tf.numpy_function 采用 numpy 數組,而不是 tf.Tensor s。如果您希望函數包含 tf.Tensors ,並且在函數中執行的任何 TensorFlow 操作都是可微的,請使用 tf.py_function

注意:tf.numpy_function 操作具有以下已知限製:

  • 函數體(即 func )不會在 tf.SavedModel 中序列化。因此,如果您需要序列化模型並在不同的環境中恢複它,則不應使用此函數。

  • 該操作必須在與調用 tf.numpy_function() 的 Python 程序相同的地址空間中運行。如果您使用分布式 TensorFlow,則必須在與調用 tf.numpy_function 的程序相同的進程中運行 tf.distribute.Server,您必須將創建的操作固定到該服務器中的設備(例如,使用 with tf.device(): )。

  • 由於該函數采用 numpy 數組,因此您不能通過 numpy_function 獲取漸變。如果您需要可區分的東西,請考慮使用 tf.py_function。

  • 結果函數被假定為有狀態的並且永遠不會被優化。

相關用法


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