TensorFlow中的张量(tensor)

匿名 (未验证) 提交于 2019-12-03 00:19:01
可以先看看张量的官方介绍:

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

以下是主要的特殊张量:
  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor
tf.Variable

一个张量主要有以下属性:
  • 形状(shape)
  • 类型(type),例如 float32,int32 或 string

阶(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]]])
# (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个元素了。

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创建一个张量参数不一样)。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!