TensorFlow中什麼是Tensor?
一、Tensor概念
Tensor意思為張量,張量是什麼?張量具有維度,或者可有稱作為他的秩:Rank/Order
我們以陣列為對比,展示張量維度的概念:
在上圖中,當在零維的時候,稱為標量;
當在一維的時候,就是我們經常提的向量;
當在二維的時候,就是我們經常提的矩陣;即Matrix
在多維的時候,就可以稱作n維的張量。
張量的概念是相對與標量,向量,矩陣這一系類概念的拓展
二、Tensor的屬性
Tensor和Pyhton中的Numpy包有很多相似的屬性和用法:
還有很多如device,name,graph等等。
三、常見的Tensor
1.Constant(常量)
Constant是值不能改變的一種Tensor
下面試引用的方法,要注意的是,我們要想輸出const,必須以建立session回話的方式,而不能直接列印
import tensorflow as tf
const = tf.constant(3)
下面是對constant的屬性設定:
constant(
value,
dtpye = None,
shape = None,
name = 'Const',
verify_shape = False
)
2.Variable(變數)
下面是對Variable的使用:
import tensorflow as tf
const = tf.variable
下面是Variable的建構函式
__init__( initial_value = None, trainable =True, collections = None, validate_shape = True, caching_device = None, name = None, variable_def = None, dtype = None, expected_shape = None, import_scope = None, constraint = None )
3.placeholder(佔位符)
先佔住一個固定的位置,等著你之後往裡面新增值的一種Tensor
import tensorflow as tf
const = tf.placeholder
屬性如下:
placeholder(
dtype
shape = None,
name = None
)
官網程式碼例項如下:
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.Session() as sess:
print(sess.run(y)) # ERROR: will fail because x was not fed.
rand_array = np.random.rand(1024, 1024)
print(sess.run(y, feed_dict={x: rand_array})) # Will succeed.
通過tf.float32指定資料型別,shape指定了1024*1024的矩陣;
使用feed_dict進行字典傳參。
4.SparseTensor(稀疏張量)
可以類比稀疏矩陣,稀疏矩陣的概念是:在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分佈沒有規律時,則稱該矩陣為稀疏矩陣;與之相反,若非0元素數目佔大多數時,則稱該矩陣為稠密矩陣。定義非零元素的總數比上矩陣所有元素的總數為矩陣的稠密度。
ensorFlow表示一個稀疏張量,作為三個獨立的稠密張量:indices,values和dense_shape。在Python中,三個張量被集合到一個SparseTensor類中,以方便使用。如果你有單獨的indices,values和dense_shape張量,SparseTensor在傳遞給下面的操作之前,將它們包裝在一個物件中。
具體來說,該稀疏張量SparseTensor(indices, values, dense_shape)包括以下元件,其中N和ndims分別是在SparseTensor中的值的數目和維度的數量:
- indices:density_shape[N, ndims]的2-D int64張量,指定稀疏張量中包含非零值(元素為零索引)的元素的索引。例如,indices=[[1,3], [2,4]]指定索引為[1,3]和[2,4]的元素具有非零值。
- values:任何型別和dense_shape [N]的一維張量,它提供了indices中的每個元素的值。例如,給定indices=[[1,3], [2,4]]的引數values=[18, 3.6]指定稀疏張量的元素[1,3]的值為18,張量的元素[2,4]的值為3.6。
- dense_shape:density_shape[ndims]的一個1-D int64張量,指定稀疏張量的dense_shape。獲取一個列表,指出每個維度中元素的數量。例如,dense_shape=[3,6]指定二維3x6張量,dense_shape=[2,3,4]指定三維2x3x4張量,並且dense_shape=[9]指定具有9個元素的一維張量。
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]]
init方法:
__init__(
indices,
values,
dense_shape
)