1. 程式人生 > >TensorFlow中什麼是Tensor?

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
)