TensorFlow字面意思——张量的流动,即保持计算节点不变让数据以张量的形式进行流动。张量tensor可以是一个变量/数组/多维数组等,可以想象成一个n维(n-dimensional)的数组、序列或列表。
tensor有三个属性:数据类型、维度(阶/rank)、shape。
Data type/数据类型
你可以为一个张量指定下列数据类型中的任意一个类型:
数据类型 | Python 类型 | 描述 |
|
| 32 位浮点数. |
|
| 64 位浮点数. |
|
| 64 位有符号整型. |
|
| 32 位有符号整型. |
|
| 16 位有符号整型. |
|
| 8 位有符号整型. |
|
| 8 位无符号整型. |
|
| 可变长度的字节数组.每一个张量元素都是一个字节数组. |
|
| 布尔型. |
|
| 由两个32位浮点数组成的复数:实数和虚数. |
|
| 用于量化Ops的32位有符号整型. |
|
| 用于量化Ops的8位有符号整型. |
|
| 用于量化Ops的8位无符号整型. |
阶/rank
Rank:tensor的维数,即张量是几维的数组。(直观上看就是括了几层括号)
如下分别表示0维、1维、2维和3维的张量:
1 #维度为0的标量
[1,2,3] #维度为1,一维向量
[[1,2],[3,4]] #维度为2, 二维矩阵
[[[1,2],[3,4]],[[1,2],[3,4]]] #维度为3,3维空间矩阵
维度要看张量的最左边有多少个左中括号,有n个,则这个张量就是n维张量。
你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量。对于一个二阶张量你可以用语句t[i, j]
来访问其中的任何元素,而对于三阶张量你可以用't[i, j, k]'来访问其中的任何元素。
阶 | 数学实例 | Python 例子 |
0 | 纯量 (只有大小) |
|
1 | 向量(大小和方向) |
|
2 | 矩阵(数据表) |
|
3 | 3阶张量 (数据立体) |
|
n | n阶 (自己想想看) |
|
Shape(形状)
张量的形状以 [D0, D1, … Dn-1] 的形式表示,D0 到Dn 是任意的正整数。
如形状[3,4]表示第一维有3个元素,第二维有4个元素,[3,4]表示一个3行4列的矩阵。
1)在形状的中括号中有多少个数字,就代表这个张量是多少维的张量。
2)形状的第一个元素要看张量最外边的中括号中有几个元素(被最外边的中括号里边的内中括号括起来的所有数据算作一个元素)被逗号隔开,有n1个则这个张量就是n1维的,形状的第一个元素就是n1;
3)形状的第二个元素要看张量中最左边的第二个中括号中有几个被逗号隔开的元素,有n2个则shape的第二个元素就是n2;
4)形状的第二个元素之后的第3,4…n个元素依次类推,分别看第n个中括号中有几个元素即可。
例如:
1 # 形状为[]
[1,2,3] # 形状为[3]
[[1,2],[3,4]] # 形状为[2,2]
[[[1,2],[3,4]],[[1,2],[3,4]]] # 形状为[2,2,2]
参考:
https://blog.csdn.net/dcrmg/article/details/79017146
https://blog.csdn.net/zhujianing1993/article/details/69218962
关于tensor的rank、shape属性对应的api:
import tensorflow as tf
a = tf.constant(5)
# Tensor.shape返回类型为TensorShape
# a.shape等效于a.get_shape()
shape = a.shape.as_list() # 用TensorShape.as_list()将shape值转化为list
print(shape) # 输出: []
rank = a.shape.ndims # 用TensorShape.ndims取得tensor的rank
print(rank) # 输出: 0
b = tf.constant([5])
shape = b.shape.as_list()
print(shape) # 输出: [1]
rank = b.shape.ndims
print(rank) # 输出: 1
c = tf.constant([5, 4, 3])
shape = c.shape.as_list()
print(shape) # 输出: [3]
rank = c.shape.ndims
print(rank) # 输出: 1
d = tf.constant([[5, 4, 3], [2, 1, 0]])
shape = d.shape.as_list()
print(shape) # 输出: [2, 3]
rank = d.shape.ndims
print(rank) # 输出: 2
e = tf.constant([[[5, 4, 3], [2, 1, 0]]])
shape = e.shape.as_list()
print(shape) # 输出: [1, 2, 3]
rank = e.shape.ndims
print(rank) # 输出: 3