TensorFlow稀疏張量:tf.sparse_merge函數

2018-02-28 11:53 更新

tf.sparse_merge 函數

sparse_merge(
    sp_ids,
    sp_values,
    vocab_size,
    name=None,
    already_sorted=False
)

定義在:tensorflow/python/ops/sparse_ops.py.

請參閱指南:稀疏張量>轉變

將一批特征 ID 和值合并為一個 SparseTensor.

當特征 ID 及其對應值存儲在磁盤上的 Example 原型中時,就會出現此函數的最常見用例.parse_example將返回一個批次 ID 和批次值,并且這個函數將它們加入到一個邏輯 SparseTensor 中,以便在 sparse_tensor_dense_matmul、sparse_to_dense 等函數中使用.

此函數返回的 SparseTensor 具有以下屬性:

  • indices:相當于 sp_ids.indices 的最后一個維度的索引,并替換為 sp_ids.values.
  • values:只是 sp_values.values.
  • 如果 sp_ids.dense_shape = [D0, D1, ..., Dn, K],那么 output.shape = [D0, D1, ..., Dn, vocab_size].

例如,考慮以下特征向量:

vector1 = [-3, 0, 0, 0, 0, 0]
vector2 = [ 0, 1, 0, 4, 1, 0]
vector3 = [ 5, 0, 0, 9, 0, 0]

在下面的 Example 原型中,這些可能會被存儲為稀疏的,只需將特征 id (如果將向量作為矩陣處理的列號) 存儲在非零元素和相應的值上:

examples = [Example(features={
                "ids": Feature(int64_list=Int64List(value=[0])),
                "values": Feature(float_list=FloatList(value=[-3]))}),
            Example(features={
                "ids": Feature(int64_list=Int64List(value=[1, 4, 3])),
                "values": Feature(float_list=FloatList(value=[1, 1, 4]))}),
            Example(features={
                "ids": Feature(int64_list=Int64List(value=[0, 3])),
                "values": Feature(float_list=FloatList(value=[5, 9]))})]

對這些示例調用 parse_example 的結果將生成一個包含“ids”和“values”項的字典.將這兩個對象與 vocab_size = 6 一起傳遞給此函數將生成一個SparseTensor,稀疏表示所有三個實例的表達式.也就是說,indices 屬性將包含特征矩陣中非零項的坐標(第一維是矩陣中的行號,即批次內的索引,第二維是列號,即特征 ID);values 將包含實際值.shape 將是原始矩陣的形狀,即(3,6).對于上面的例子,輸出將等于:

SparseTensor(indices=[[0, 0], [1, 1], [1, 3], [1, 4], [2, 0], [2, 3]],
             values=[-3, 1, 4, 1, 5, 9],
             dense_shape=[3, 6])

該方法通過簡單地提供 sp_ids 以及 vocab_size 的列表來推廣到更高維度.在這種情況下,產生的 SparseTensor 具有以下屬性: - indices:相當于sp_ids[0].indices的最后一個維度使用 sp_ids[0].values 和 sp_ids[1].values 等被丟棄并連接在一起.- values:只是 sp_values.values.如果sp_ids.dense_shape = [D0, D1, ..., Dn, K],則 output.shape = [D0, D1, ..., Dn] + vocab_size.

函數參數:

  • sp_ids:具有 int32 或者 int64 類型的 values 屬性的單個 SparseTensor,或者此類 SparseTensors 的 Python列表或其列表.
  • sp_values:任何類型的 SparseTensor.
  • vocab_size:標量 int64 Tensor(或 Python INT)包含最后一個維度的新大小, all(0 <= sp_ids.values < vocab_size).或者對于 i,所有的列表都有,all(0 <= sp_ids[i].values < vocab_size[i]).
  • name:返回張量的名稱前綴(可選)
  • already_sorted:一個布爾值,用于指定 sp_values 中的每個批次的值是否已經排序.如果是則跳過排序,默認為False(可選).

函數返回值:

一個 SparseTensor,它緊湊地表示一批特征 id 和值,對于傳遞到期望此類 SparseTensor 的函數非常有用.

可能引發(fā)的異常:

  • TypeError:如果 sp_values 不是SparseTensor;或者如果 sp_ids 既不是 SparseTensor 也不是它的列表;或者如果 vocab_size 不是 Tensor 或Python int,并且 sp_ids 是 SparseTensor;或者如果 vocab_size 不是一個或其中的列表,并且 sp_ids 是列表.這些情況下將引發(fā) TypeError.
  • ValueError:如果 sp_ids 和 vocab_size 是不同長度的列表.
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號