张量(tensor)
tensorflow程序使用tensor数据结构来代表所有的数据,计算图中,操作间传递的数据都是tensor。
tensor堪为一个n维的数组或列表,每个tensor中包含类型(type)、阶(rank)和形状(shape)。
tensor类型
tensor类型 | python类型 | 描述 |
---|---|---|
DF_FLOAT | tf.float32 | 32位浮点数 |
DF_DOUBLE | tf.float64 | 61为浮点数 |
DF_INT64 | tf.int64 | 64位有符号整数 |
DF_INT32 | tf.int32 | 32位有符号整数 |
DF_INT16 | tf.int16 | 16位有符号整数 |
DF_INT8 | tf.int8 | 8位有符号整数 |
DF_UINT8 | tf.uint8 | 8位无符号整数 |
DT_STRING | tf.string | 可变长度的字节数组,每一个张量元素都是一个字节数组 |
DT_BOOL | tf.bool | 布尔型 |
DT_COMPLEX64 | tf.complex64 | 有两个32位浮点数组成的复数:实数和虚数。 |
阶(rank)
tensor的阶表示维度,例如:[[1,2,3],[4,5,6],[7,8,9]]表示二阶张量。
注意:这个阶与矩阵的阶不一样,上面的例子为3阶矩阵,但是他是一个2阶的张量。
形状(shape)
用于秒速张量内部的组织关系。a=[[1,2,3],[4,5,6]]的形状为(2,3)。
对张量的操作函数
对张量的操作主要分为:
- 类型变换
- 数值操作
- 形状变换
- 数据操作
下面记录一些常用的对张量进行操作的函数。
类型转换
函数 | 描述 |
---|---|
tf.string_to_number(string_tensor,out_type=None,name=NOne) | 字符串转为数字 |
tf.to_double(x,name=“ToDouble”) | 转为64位浮点类型 |
tf.to_float(x,name=“ToFloat”) | 转为32位浮点类型 |
tf.to_int32(x,name=“ToInt32”) | 转为32位整型 |
tf.to_int64(x,name=“ToInt64”) | 转为64位整型 |
tf.cast(x,dtype,name=None) | 将x的类型转成dtype指定的类型 |
数值操作
函数 | 描述 |
---|---|
tf.ones(shape,dype) | 按指定类型与形状生成值为1的张量 |
tf.zeros(shape,dype) | 按指定类型与形状生成值为0的张量 |
tf.ones_like(input) | 生成和输入张量一样形状和类型的1 |
tf.zeros_like(input) | 生成和输入张量一样形状和类型的0 |
tf.fill(shape,value) | 为指定形状填值 |
tf.constant(value,shape) | 生成常量 |
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None) | 正态分布随机数,均值为mean,标准差为stddev。 |
tf.truncated_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None) | 截断正态分布随机数,均值为mean,方差为stddev,只保留[mean-2stddev,mean+2stddev] |
tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None) | 均匀分布随机数,范围为[minval,maxval] |
tf.random_crop(value,size,seed=None,name=None) | 将输入值value按照size尺寸随机剪辑 |
tf.set_random_seed(seed) | 设置随机种子 |
tf.linspace(start,stop,num,name=None) | 在[start,stop]范围内产生num个数的等差数列 |
tf.range(start,limit=None,delta=1,name=“range”) | 在[start,limit]内以步长delta产生等差数列 |
形状变换
函数 | 描述 |
---|---|
tf.shape(input,name=None) | 返回一个张量,棋值为输入参数的shape。 |
tf.size(input,name=None) | 返回一个张量,其内容为输入数据的元素数量 |
tf.rank(input,name=None) | |
tf.reshpe(input,shape,name=None) | 将原有输入数据的shape按照指定形状进行变化,生成一个新的张量 |
tf.expand_dims(input,dim,name=None) | 插入维度1进入一个tensor |
tf.squeeze(input,dim,name=None) | 将dim指定的维度去掉1,dim必须为1,不为1会报错 |
数据操作
函数 | 描述 |
---|---|
tf.slice(input,begin,size,name+None) | 对输入数据input进行切片操作,begin与size可以为list类型,要求begin与size的值必须一一对应,并且begin中每个值都是大于等于0且小于size中对应的值 |
tf.split(value,num_or_size_splits,axis=0,num=NOne,name=“split”) | 沿着某一维度将tensor分离为num_or_size_splits |
tf.concat(cconcat,dim,values,name-“comcat”) | 沿着某一维度连接tensor |
tf.stack(input,axis=0) | 将两个N维张量列表沿着axis轴组合成一个N+z维的张量 |
tf.unstack(value,num=NOne,axis=0,name=“unstack”) | 将输入value按照指定的行或列进行拆分,并输出含有num个元素的列表,axis为0表示按行拆分,axis=1表示按列拆分 |
tf.gather(params,indices,validate_indices=None,name=None) | 合并索引indices所指示params中的切片 |
tf.one_hot(indices,depth,on_value=NOne,off_calue=None,axis=None,dtype=None,name=None) | 生成独热编码的张量 |
tf.count_nonzero(input_tensor,axis=None,keep_dims=False,dtype=dtype.int64,name=None,reduction_indices=None) | 统计非零个数 |
为了更好地学习,加深对张量操作印象以及方便查询,特地将一些常用的函数加入到个人笔记中来。如果发现那里存在错误,欢迎大家在评论区进行评论、留言。
参考:李金洪老师的《深度学习之TensorFlow入门、原理与进阶实战》。