tensorflow模型操作常用函数总结:(三)

数据操作:

                                 函数                                                           描述
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]]

#
#  [[ 8 9 10 11]

#   [ 4 5 6 7]
#   [ 0 1 2 3]]]]

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值