TensorFlow稀疏張量:tf.sparse_merge函數(shù)

2018-02-28 11:53 更新

tf.sparse_merge 函數(shù)

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

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

請(qǐng)參閱指南:稀疏張量>轉(zhuǎn)變

將一批特征 ID 和值合并為一個(gè) SparseTensor.

當(dāng)特征 ID 及其對(duì)應(yīng)值存儲(chǔ)在磁盤(pán)上的 Example 原型中時(shí),就會(huì)出現(xiàn)此函數(shù)的最常見(jiàn)用例.parse_example將返回一個(gè)批次 ID 和批次值,并且這個(gè)函數(shù)將它們加入到一個(gè)邏輯 SparseTensor 中,以便在 sparse_tensor_dense_matmul、sparse_to_dense 等函數(shù)中使用.

此函數(shù)返回的 SparseTensor 具有以下屬性:

  • indices:相當(dāng)于 sp_ids.indices 的最后一個(gè)維度的索引,并替換為 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 原型中,這些可能會(huì)被存儲(chǔ)為稀疏的,只需將特征 id (如果將向量作為矩陣處理的列號(hào)) 存儲(chǔ)在非零元素和相應(yīng)的值上:

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]))})]

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

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])

該方法通過(guò)簡(jiǎn)單地提供 sp_ids 以及 vocab_size 的列表來(lái)推廣到更高維度.在這種情況下,產(chǎn)生的 SparseTensor 具有以下屬性: - indices:相當(dāng)于sp_ids[0].indices的最后一個(gè)維度使用 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.

函數(shù)參數(shù):

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

函數(shù)返回值:

一個(gè) SparseTensor,它緊湊地表示一批特征 id 和值,對(duì)于傳遞到期望此類(lèi) SparseTensor 的函數(shù)非常有用.

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)