如何理解TensorFlow中的IndexedSlices類?

時間 2021-06-02 18:43:08

1樓:

文件中說

A sparse representation of a set of tensor slices at given indices.

它是多個普通Tensor的稀疏表示,比如,下面的例子dense

[slices

.indices[i

],:,

:,:,

...]

=slices

.values[i

,:,:,:,

...]

其索引和原始的dense值對上了。所以,可以參考稀疏矩陣的表示。

2樓:wrccrwx

以我現在的理解,

IndexedSlices輸入三個量:

values:乙個tensor,shape[0]為kindices:與values的shape[0]相同的tensor,用來表徵values的k個slice分別對應每個slice所要表示的大tensor中第一維的位置。

dense_shape:所要表示的大tensor的shape我在用的時候曾經把它和boolean_mask弄反了。如果現在手上有乙個大tensor,想只提取出其中一部分slice,可用boolean_mask。

3樓:SleepyBag

Tensorflow 的文件其實說的已經比較清楚了:

tensorflow.org/api_docs/python/tf/IndexedSlices簡單解釋一下,Slice 的意思是從 Tensor 裡面取下標得到的一部分,比如說原來是 [10,10] 的乙個 Tensor,取下標 [0] 得到乙個 [10] 的 Tensor,這個 Tensor 就是原 Tensor 的乙個 Slice。然後 IndexedSlices 意思就很明顯了,就是一堆 Slices 和它們所對應的下標(也就是 Index)。

那麼這麼做有什麼好處呢,其實就是因為你原來的 Tensor 太大了,但是你只用了其中的幾行,在梯度更新的過程中,如果為了更新這幾行的值,去建立與原矩陣一樣大的梯度矩陣,那代價就太大了。所以設計了這麼乙個資料結構,來做乙個稀疏的儲存。

所以如果你在前向傳播過程中用了 lookup 之類的函式取了乙個 Tensor 中的幾行,那最後得出來的梯度就會是 IndexedSlices,這個結構中的 Indices 就是你前向傳播中取的那幾個位置,也就是最後要更新的那幾個位置,values 就是這些位置所對應的梯度值,dense_shape 就是矩陣原本的形狀。而如果你沒有做 lookup 這類的操作的話,梯度應該是不會使用 IndexedSlices 的。

基於TensorFlow理解三大降維技術 PCA t SNE 和自編碼器

本人高中開始量身高,光腳一直是158。老公180,他一直目測我是161.162,不知道為什麼。歷任男友也都是178到183之間的身高,我就是喜歡高一點的男生。我覺得男生對女生身高的在意程度還不及他們對女生臉蛋 家裡物質條件的在意程度呢。 little f 我剛剛去看了乙個研究,最佳身高差是13 15...

Tensorflow 是如何求導的?

durow 一般來說複雜的運算最後都能寫成加減乘除指數對數等基礎運算的復合函式,也就是乙個單向的計算圖。然後只需要寫出這些基礎運算的導函式,運用鏈式法則,像剝洋蔥一樣一層一層求導。這種是反向求導,據我所知是用的比較多的。不過有些複雜的運算自動微分開銷大,這時候框架一般都會提供基於公式推導的快速計算的...

如何看待 Keras 在 TensorFlow 中的分量越來越重?

David 9 見仁見智,無論什麼框架,構建模型的套路其實也不過這幾種 3種用Keras和TensorFlow2.0建立模型的方法 序列模型,函式式模型和繼承子類模型 不知道吃啥 說個題外話,新手學習一定要先理解常見模型的基本原理和結構,keras或者tf,pytorch只是實現的工具。我遇到好幾個...