tensorflow学习笔记:张量介绍以及张量操作函数

张量(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入门、原理与进阶实战》。

你可能感兴趣的:(tensorflow学习笔记,深度学习,tensorflow,张量)