张量tensor包含type,rank和shape三个属性
tensor类型
张量类型 | python类型 |
---|---|
DT_FLOAT | tf.float32 |
DT_DOUBLE | tf.float64 |
DT_INT64 | tf.int64 |
DT_INT32 | tf.int32 |
DT_INT16 | tf.int16 |
DT_INT8 | tf.int8 |
DT_STRING | tf.string |
DT_BOOL | tf.bool |
DT_COMPLEX64 | tf.complex64 |
rank指维度,张量形状可以通过python中的整数列表或元组表示。
常用操作
1、类型转换
tf.string_to_number(string_tensor,out_type,name)
tf.to_double(x,name='ToDouble')
tf.to_float(x,name='ToFloat')
tf.to_int32(x,name='ToInt32')
tf.to_int64(x,name='ToInt64')
tf.cast(x,dtype,name=None) 将x(或x的values)的类型转换为指定类型
2、数值操作
tf.ones(shape,type) 按照指定形状,生成值为1的张量
tf.zeros(shape,type)生成值为0的向量
tf.ones_like(input) 生成和输入张量形状相同 的值为1的张量
tf.zeros_like(input)
tf.fill(shape,value) 生成指定形状值为value的张量
tf.constant(value,shape) 生成常量
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype , seed,name) 生成正态分布随机数,均值mean,标准差stddev
tf.truncated_normal(shape,mean,stddev,dtype,seed,name) 截断正态分布随机数,只保存 [mean-2*]
tf.random_uniform(shape,minval,maxval) 均匀分布随机数
tf.random_crop(value,size)将输入值按照size尺寸剪辑
tf.set_random_seed(seed) 设置随机数种子
tf.linespace(start,stop,num) 产生num个等差数列,在start-stop范围中
tf.range(start,limit,delta=1) 在start 和limit中产生步长为delta的等茶水列,不包括limit
3、形状操作
tf.shape(input) 返回张量的shape
tf.size(input) 返回张量中元素的个数
tf.rank(input) 返回张量的阶数
tf.reshape(input,shape) 将张量转换为目标形状
tf.expand_dims(input,dim) 插入维度1到张量中
tf.squeeze(input,dim) 去除指定维度,去除的维度必须是1
4、数据操作
tf.slice(input,begin,size) 对输入数据切片
tf.split(value,num_or_size_splits) 沿某一维度将张量分离
tf.concat(dim,values)沿某一维度连接张量 ,指定维度的数组会合并
tf.stack(input,axis=0) 在指定维度拼接张量,指定维度会变成数组,也就是额外套一层;t1 =[[1,2,3],[4,5,6]] ;t2 =[[1,2,3],[4,5,6]],tf.stack([t1,t2],axis=1) =[[[1,2,3],[1,2,3]],[[4,5,6],[4,5,6]]]
tf.one_hot(indices,depth,on_value,off_value,axis=None) 生成符合onehot编码的张量,indices要生成的张量,depth长度的数组中哪个索引值为onehot的值,onehot值为多少,非onehot值为多少,axis-1时,生成的shape为[indices长度,depth],0时为[depth,indices,,1时为pdepth,batch,indices;
indices = [0,2,-1,4]
depth = 3
on_value =1
off_value = 0
axis = -1
#axis取 -1时,张量时0时的转置
t= tf.one_hot(indices=indices,depth= depth,on_value=on_value,off_value=off_value)
#tf开头的代码必须放到session的run方法中
session = tf.Session()
print(session.run(t))
[[1 0 0]
[0 0 1]
[0 0 0]
[0 0 0]]
5、算术操作
tf.assign(x,y) 令x=y
tf.add(x,y) 求和
tf.subtract(x,y) 减法
tf.multiply(x,y) 乘法
tf.divide(x,y) 除法
tf.mod(x,y)取模
tf.abs(x)求绝对值
tf.negative(x) 取负值
tf.inv(x) 对取反操作
tf.square(x) 计算平方
tf.round(x) 舍入最近的整数
tf.sqr(x) 开根号
tf.pow(x,y) 幂次方计算
tf.exp(x) 计算e的x次方
tf.log(x)计算e的ln
tf.maximum(x,y)最大值
tf.cond(pred,true_fn,false_fn) 满足条件执行f1,否则执行f2
6、矩阵相关操作
tf.diag(digonal) 返回一个给定对角值的对角矩阵
tf.diag_part(tens) 与上面相反,获取矩阵的对角值 的列表
session = tf.Session()
tens =tf.diag([1,2,44,12])
td = tf.diag_part(tens)
print(session.run(td))
td = tf.trace(tens) 二维矩阵对角线之和
tf.transpose(a,perm) 对张量a进行转置,按照指定维度
tf.reverse(tensormduns) 沿着指定的维度对输入进行反转
tf.matmul(a,b) 矩阵相乘
tf.matrix_determinant(input) 返回方阵的行列式
tf.matrux_inverse(input,adjoint=None) 求方阵的逆矩阵,adjoint为true时,计算输入共轭矩阵的逆矩阵
tf.cholesky(input) 对输入方阵cholesky分解
tf.natrux_solve(matrux,rhs,adjoint)求解矩阵方程,返回矩阵变量
7、复数操作
tf.complex(rea,imag) 将实属转换为复数形式
tf.complex_abs(x) 计算复数的绝对值
tf.conj(input) 计算共轭复数
tf.imag(input) 提取虚部
tf.real(input)提取实部
tf.fft(input) 计算一维离散傅里叶变换
8、规约计算
tf.reduce_sum(input,axis,keep_dims,name,reduction_indices) 计算输入tensor的和,
tf.reduce_prod(input,axis,keep_dims =False,name=none,reduction) 计算输入tensor的乘积
tf.reduce_min
tf.reduce_max
tf.reduce_mean
tf.reduce_all 对tensor的各个元素求逻辑“与”
tf.reduce_any 求逻辑或
9、序列比较和索引提取
tf.argmin(input) 返回input最小值的索引、
tf.argmax(input)返回input最大值的索引
tf.setdiff1d(x,y) 返回x,y中不同值的索引
tf.where(condition,x,y) 如果x,y都不为null,则返回condition为true的x的值,false时y的值,都为null时,返回cond中true的坐标列表
tf.unique(x) 返回去重后的元组
tf.invert_permutation(x) 把x中元素的值当作索引返回新的张量
tf.random_shuffle(input ) 沿着input第一维进行随机重新排列