Tensorflow基础知识之张量操作

什么是张量

TensorFlow中的Tensor表示张量,其实就是多维数组。在Python中,张量通常存储在NunPy数组中,仅作输入输出来使用;在TensorFlow中,所有的运算都是在张量之间进行。

名称 区别
Python列表(list) 元素可使用不同的数据类型,可以嵌套运用;在内存中离散存放,是一个动态的指针数组,读写效率低,占用内存,且不适合做数值计算
NumPy数组(ndarray) 元素数据类型相同,在内存中连续存放,存储空间小,读写速度快
TensorFlow张量(Tensor) 高速运行于GPU和CPU上,支持CPU、嵌入式等多种计算环境,高速的实现神经网络和深度学习的复杂算法

张量概念的引入是为了方便数据输入,例如将字符串文本,图像、视频等数据数字化,以便后续更容易的处理。可以通俗的作如下理解:

数学实例 Pyhton例子
0阶张量 标量 a=512
1阶张量 矢量(大小和方向) v = [1, 2, 3]
2阶张量 矩阵 n = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
3阶张量 t = [ [ [1], [2], [3] ], [ [4], [5], [6] ], [ [7], [8], [9] ] ]
n阶张量

张量的基本操作

  • tf.constant(value,dtype,shape)函数:创建张量
    其中,value值一般是数字、Python列表和NymPy数组,也可以是布尔型等

  • tf.convert_to_tensor()函数:将数组、列表、数字、布尔型、字符串转换为张量。

  • 判断张量

    • tf.is_tensor()函数:判断数据对象是否为张量(tf方法)
    • isinstance()函数:判断数据对象是否为张量(Python方法)
  • tf.cast(x,dtype)函数:张量数据类型转换

  • 张量元素的数据类型

数据类型 说明 数据类型 说明
tf.int8 8位有符号整数 tf.int16 16位有符号整数
tf.int32 32位有符号整数 tf.int 64位有符号整数
tf.unit8 8位无符号整数 tf.complex64 复数的实部和虚部分别为32位浮点型
tf.float32 32位浮点数 tf.float64 64位浮点数
tf.string 字符串 tf.bool 布尔型
  • 张量相关语法
函数 说明
tf.constant(value,dtype,shape) 创建张量
tf.convert_to_tensor() 转换为张量
tf.zeros(shape,dtype=tf.float32) 创建全0张量
tf.ones(shale,dtype=tf.float32) 创建全1张量
tf.fill(shape,value) 创建元素相同的张量
tf.random.normal() 创建元素值符合正太分布的张量
tf.normal.trunvated_normal(shape,mean,stddev) 创建元素值符合截取正太分布的张量
tf.normal.uniform(shape,minval,maxval,dtype) 创建元素值为整数序列的张量
tf.random.shuffle() 随机打乱
tf.range(start,limit,delta) range函数创建序列

张量的维度变换

  1. 改变张量的形状
    tf.reshape(tensor,shape)函数
tf.reshape(tf.reshape(tf.range(24),[2,3,4]),[4,-1])

表示把0-23这24个数转换成3行4列的二维数组,[4, -1] 表示把二维数组转换成第一维长度为4,-1表示第二维长度根据张量元素总个数和其他维度长度自动推导出来

<tf.Tensor: id=7, shape=(4, 6), dtype=int32, numpy=
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])>

此操作只改变张量数组的视图,在NumPy数组中的存储数据并没有改变。

  1. 多维张量的轴(维度)

张量中轴的用法和NumPy数组中的一样,如图所示:
多维张量的轴轴也可以是负数,表示往后向前索引,例如上图中三维张量的axis的值为也可以是-3,-2,-1

  1. 增加维度
    tf.expand_dlim(tensor,axis),axis表示增加的维度,axis可负
x=tf.expand_dims(tf.constant([1,2]),axis=1)
x

将 shape = (2, ) 的一维张量增加1个维度后 shape = (2, 1)

<tf.Tensor: id=10, shape=(2, 1), dtype=int32, numpy=
array([[1],
       [2]])>
  1. 删除维度
    tf.squeeze(tensor,axis),只能删除长度为1的维度,axis省略时删除所有长度为1的维度
y=tf.squeeze(x,axis=1)
y
<tf.Tensor: id=11, shape=(2,), dtype=int32, numpy=array([1, 2])>

增加维度和删除维度只改变了张量的视图,不会改变张量的存储。

  1. 交换维度
    tf.transpose(a,perm),perm表示轴的顺序,值空时表示转置。
tf.transpose(tf.reshape(tf.range(24),[2,3,4]),perm=[1,<
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值