淺談TensorFlow之稀疏張量表示
對(duì)于多維的稀疏數(shù)據(jù),TensorFlow 支持 SparseTensor 表示。
官方文檔地址:https://tensorflow.google.cn/api_guides/python/sparse_ops
構(gòu)造稀疏張量
SparseTensor(indices, values, dense_shape)
indices是一個(gè)維度為(n, ndims)的2-D int64張量,指定非零元素的位置。比如indices=[[1,3], [2,4]]表示[1,3]和[2,4]位置的元素為非零元素。n表示非零元素的個(gè)數(shù),ndims表示構(gòu)造的稀疏張量的維數(shù)。
values是一個(gè)維度為(N)的1-D張量,對(duì)應(yīng)indices所指位置的元素值。
dense_shape是一個(gè)維度為(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]]
轉(zhuǎn)換
將稀疏張量轉(zhuǎn)為普通矩陣。
tf.sparse_to_dense( sparse_indices, output_shape, sparse_values, default_value=0, validate_indices=True, name=None )
sparse_indices是那些非零元素的位置。
sparse_indices是實(shí)數(shù),該矩陣為一維矩陣,指定一維矩陣的某一個(gè)元素位置
sparse_indices是向量,該矩陣為一維矩陣,指定一維矩陣的多個(gè)元素
sparse_indices是二維矩陣,該矩陣為多維矩陣,指定多維矩陣的多個(gè)元素。
output_shape是矩陣的維度。
sparse_value是對(duì)應(yīng)sparse_indices所指位置的元素值。
default_value是未指定元素的默認(rèn)值,一般為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
兩者的參數(shù)相同。
在計(jì)算圖中定義稀疏張量時(shí),使用SparseTensor;在feed數(shù)據(jù)時(shí)使用SparseTensorValue。
補(bǔ)充知識(shí):徹底搞懂tensorflow里的張量(tensor)
1.引言
學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)(CNN)的時(shí)候,最重要的就是搞清楚網(wǎng)絡(luò)各層的神經(jīng)元輸入輸出的數(shù)據(jù)結(jié)構(gòu)(即張量)。如果僅用線性代數(shù)所學(xué)的矩陣,向量來(lái)理解張量,一定會(huì)搞得一頭霧水。因此很有必要搞清楚張量是什么東西。
首先明確:張量最主要的兩個(gè)參數(shù): rank(階,或維數(shù))、shape(形狀)
2.什么是張量
下圖是張量的直觀的示意:張量是標(biāo)量、向量、矩陣的集合和推廣。

3.什么是rank
| rank | 數(shù)學(xué)實(shí)例 | Python 例子 |
|---|---|---|
| 0 | 純數(shù)字(只有大?。?/td> | s=352 |
| 1 | 向量(1個(gè)基本向量) | v = [1.1, 2.2, 3.3] |
| 2 | 矩陣(兩個(gè)基本向量) | m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
| 3 | 數(shù)據(jù)立體(3個(gè)基本向量) | t = [ [[2], [4], [6]] , [[8], [10], [12]] , [[14], [16], [18]] ] |
| n | n個(gè)基本向量 | … |
可以發(fā)現(xiàn):可以數(shù)括號(hào)[ ]的層數(shù)來(lái)確定張量的維數(shù)(階)
什么是基本向量
基本向量(basis vector):幾個(gè)basis vector就是從幾個(gè)方面來(lái)描述一組數(shù)據(jù)。
舉例說(shuō)明:
一維張量:概念和向量完全一樣。圖中的白線就是一個(gè)向量,當(dāng)然了,在三維空間向量有三個(gè)分向量(分別是x方向、y方向、z方向)

二維張量:對(duì)下面這個(gè)長(zhǎng)方形施加一個(gè)力,怎么來(lái)描述?
我們把可以把這個(gè)長(zhǎng)方形就xoy、xoz、yoz三個(gè)平面截下來(lái),之后在每一個(gè)平面上再分析受力情況。
兩個(gè)basis vector出來(lái)了:一個(gè)用來(lái)描述截面方向(這是一個(gè)三維向量);另一個(gè)用來(lái)描述此截面的受力情況(當(dāng)然這也是一個(gè)三維向量)

那么我們可以用作用在yoz平面(此平面的法向量是x軸單位向量),受力的x軸分量用Pxx來(lái)表示,以此推廣到含有9個(gè)元素的矩陣,這就是一個(gè)2維張量。
換句話來(lái)解釋:在一個(gè)三維空間,我們從2個(gè)基本向量來(lái)描述一個(gè)東西,那么這個(gè)張量所含有的元素個(gè)數(shù)應(yīng)該是3的2次方等于9個(gè)。每個(gè)元素能得到2個(gè)基本向量的注釋。這就是一個(gè)2維的張量

三維張量:
繼續(xù)推廣,每個(gè)元素有三個(gè)基本向量注釋。三維的張量形狀就像是疊起來(lái)的矩陣。

最后品一品這句話

4.什么是shape
shape指明每一層有多少個(gè)元素。
比如[2,3,4]是指第一層2個(gè)元素,第二層3個(gè)元素,第三層4個(gè)元素,通過(guò)這個(gè)我們就可以知道這個(gè)張量一共有2 × 3 × 4=24 個(gè)元素。而且它有3層,因此可以知道這個(gè)張量的rank=3
注意:讀取元素,從外括號(hào)往內(nèi)括號(hào)讀
下面這個(gè)代碼也能說(shuō)明問(wèn)題。
import tensorflow as tf # 定義了一個(gè)張量,有6個(gè)元素,設(shè)置他的形狀是[2.3] a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2,3]) with tf.Session() as session: print(session.run(a))
打印的結(jié)果是
[[1 2 3] [4 5 6]]
以上這篇淺談TensorFlow之稀疏張量表示就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在RedHat系Linux上部署Python的Celery框架的教程
這篇文章主要介紹了在RedHat系Linux上部署Python的Celery框架的教程, Celery是一個(gè)并行分布框架,擁有良好的I/O性能,需要的朋友可以參考下2015-04-04
python-OpenCV 實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換成灰度圖和彩圖
今天小編就為大家分享一篇python-OpenCV 實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換成灰度圖和彩圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
python使用正則表達(dá)式匹配txt特定字符串(有換行)
這篇文章主要給大家介紹了關(guān)于python使用正則表達(dá)式匹配txt特定字符串的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python實(shí)現(xiàn)的一個(gè)p2p文件傳輸實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)的一個(gè)p2p文件傳輸實(shí)例,文中用來(lái)解決多臺(tái)服務(wù)器維護(hù)文件同步問(wèn)題,需要的朋友可以參考下2014-06-06
Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)
這篇文章主要介紹了Python利用多線程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng),主要是利用threading.lock()通過(guò)實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法,結(jié)合實(shí)例形式分析了Python針對(duì)代碼行數(shù)的計(jì)算實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下2017-07-07
Keras模型轉(zhuǎn)成tensorflow的.pb操作
這篇文章主要介紹了Keras模型轉(zhuǎn)成tensorflow的.pb操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07

