TensorFlow程序是用张量数据结构来表示所有的数据.你可以把一个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 位有符号整型r. |
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位无符号整型. |
原文:Tensor Ranks, Shapes, and Types 翻译:nb312 |