您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關TensorFlow構造稀疏張量怎么表示,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
對于多維的稀疏數據,TensorFlow 支持 SparseTensor 表示。
構造稀疏張量
SparseTensor(indices, values, dense_shape)
indices是一個維度為(n, ndims)的2-D int64張量,指定非零元素的位置。比如indices=[[1,3], [2,4]]表示[1,3]和[2,4]位置的元素為非零元素。n表示非零元素的個數,ndims表示構造的稀疏張量的維數。
values是一個維度為(N)的1-D張量,對應indices所指位置的元素值。
dense_shape是一個維度為(ndims)的1-D張量,代表稀疏張量的維度。
tf.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]]
轉換
將稀疏張量轉為普通矩陣。
tf.sparse_to_dense( sparse_indices, output_shape, sparse_values, default_value=0, validate_indices=True, name=None )
sparse_indices是那些非零元素的位置。
sparse_indices是實數,該矩陣為一維矩陣,指定一維矩陣的某一個元素位置
sparse_indices是向量,該矩陣為一維矩陣,指定一維矩陣的多個元素
sparse_indices是二維矩陣,該矩陣為多維矩陣,指定多維矩陣的多個元素。
output_shape是矩陣的維度。
sparse_value是對應sparse_indices所指位置的元素值。
default_value是未指定元素的默認值,一般為0。
import tensorflow as tf mysparse_indices = tf.constant(5) mymatrix = tf.sparse_to_dense(mysparse_indices, [11], 10) with tf.Session() as sess: result = sess.run(mymatrix) print(result) //[0 0 0 0 0 10 0 0 0 0 0]
SparseTensor和SparseTensorValue
兩者的參數相同。
在計算圖中定義稀疏張量時,使用SparseTensor;在feed數據時使用SparseTensorValue。
補充知識:徹底搞懂tensorflow里的張量(tensor)
1.引言
學習卷積神經網絡(CNN)的時候,最重要的就是搞清楚網絡各層的神經元輸入輸出的數據結構(即張量)。如果僅用線性代數所學的矩陣,向量來理解張量,一定會搞得一頭霧水。因此很有必要搞清楚張量是什么東西。
首先明確:張量最主要的兩個參數: rank(階,或維數)、shape(形狀)
2.什么是張量
下圖是張量的直觀的示意:張量是標量、向量、矩陣的集合和推廣。
3.什么是rank
rank | 數學實例 | Python 例子 |
---|---|---|
0 | 純數字(只有大小) | s=352 |
1 | 向量(1個基本向量) | v = [1.1, 2.2, 3.3] |
2 | 矩陣(兩個基本向量) | m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
3 | 數據立體(3個基本向量) | t = [ [[2], [4], [6]] , [[8], [10], [12]] , [[14], [16], [18]] ] |
n | n個基本向量 | … |
可以發現:可以數括號[ ]的層數來確定張量的維數(階)
什么是基本向量
基本向量(basis vector):幾個basis vector就是從幾個方面來描述一組數據。
舉例說明:
一維張量:概念和向量完全一樣。圖中的白線就是一個向量,當然了,在三維空間向量有三個分向量(分別是x方向、y方向、z方向)
二維張量:對下面這個長方形施加一個力,怎么來描述?
我們把可以把這個長方形就xoy、xoz、yoz三個平面截下來,之后在每一個平面上再分析受力情況。
兩個basis vector出來了:一個用來描述截面方向(這是一個三維向量);另一個用來描述此截面的受力情況(當然這也是一個三維向量)
那么我們可以用作用在yoz平面(此平面的法向量是x軸單位向量),受力的x軸分量用Pxx來表示,以此推廣到含有9個元素的矩陣,這就是一個2維張量。
換句話來解釋:在一個三維空間,我們從2個基本向量來描述一個東西,那么這個張量所含有的元素個數應該是3的2次方等于9個。每個元素能得到2個基本向量的注釋。這就是一個2維的張量
三維張量:
繼續推廣,每個元素有三個基本向量注釋。三維的張量形狀就像是疊起來的矩陣。
最后品一品這句話
4.什么是shape
shape指明每一層有多少個元素。
比如[2,3,4]是指第一層2個元素,第二層3個元素,第三層4個元素,通過這個我們就可以知道這個張量一共有2 × 3 × 4=24 個元素。而且它有3層,因此可以知道這個張量的rank=3
注意:讀取元素,從外括號往內括號讀
下面這個代碼也能說明問題。
import tensorflow as tf # 定義了一個張量,有6個元素,設置他的形狀是[2.3] a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2,3]) with tf.Session() as session: print(session.run(a))
打印的結果是
[[1 2 3] [4 5 6]]
關于TensorFlow構造稀疏張量怎么表示就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。