x = tf.placeholder(tf.float32, [None, 784])
x
isn't a specific value. It's a placeholder
, a value that we'll input when we ask TensorFlow to run a computation. We want to be able to input any number of MNIST images, each flattened into a 784-dimensional vector. We represent this as a 2-D tensor of floating-point numbers, with a shape [None, 784]
. (Here None
means that a dimension can be of any length.)
TensorFlow用張量這種數據結構來表示所有的數據.你可以把一個張量想象成一個n維的數組或列表.一個張量有一個靜態類型和動態類型的維數.張量可以在圖中的節點之間流通.
階
在TensorFlow系統中,張量的維數來被描述為階.但是張量的階和矩陣的階並不是同一個概念.張量的階(有時是關於如順序或度數或者是n維)是張量維數的一個數量描述.比如,下面的張量(使用Python中list定義的)就是2階.
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
你可以認為一個二階張量就是我們平常所說的矩陣,一階張量可以認為是一個向量.對於一個二階張量你可以用語句t[i, j]
來訪問其中的任何元素.而對於三階張量你可以用't[i, j, k]'來訪問其中的任何元素.
階 | 數學實例 | Python 例子 |
---|---|---|
0 | 純量 (只有大小) | s = 483 |
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階 (自己想想看) | .... |
形狀
TensorFlow文檔中使用了三種記號來方便地描述張量的維度:階,形狀以及維數.下表展示了他們之間的關系:
階 | 形狀 | 維數 | 實例 |
---|---|---|---|
0 | [ ] | 0-D | 一個 0維張量. 一個純量. |
1 | [D0] | 1-D | 一個1維張量的形式[5]. |
2 | [D0, D1] | 2-D | 一個2維張量的形式[3, 4]. |
3 | [D0, D1, D2] | 3-D | 一個3維張量的形式 [1, 4, 3]. |
n | [D0, D1, ... Dn] | n-D | 一個n維張量的形式 [D0, D1, ... Dn]. |
形狀可以通過Python中的整數列表或元祖(int list或tuples)來表示,也或者用TensorShape
class.
數據類型
除了維度,Tensors有一個數據類型屬性.你可以為一個張量指定下列數據類型中的任意一個類型:
數據類型 | Python 類型 | 描述 |
---|---|---|
DT_FLOAT |
tf.float32 |
32 位浮點數. |
DT_DOUBLE |
tf.float64 |
64 位浮點數. |
DT_INT64 |
tf.int64 |
64 位有符號整型. |
DT_INT32 |
tf.int32 |
32 位有符號整型. |
DT_INT16 |
tf.int16 |
16 位有符號整型. |
DT_INT8 |
tf.int8 |
8 位有符號整型. |
DT_UINT8 |
tf.uint8 |
8 位無符號整型. |
DT_STRING |
tf.string |
可變長度的字節數組.每一個張量元素都是一個字節數組. |
DT_BOOL |
tf.bool |
布爾型. |
DT_COMPLEX64 |
tf.complex64 |
由兩個32位浮點數組成的復數:實數和虛數. |
DT_QINT32 |
tf.qint32 |
用於量化Ops的32位有符號整型. |
DT_QINT8 |
tf.qint8 |
用於量化Ops的8位有符號整型. |
DT_QUINT8 |
tf.quint8 |
用於量化Ops的8位無符號整型. |