一、创建张量
1. 从Numpy,List 对象创建
Numpy Array 数组和Python List 是Python 程序中间非常重要的数据载体容器,很多数
据都是通过Python 语言将数据加载至Array 或者List 容器,再转换到Tensor 类型,通过
TensorFlow 运算处理后导出到Array 或者List 容器,方便其他模块调用。
通过 tf.convert_to_tensor
可以创建新Tensor,并将保存在Python List 对象或者Numpy Array 对象中的数据导入到新Tensor 中:
需要注意的是,Numpy 中浮点数数组默认使用64-Bit 精度保存数据,转换到Tensor 类型时精度为tf.float64,可以在需要的时候转换为tf.float32 类型。
实际上,tf.constant()
和tf.convert_to_tensor()
都能够自动的把Numpy 数组或者Python List 数据类型转化为Tensor 类型,这两个API 命名来自TensorFlow 1.x 的命名习惯,在 TensorFlow 2 中函数的名字并不是很贴切,使用其一即可
2. 创建全0,全1张量
通过tf.zeros()
和tf.ones()
即可创建任意形状全0 或全1 的张量。例如,创建为0 和为1 的标量张量:
创建全0和全1的向量
创建全0的矩阵:
通过tf.zeros_like
, tf.ones_like
可以方便地新建与某个张量shape 一致,内容全0 或全1的张量。例如,创建与张量a 形状一样的全0 张量:
二、创建自定义数值张量
除了初始化为全0,或全1 的张量之外,有时也需要全部初始化为某个自定义数值的
张量,比如将张量的数值全部初始化为-1 等。
通过 tf.fill(shape, value)
可以创建全为自定义数值value 的张量。
例如,创建元素为-1的标量:
三、创建已知分布的张量
1. 创建正态分布
通过 tf.random.normal(shape, mean=0.0, stddev=1.0)
可以创建形状为shape,均值为mean,标准差为stddev 的正态分布𝒩(𝑚𝑒𝑎𝑛, 𝑠𝑡𝑑𝑑𝑒𝑣2)。
例如,创建均值为0,标准差为1的正太分布:
创建均值为1,标准差为2 的正太分布:
2. 创建均匀分布
通过tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32)
可以创建采样自
[𝑚𝑖𝑛𝑣𝑎𝑙, 𝑚𝑎𝑥𝑣𝑎𝑙]区间的均匀分布的张量。
例如创建采样自区间[0,1],shape 为[2,2]的矩阵:
创建采样自区间[0,10],shape 为 [2,2]的矩阵:
如果需要均匀采样整形类型的数据,必须指定采样区间的最大值maxval 参数,同时制定数据类型为tf.int*
型:
四、创建序列
在循环计算或者对张量进行索引时,经常需要创建一段连续的整形序列,可以通过
tf.range()函数实现。
tf.range(limit, delta=1)
可以创建[0, 𝑙𝑖𝑚𝑖𝑡)之间,步长为delta 的整形序列,不包含limit 本身。
例如,创建0~9,步长为1 的整形序列:
创建0~9,步长为2 的整形序列:
通过tf.range(start, limit, delta=1)
可以创建[𝑠𝑡𝑎𝑟𝑡, 𝑙𝑖𝑚𝑖𝑡),步长为delta 的序列,不包含limit本身: