tensorflow 张量
张量、列表和 ndarray
tensorflow 中的 “Tensor” 表示张量,其实就是多维数组。
- Python 中的列表 list
- NumPy 中的数组对象 ndarray 它们也都可以作为数据的载体
Python 列表(list)
- 元素可以使用不同的数据类型,可以嵌套
- 在内存中不连续存放,是一个动态的指针数组
- 读写效率低,占用内存空间大,不适合做数值计算
numpy 数组(array)
- 元素数据类型相同
- 每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
- 存储空间小,读取和写入速度快在 CPU 中运算,不能够主动检测、利用 GPU 进行运算
tensorflow 张量(tensor) 可以高速运行于 GPU 和 TPU 之上 支持 CPU、嵌入式、单机多卡和多机多卡等多种计算环境高速的实现神经网络和深度学习中的复杂算法。
TensorFlow 的基本运算、参数命名、运算规则、API 的设计等与 NumPy 非常相近
创建张量
张量由 Tensor 类实现,每一个张量都是一个 Tensor 对象
tf.constant() 函数:创建张量
tf.constant(value, dtype, shape)
value:数字/Python 列表/NumPy 数组,最终在 tensor 中被存储为 numpy 数组 dtype:元素的数据类型 shape:张量的形状
参数为小数时,默认为 float32
张量.numpy() 方法得到对应数组
![16151713130378](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151713130378.jpg)
参数为 numpy 数组 numpy 创建浮点数数组时,默认的浮点型是 64
位浮点数。 当使用 NumPy 数组创建张量时,TensorFlow
会接受数组元素的数据类型,使用 64 位浮点数保存数据。 GPU 处理 32
位浮点数快,而且大部分情况下 32 位的京都已经足够了,因此使用 numpy
数组创建时,一般指定 dtype=tf.float32
![16151715477552](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151715477552.jpg)
改变张量中元素的数据类型:tf.cast(tensor_x, dtype)
注意:要从低精度向高精度转换,否则可能会发生数据溢出,结果可能会错
参数为 bool 类型时,非零对应 True:
参数为 string 类型时,存储为字节字符串:
tf.convert_to_tensor() 函数
tf.convert_to_tensor(数组/列表/数字/布尔型/字符串)
![16151727638426](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151727638426.jpg)
特殊张量
全 0 张量: tf.zeros(shape, dtype=tf.float32)
全 1 张量:
tf.ones(shape, dtype=tf.float32)
元素值相同的张量:tf.fill(dims, value)
、tf.constant(value,shape)
![16151837551875](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151837551875.jpg)
判断张量
直接打印
tf.is_tensor() 函数
isinstance()
随机数张量
正态分布
tf.random.normal(shape, mean=0, stddev=1, dtype)
四个参数:维度,均值,标准差,数据类型截断正态分布
tf.random.truncated_normal(shape, mean, stddev, dtype)
- 返回一个截断的正态分布
- 截断的标准是 2 倍的标准差 例如,当均值为 0,标准差为 1 时,使用 tf.truncated_normal,不可能出现区间[-2,2]以外的点使用 f.random_normal(),可能出现[-2,2]以外的点
设置随机种子
tf.randome.set_seed()
函数均匀分布张量
tf.random.uniform(shape,minval,maxval,dtype)
,区间:[minval, maxval)随机打乱
tf.random.shuffle([tensor/list/ndarray])
创建序列
tf.range(start, limit, delta=1, dtype)
小结:创建张量
![16151876857241](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151876857241.jpg)
张量属性
ndim、shape、dtype
或 Tensor 对象的
rank(), shape()、size()
![16151882368946](https://blog-1259556217.cos.ap-chengdu.myqcloud.com/image/16151882368946.jpg)
张量和 numpy 数组
- 在 TensorFlow 中,所有的运算都是在张量之间进行的
- NumPy 数组仅仅是作为输入和输出来使用
- 张量可以运行于 CPU,也可以运行于 GPU 和 TPU
- 而 NumPy 数组只能够在 CPU 中运行