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

2018-01-31 11:13 更新

tf.SparseTensor 函數(shù)

SparseTensor 類

定義在:tensorflow/python/framework/sparse_tensor.py.

參見指南:稀疏張量>稀疏張量表示

代表稀疏張量.

TensorFlow表示一個(gè)稀疏張量,作為三個(gè)獨(dú)立的稠密張量:indices,values和dense_shape.在Python中,三個(gè)張量被集合到一個(gè)SparseTensor類中,以方便使用.如果你有單獨(dú)的indices,values和dense_shape張量,SparseTensor在傳遞給下面的操作之前,將它們包裝在一個(gè)對(duì)象中.

具體來(lái)說,該稀疏張量SparseTensor(indices, values, dense_shape)包括以下組件,其中N和ndims分別是在SparseTensor中的值的數(shù)目和維度的數(shù)量:

  • indices:density_shape[N, ndims]的2-D int64張量,指定稀疏張量中包含非零值(元素為零索引)的元素的索引.例如,indices=[[1,3], [2,4]]指定索引為[1,3]和[2,4]的元素具有非零值.
  • values:任何類型和dense_shape [N]的一維張量,它提供了indices中的每個(gè)元素的值.例如,給定indices=[[1,3], [2,4]]的參數(shù)values=[18, 3.6]指定稀疏張量的元素[1,3]的值為18,張量的元素[2,4]的值為3.6.
  • dense_shape:density_shape[ndims]的一個(gè)1-D int64張量,指定稀疏張量的dense_shape.獲取一個(gè)列表,指出每個(gè)維度中元素的數(shù)量.例如,dense_shape=[3,6]指定二維3x6張量,dense_shape=[2,3,4]指定三維2x3x4張量,并且dense_shape=[9]指定具有9個(gè)元素的一維張量.

相應(yīng)的稠密張量滿足:

dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]

按照慣例,indices應(yīng)該按行優(yōu)先順序排列(或者在元組上等效地按字典排序indices[i]).當(dāng)構(gòu)造SparseTensor對(duì)象時(shí),這不是強(qiáng)制執(zhí)行的,但大多數(shù)操作都假定正確的順序.如果稀疏張量st的排序是錯(cuò)誤的,可以通過調(diào)用tf.sparse_reorder(st)來(lái)獲得一個(gè)固定的版本.

例如:稀疏張量表示:

SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4])

表示稠密張量:

[[1, 0, 0, 0]
 [0, 0, 2, 0]
 [0, 0, 0, 0]]

屬性

  • dense_shape
    int64的一維張量,表示稠密張量的形狀.
  • dtype
    在這個(gè)張量中元素的DType.
  • graph
    包含 index,value和dense_shape張量的Graph.
  • indices
    表示稠密張量中非零值的指標(biāo).
    返回:
    帶有dense_shape[N, ndims]的類型為int64的二維張量,其中N是張量中的非零值的數(shù)量,并且ndims是秩.
  • op
    產(chǎn)生values作為輸出的Operation.
  • values
    表示稠密張量中的非零值.
    返回:
  • 任何數(shù)據(jù)類型的一維張量.

方法

__init__方法

__init__(
    indices,
    values,
    dense_shape
)

創(chuàng)建一個(gè)SparseTensor.

__init__ 方法參數(shù):

  • indices:一個(gè)形狀為[N, ndims]的二維int64張量.
  • values:任何類型和形狀[N]的一維張量.
  • dense_shape:形狀為[ndims]的1-D int64張量.

__init__ 方法返回:

該方法返回一個(gè)SparseTensor.

__div__方法

__div__(
    sp_x,
    y
)

Component-wise 用稠密張量除以 SparseTensor.

限制:這個(gè)操作只向稀疏的一面播放密集的一面,而不是其他的方向.

方法參數(shù):

  • sp_indices:int64 類型的張量,是2維的;N x R矩陣具有SparseTensor中的非空值索引,可能不符合規(guī)范排序.
  • sp_values:一個(gè)張量;必須是下列類型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half;是一維的.N的非空值對(duì)應(yīng)sp_indices.
  • sp_shape:int64 類型的張量,是一維的;輸入SparseTensor的形狀.
  • dense:一個(gè)張量,必須與sp_values具有相同的類型;R-D;密集的張量操作數(shù).
  • name:操作的名稱(可選).

方法返回:

該方法返回一個(gè)與sp_values有相同的類型的張量,它是1維的;運(yùn)行的N值.

__mul__方法

__mul__(
    sp_x,
    y
)

按Component-wise方式將SparseTensor乘以一個(gè)稠密的張量.

與稀疏張量中的隱含零元素相對(duì)應(yīng)的輸出位置將是零(即不會(huì)占用存儲(chǔ)空間),而與密集張量的內(nèi)容無(wú)關(guān)(即使它是+/- INF,且INF * 0 == NAN).

限制:這個(gè)操作只向稀疏的一面播放密集的一面,而不是其他的方向.

方法參數(shù):

  • sp_indices:int64類型的張量,是2維的,N x R矩陣具有SparseTensor中的非空值索引,可能不符合規(guī)范排序.
  • sp_values:一個(gè)張量;必須是下列類型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half;是一維的;N的非空值對(duì)應(yīng)sp_indices.
  • sp_shape:int64類型的張量,是1維的;輸入SparseTensor的形狀.
  • dense:一個(gè)張量;必須與sp_values具有相同的類型;R-D;密集的張量操作數(shù).
  • name:操作的名稱(可選).

方法返回:

該方法返回一個(gè)與sp_values有相同的類型;這個(gè)張量是一維的;運(yùn)行的N值.

__truediv__方法

__truediv__(
    sp_x,
    y
)

內(nèi)部幫助函數(shù)'sp_t / dense_t'.

eval 方法

eval(
    feed_dict=None,
    session=None
)

在一個(gè)Session中計(jì)算這個(gè)稀疏張量.

調(diào)用此方法將執(zhí)行所有前面的操作,這些操作會(huì)生成產(chǎn)生此張量的操作所需的輸入.

注意:在調(diào)用SparseTensor.eval()之前,它的關(guān)系圖必須已經(jīng)在Session中啟動(dòng),并且默認(rèn)Session必須是可用的,否則session必須明確指定.

方法參數(shù):

  • feed_dict:將Tensor對(duì)象映射到Feed值的字典.請(qǐng)參閱tf.Session.run以得到有效的Feed值的說明.
  • session:(可選)Session用來(lái)計(jì)算這個(gè)稀疏張量.如果沒有,將使用默認(rèn)Session.

方法返回:

該方法返回一個(gè)SparseTensorValue對(duì)象.

from_value

@classmethod
from_value(
    cls,
    sparse_tensor_value
)

get_shape

get_shape()

得到TensorShape,它表示稠密張量的形狀.

方法返回:

該方法返回一個(gè)TensorShape對(duì)象.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)