TensorFlow中的张量(tensor)

可以先看看张量的官方介绍:

在tensorflow程序中所有的数据都通过张量的形式来表示。TensorFlow 中的核心数据单位是张量。张量是对矢量和矩阵向潜在的更高维度的 泛化。对内,TensorFlow 将张量表现为基本数据类型的 n 维数组。 其中零阶张量表示标量(scalar)也就是一个数;一阶张量为向量,也就是一维数组;n阶张量可以理解为一个n维数组。 但张量的实现并不是直接采用数组的形式,它只是对TensorFlow中运算结果的引用。在张量中并没有保存数字,它保存的是如何得到这些数字的计算过程。  

以下是主要的特殊张量:
  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor
除  tf.Variable  以外,张量的值不可变,这意味着在单一执行的情况下,张量只有一个值。然而,同一张量的两次评估可能会返回不同的值;例如,该张量可以是从磁盘读取数据的结果,或是生成随机数的结果。记住这一点,运行每一次session的时候,张量所拿到的值可能是不一样的,因为它在run的过程中重新赋值了。

一个张量主要有以下属性:
  • 形状(shape)
  • 类型(type),例如 float32,int32 或 string
数据类型
你可以为一个张量指定下列数据类型中的任意一个类型:
数据类型
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位无符号整型.

阶(rank)
在TensorFlow系统中,张量的维数来被描述为阶
比如,下面的张量(使用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
形状为 [5] 的 1 维张量。
2
[D0, D1]
2-D
形状为 [3, 4] 的 2 维张量。
3
[D0, D1, D2]
3-D
形状为 [1, 4, 3] 的 3 维张量。
n
[D0, D1, ... Dn-1]
n-D
形状为 [D0, D1, ... Dn-1] 的张量。

形状(shape)
张量的形状是每个维度中元素的数量, 形状(shape)不能认为它是一个元组(尽管写法一样)。
t = tf.constant([[[ 1 , 1 , 1 ], [ 2 , 2 , 2 ]], [[ 3 , 3 , 3 ], [ 4 , 4 , 4 ]]])
tf.shape(t)   # (2, 2, 3)
那么第一个 2是指[ [1, 1, 1], [2, 2, 2]] 还有 [[3, 3, 3], [4, 4, 4]], 共有2个组合, 第二个 2是指[1, 1, 1], [2, 2, 2]这个组合还有 [[3, 3, 3], [4, 4, 4]]这个组合。
3就是[1, 1, 1]这个列表里面有3个元素了。

cool_numbers  = tf. Variable ([ 3.14159 , 2.71828 ], tf.float32) #1阶张量,共有2个元素,所以shape是(2)
linear_squares = tf. Variable ([[ 4 ], [ 9 ], [ 16 ], [ 25 ]], tf.int32) #2阶张量,shape是(4,1)
my_image = tf.zeros([ 10 , 299 , 299 , 3 ]) #4阶张量,shape是( 10 , 299 , 299 , 3 ),其实zeros里面的参数就是一个shape(不要认为它是一个值列表,这跟用Variable创建一个张量参数不一样 )。


猜你喜欢

转载自blog.csdn.net/chinagreenwall/article/details/80431275
今日推荐