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


Python tf.raw_ops.DynamicStitch用法及代碼示例


data 張量中的值交錯成單個張量。

用法

tf.raw_ops.DynamicStitch(
    indices, data, name=None
)

參數

  • indices 至少 1 個 Tensor 類型為 int32 的對象的列表。
  • data 與具有相同類型的Tensor 對象的indices 長度相同的列表。
  • name 操作的名稱(可選)。

返回

  • 一個Tensor。具有與 data 相同的類型。

構建一個合並的張量,使得

merged[indices[m][i, ..., j], ...] = data[m][i, ..., j, ...]

例如,如果每個 indices[m] 是標量或向量,我們有

# Scalar indices:
    merged[indices[m], ...] = data[m][...]

    # Vector indices:
    merged[indices[m][i], ...] = data[m][i, ...]

每個 data[i].shape 必須以相應的 indices[i].shape 開頭,並且 data[i].shape 的其餘部分必須是常量 w.r.t。 i 。也就是說,我們必須有 data[i].shape = indices[i].shape + constant 。就這個 constant 而言,輸出形狀是

merged.shape = [max(indices)] + constant

值按順序合並,因此如果索引同時出現在 indices[m][i]indices[n][j] 中,則 (m,i) < (n,j) 切片 data[n][j] 將出現在合並結果中。如果您不需要此保證,ParallelDynamicStitch 可能在某些設備上表現更好。

例如:

indices[0] = 6
    indices[1] = [4, 1]
    indices[2] = [[5, 2], [0, 3]]
    data[0] = [61, 62]
    data[1] = [[41, 42], [11, 12]]
    data[2] = [[[51, 52], [21, 22]], [[1, 2], [31, 32]]]
    merged = [[1, 2], [11, 12], [21, 22], [31, 32], [41, 42],
              [51, 52], [61, 62]]

此方法可用於合並由dynamic_partition 創建的分區,如下例所示:

# Apply function (increments x_i) on elements for which a certain condition
    # apply (x_i != -1 in this example).
    x=tf.constant([0.1, -1., 5.2, 4.3, -1., 7.4])
    condition_mask=tf.not_equal(x,tf.constant(-1.))
    partitioned_data = tf.dynamic_partition(
        x, tf.cast(condition_mask, tf.int32) , 2)
    partitioned_data[1] = partitioned_data[1] + 1.0
    condition_indices = tf.dynamic_partition(
        tf.range(tf.shape(x)[0]), tf.cast(condition_mask, tf.int32) , 2)
    x = tf.dynamic_stitch(condition_indices, partitioned_data)
    # Here x=[1.1, -1., 6.2, 5.3, -1, 8.4], the -1. values remain
    # unchanged.

相關用法


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