张量生成
博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!
Tensorflow 用 张量(Tensor) 这种数据结构来表示所有的数据。我们可以把 张量(Tensor) 想象成一个 n 维的数组或列表。一个 张量(Tensor)有一个静态类型和动态类型的维数。张量可以在图中的节点之间流通。
1、张量(Tensor):多维数组(列表)。阶:张量的维数(dim)。
张量可以表示 0 阶到 n 阶数组(列表)。
2、阶
在 Tesorflow 系统中,张量的维数来被描述为阶。但是张量的阶和矩阵的阶并不是同一个概念。张量的阶(有时是关于如顺序或度数或者是 n 维)是张量维数的一个数量描述。比如,下面的张量(使用 Python 中 list 定义的)就是 2 阶。
我们可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量。对于一个二阶张量我们可以使用语句t[i, j] 来访问其中的任何元素。而对于三阶张量我们可以用t[i, j, k] 来访问其中的任何元素。
3、形状
Tensorflow 文档中使用了三种记号来描述张量的维度:阶、形状、维数。下标展示了他们之间的关系:
形状可以通过 Python 中的整数列表或元组(int list 或 tuple)来表示,也或者用 tf.shape 属性来表示。
4、数据类型
(1)有符号整型、
(2)无符号整型
(3)浮点型
(4)字符串型
(5)布尔型
(6)复数型
5、如何创建一个 Tensor
(1)创建一个张量
tf.constant(张量内容, dtype=数据类型(可选))
示例:
创建一个一阶张量,里面有两个元素 1 5,指定数据类型是 64 位整型,赋值给 a。打印出 a,打印出 a 的数据类型,打印出 a 的形状。
运行结果:
直接打印 a 会输出张量的所有信息,包括:
a、张量的内容[1 5]、
b、张量的形状shape=(2,)。张量的形状看 shape 的逗号隔开了几个数字,逗号隔开了几个数字,这个张量就是几维的。这个例子中,shape 括号中用逗号隔开了一个数字,说明是一维张量。这个数字是 2,说明这个张量里有 2 个元素,也就是这里的数值 1 和 数值 5。
c、张量的数据类型dtype=int64
(2)将 numpy 的数据类型转换为 Tensor 数据类型
tf.convert_to_tensor(数据名, dtype=数据类型(可选))
运行结果:
(3)创建全为 0 的张量
tf.zeros(维度)
示例:
tf.zeros([2, 3]) 创建了一个二维张量,第一个维度有两个元素,第二个维度有三个元素,元素的内容全是 0。
运行结果:
(4)创建全为 1 的张量
tf.ones(维度)
示例:
tf.ones(4) 创建了一个一维张量,里面有 4 个元素,内容全是 1。
运行结果:
(5)创建全为指定值的张量
tf.fill(维度, 指定值)
示例:
tf.fill([2, 2], 9) 创建了一个两行两列的二维张量,第一个维度有两个元素,第二个维度有两个元素,内容都是 9。
运行结果:
(6)维度:
a、一维:直接写个数。
如果是一维的,括号里直接写数字。比如 tf.ones(4) 这里写 4 表示只有一个维度,这个维度里有 4 个元素。
b、二维:用 [行, 列]
如果是二维的,方括号里写 几行,几列。比如 tf.zeros([2, 3]) 里的 2 行 3 列。
c、多维:用 [n, m, j, k, ...]
如果是多维的,方括号里写每个维度的元素个数,中间用逗号隔开。
(7)生成正态分布的随机数,默认均值为 0,标准差为 1
tf.random.normal(维度, mean=均值, stddev=标准差)
示例:
tf.random.normal 生成两行两列的张量,里面的元素符合以 0.5 为均值,1 为标准差的分布。
运行结果:
(8)生成截断式正态分布的随机数
tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
在 tf.random.truncated_normal 中,如果随机生成数据的取值在 () 之外则重新进行生成,保证了生成值在均值附近。
:均值,
:标准差
标准差计算公式:
示例:
tf.random.truncated_normal 生成两行两列的张量,里面的元素符合以 0.5 为均值,1 为标准差的随机数。而且这些元素都在两倍标准差之内,数据更向均值 0.5 集中。
运行结果:
(9)生成均匀分布随机数 [minval, maxval)
tf.random.uniform(维度, minval=最小值, maxval=最大值)
注意: [minval, maxval) 是左闭右开区间。
示例:
生成两行两列的张量,其中的每个元素都符合在 0 和 1 之间的平均分布。
运行结果: