数据操作:
函数 | 描述 |
tf.slice(input,begin,size,name=None) | 对输入数据input进行切片操作,begin与size可以为list类型。要求begin与size的值必须一一对应,并且begin中每个值都要大于等于0且小于等于size中对应的值。例如: t=[[[1,1,1],[2,2,2],[3,3,3],[4,4,4]],[[5,5,5],[6,6,6]]] slicet1 = tf.slice(t.[1,0,0],[1,1,3]) slicet2 = tf.slice(t,[1,0,0],[1,2,3]) slicet3 = tf.slice(t,[1,0,0],[2,1,3]) sess = tf.Session(), print(sess.run(slicet1)) #输出 [[[3 3 3]]] print(sess.run(slicet2)) #输出 [[[3 3 3] [4 4 4 ]]] print(sess.run(slicet3)) #输出 [[[3 3 3]] [[5 5 5 ]]] |
tf.split(value,num_or_size_splits,axis=0, num=None,name='split) | 沿着某一维度将tensor分离为num_or_size_splits,Value是一个shape为[5,30]的张量 #沿着第一列将value按[4,15,11]分成3个张量 split0,split1,split2=tf.split(value,[4,15,11],1) tf.shape(split0) ==> [5,4] tf.shape(split1) ==> [5,15] tf.shape(split2) ==> [5,11] |
tf.concat(concat_dim,values,name='concat') | 沿着某一维度连接tensor t1 = [[1,2,3],[4,5,6]] t2 = [[7,8,9],[10,11,12]] tf.concat([t1,t2],0) ==>[[1,2,3],[4,5,6],[7,8,9],[10,11,12]] tf.concat([t1,t2],1) ==>[[1,2,3,7,8,9],[4,5,6,10,11,12]] 如果想沿着Tensor一新轴连接打包,则可以: tf.concat(axis,[tf.expand_dims(t,axis) for t in tensors]) 等同于tf.stack(tensors,axis=axis) |
tf.stack(imput,axis=0) | 将两个N维张量列表沿着axis轴组合成一个沿着axis轴组合成一个N+1维的张量: tensor=[[1,2,3],[4,5,6]] tensor2=[[10,20,30],[40,50,60]] tf.stack([tensor,tensor2]) =>[[[1 2 3] [4 5 6]] [[10 20 30] [40 50 60]]] tf.stack([tensor,tensor2],axis=1) =>[[[1 2 3], [10 20 30]] [[4 5 6][40 50 60]]] |
tf.unstack(value,num=None,axis=0,name='unstack') | 将输入value按照指定的行或列进行拆分,并输出含有num个元素的列表(list) axis=0表示按行拆分,axis=1表示按列拆分。num为输出list的个数,必须与与预计输出的个数相等,否则会报错。可忽略这个参数。 tensor=[[1,2,3],[4,5,6]] tf.unstack(tensor) => [array([1,2,3]),array([4,5,6])] tf.unstack(tensor,axis=1) =>[array([1,4]),array([2,5]),array([3,6])] # tensor.shape=[2,3],axis=0,就是分成2个。axis=1就是分成3个。 # ten2.shape=[2,3,4],axit=2,就是分成4个。 |
tf.gather(params,indices,validate_indices=None, name=None) | 合并索引indices所指示params中的切片 y=tf.constant([0.,2.,-1.]) t=tf.gather(y,[2,0]) sess=tf.Session() t2=sess.run([t]) print(t2) #输出[array([-1.,0.],dtype=tf.float32)] |
tf.one_hot(indices,depth,on_value=None,off_value= None,axis=None,dtype=None,name=None) | 生成符合onehot编码的张量。 indices:要生成的张量 depth:在depth长度的数组中,哪个索引的值为onehot值。 on_value:为onehot值时,该值为多少。 off_value:非onehot值时,该值为多少。 Axis为-1时生成的shape为[indices长度,depth],为0时shape为[depth,indices长度]。还可以是1,是指在类似时间序列(三维度以上)情况下,以时间序列优先而非batch优先,即[depth,batch,indices长度](这里的indices长度可以当成样本中的feature特征维度),例如:indices=[0,2,-1,1] depth=3 on_value=5.0 off_value=0.0 axis=-1
t=tf.one_hot(indices,depth,on_value,off_value,axis) sess=tf.Session() print(sess.run(t))
则输出如下: [[5. 0. 0.] #0 [0. 0. 5.] #2 [0. 0. 0.] #-1 [0. 5. 0.]] #1 |
tf.count_nonzero(input_tensor,axis=None,keep_dim =False,dtype=dtype.int64,name=None, reduction_indices=None) | 统计非0个数 |
算术运算函数:
函数 | 描述 |
tf.assign(x,y,name=None) | 令x=y |
tf.add(x,y,name=None) | 求和 |
tf.subtract(x,y,name=None) | 减法 |
tf.multiply(x,y,name=None) | 乘法 |
tf.divide(x,y,name=None) | 除法,也可以使用tf.div函数 |
tf.mod(x,y,name=None) | 取模 |
tf.abs(x,name=None) | 求绝对值 |
tf.negative(x,name=None) | 取负(y=-x) |
tf.sign(x,name=None) | 返回输入x的符号。如果x小于0,则返回-1;如果x=0,则返回0;如果x大于0,则返回-1 |
tf.inv(x,name=None) | 对取反操作 |
tf.square(x,name=None) | 计算平方(y=x*x = x^{1/2}) |
tf.round(x,name=None) | 舍入最接近的整数。例如:a=[0.9,2.5,2.3,1.5,-4.5] tf.round(a) == > [1.0,2.0,2.0,2.0,-4.0] 如果需要真正的四舍五入,可以用tf.int32类型强制转换 |
tf.sqrt(x,name=None) | 开根号(y=tf.sqrt{x} = x^{1/2}) |
tf.pow(x,y,name=None) | 幂次方计算。例如: x=[[2,2],[3,3]] y=[[8,16],[2,3]] tf.pow(x,y) ==>[[256,65536],[9,27]] #[2的2次方,2的16次方],[3的2次方,3的3次方] |
tf.exp(x,name=None) | 计算e的次方 |
tf.log(x,name=None) | 计算log,一个输入计算e的ln,两输入以第二输入为底 |
tf.maximum(x,y,name=None) | 返回最大值(x>y? x:y) |
tf.minimum(x,y,name=None) | 返回最小值(x<y ? x:y) |
tf.cos(x,name=None) | 三角函数cosine |
tf.sin(x,name=None) | 三角函数sine |
tf.tan(x,name=None) | 三角函数tan |
tf.atan(x,name=None) | 三角函数ctan |
tf.cond(pred,true_fn=None,false_fn=None,strict=False, name=None,fn1=None,fn2=None) | 满足条件就执行fn1,否则执行fn2.例如: x = tf.constant(2) y = tf.constant(5) def f1(): return tf.multiply(x,17) def f2(): return tf.add(y,23) r = tf.cond(tf.less(x,y),f1,f2) 则r的值为34 |
矩阵相关的运算:
矩阵操作函数
操作 | 描述 |
tf.diag(diagonal,name=None) | 返回一个给定对角值的对角tensor。 diagonal = [1,2,3,4] tf.diag(diagonal)会得到如下矩阵: [[1,0,0,0] [0,2,0,0] [0,0,3,0] [0,0,0,4]] |
tf.diag_part(input,name=None) | 功能与上面相反 |
tf.trace(x,name=None) | 求一个二维Tensor足迹,即对角值diagonal之和 |
tf.transpose(a,perm=None,name='transpose') | 让输入a按照参数perm指定的维度顺序进行转置操作。如果不设定perm,默认是一个全转置。例如: t = [[1,2,3],[4,5,6]] tt = tf.transpose(t) #等价于tt = tf.transpose(t,[1,0]) sess = tf.Session() print(sess.run(tt)) #将原有shape[2,3]中的第1和第2维度顺序颠倒,变为新的shape[3,2] 则输出如下: [[1 4] [2 5] [3 6]] |
tf.reverse(tensor,dims,name=None) | 沿着指定的维度对输入进行反转。其中,dims为列表,元素含义为指向输入shape的索引。例如: t = [[[[0,1,2,3], [4,5,6,7], [8,9,10,11]], [[12,13,14,15], [16,17,18,19], [20,21,22,23]]]] print(np.shape(t))#输出[1,2,3,4] dim=[3] #dim为tshape中的索引,3就代表shape中的最后一个值4。同理,使用-1页可以 rt = tf.reverse(t,dim) #进行反转操作 sess = tf.Session() print(sess.run(rt)) #输出反转后的结果为: #[[[[3,2,1,0], #[7,6,5,4,], #[11,10,9,8]], #[[15,14,13,12], #[19,18,17,16], #[23,22,21,20]]]] rt = tf.reverse(t,[1,2]) #也可以同时按照多个轴反转 |
tf.reverse(tensor,dims,name=None) | print(sess.run(rt)) #按照shape中1、2的索引指向的值为2、3,基于这两个维度反转输出的结果为: #[[[[20 21 22 23] # [16 17 18 19] # [12 13 14 15]] # # [ 4 5 6 7] |
tf.matmul(a,b,transpose_a=False, transpose_b=False,a_is_sparse=False, b_is_sparse=False,name=None) | 矩阵相乘 |
tf.matrix_determinant(input,name=None) | 返回方阵的行列式 |
tf.matrix_inverse(input,adjoint=None, name=None) | 求方阵的逆矩阵,adjoint为True时,计算输入共轭矩阵的逆矩阵 |
tf.cholesky(input,name=None) | 对输入方阵cholesky分解,即把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解A=LL ^ T |
tf.matrix_solve(matrix,rhs,adjoint=None, name=None) | 求解矩阵方程,返回矩阵变量。其中,matrix为矩阵变量的系数,,rhs为矩阵方程的结果。例如: 2x +3y = 12 x + y = 5 代码可以写为: sess = tf.InteractiveSession() a = tf.constant([[2.,3.],[1.,1.]]) print(tf.matrix_solve(a,[[12.],[5.]]).eval()) #输出方程中x和y的解 #[[3.00000024] #[1.99999988]] #即 x = 3, y = 2 |