歡迎您光臨本站 註冊首頁

Tensorflow tensor 數學運算和邏輯運算方式

←手機掃碼閱讀     ml5rwbikls @ 2020-07-01 , reply:0

一、arthmetic 算術操作(+,-,*,/,Mod)

(1)tensor-tensor操作(element-wise)

  #兩個tensor 運算  #運算規則:element-wise。即c[i,j,..,k]=a[i,j,..,k] op b[i,j,..,k]  ts1=tf.constant(1.0,shape=[2,2])  ts2=tf.Variable(tf.random_normal([2,2]))  sess.run(tf.global_variables_initializer())  #以ts1和ts2為例:     #(1)加法+  ts_add1=tf.add(ts1,ts2,name=None)  ts_add2=ts1+ts2    #二者等價  #(2)減法-  ts_sub1=tf.subtract(ts1,ts2,name=None)  ts_sub2=ts1-ts2    #二者等價  #(3)乘法*  ts_mul1=tf.multiply(ts1,ts2,name=None)  ts_mul2=ts1*ts2  #(4)除法/  ts_div1=tf.divide(ts1,ts2,name=None)  ts_div2=tf.div(ts1,ts2,name=None)  #div 支持 broadcasting(即shape可不同)  ts_div3=ts1/ts2  #另外還有truediv(x,y) x,y類型必須一致,floor_div等。  #(5)取模Mod(估計基本用不到)

 

(2)tensor-scalar操作

  #scalar-tensor操作。  #對tensor中所有element執行同樣的操作(+,-,*,/)  #加法  ts_add=ts1+2  #減法  ts_sub=ts1-2  #乘法  ts_mul=ts1*2  #除法  ts_div=ts1/2

 

二、基本數學函數

  #以下x,y均代表tensor     tf.add_n(inputs, name=None) #inputs:tensor數組,所有tensor相加  tf.abs(x, name=None)     #絕對值  tf.negative(x, name=None)  #取反  tf.sign(x, name=None)    #取符號(y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0.)  tf.square(x, name=None)   #y=x*x  tf.round(x, name=None)    #Rounds the values of a tensor to the nearest integer, element-wise.  tf.sqrt(x, name=None)    #sqrt   tf.pow(x, y, name=None)   #x,y均為tensor,element-wise求pow  tf.exp(x, name=None)     #y=e^x  tf.log(x, name=None)     #y=log(x)   tf.ceil(x, name=None)    #ceil  tf.floor(x, name=None)    #floor  tf.maximum(x, y, name=None) #z=max(x,y)  tf.minimum(x, y, name=None)  tf.cos(x, name=None)     #三角函數,sin,cos,tan,acos,asin,atan  tf.sin(x, name=None)   tf.tan(x, name=None)  tf.acos(x, name=None)  tf.asin(x, name=None)  tf.atan(x, name=None)  #...  #等等一些函數。

 

三、Matrix矩陣操作

  tf.diag(diagonal, name=None)     #得到以diagonal為對角的tensor  tf.diag_part(input, name=None)    #tf.diag 逆操作,得到input的對角矩陣   tf.transpose(a, perm=None,name=None) #轉置矩陣,y[i,j]=x[j,i]  #矩陣乘法  tf.matmul(a, b,    transpose_a=False, transpose_b=False, #   adjoint_a=False, adjoint_b=False,   #共軛   a_is_sparse=False, b_is_sparse=False, #矩陣是否稀疏   name=None)

 

四、Reduction 歸約操作

  #(1)tf.reduce_sum   #當keep_dims=False。rank of tensor會降維度。  tf.reduce_sum(input_tensor,     axis=None,        #要歸約的dimention。值為None或一個數字或者數組。如0,1,[0,3,4]    keep_dims=False,     #if true, retains reduced dimensions with length 1.    name=None,     reduction_indices=None)     #(2)tf.reduce_min / tf.reduce_max / tf.reduce_mean  #參數與tf.reduce_sum一致。  #tf.reduce_min : 被歸約的數取最小值;  #tf.reduce_max : 被歸約的數取最大值;  #tf.reduce_mean: 被歸約的數取平均值。     #(3)邏輯操作  # tf.reduce_all:logical and operation  # tf.reduce_any: logical or operation        #(4)自定義操作函數  tf.einsum(equation, *inputs)  #例子:  tf.einsum('ij,jk->ik', ts1,ts2) #矩陣乘法  tf.einsum('ij->ji',ts1)     #矩陣轉置

 

五、tensor大小 比較

  #(1)相等equal (element-wise)  tf.equal(x, y, name=None) #Returns the truth value of (x == y) element-wise.     #(2)不等not_equal   tf.not_equal(x, y, name=None)     #(3)其他比較  tf.less(x, y, name=None)  tf.less_equal(x, y, name=None)  tf.greater(x, y, name=None)  tf.greater_equal(x, y, name=None)

 

六、恆等映射

#恆等映射

tf.identity(input, name=None) #Return a tensor with the same shape and contents as the input tensor or value.

七、類型轉化

  tf.cast(x, dtype, name=None)  #Casts a tensor to a new type.     #For example:  # tensor `a` is [1.8, 2.2], dtype=tf.float  #tf.cast(a, tf.int32) ==> [1, 2] dtype=tf.int32

 

八、例子

(1)RELU實現

  import tensorflow as tf  def relu(x):    #要構造一個和x shape一樣的Tensor。源碼中應該不會用效率這麼低的寫法。   y=tf.constant(0.0,shape=x.get_shape())   return tf.where(tf.greater(x,y),x,y)     sess=tf.Session()  x=tf.Variable(tf.random_normal(shape=[10],stddev=10))  sess.run(tf.global_variables_initializer())  x_relu=relu(x)  data_x,data_x_relu=sess.run((x,x_relu))  for i in range(0,len(data_x)):    print("%.5f --relu--> %.5f" %(data_x[i],data_x_relu[i]))

 

補充知識:tensorflow 復合邏輯‘且'和‘或'的實現

我就廢話不多說了,大家還是直接看代碼吧~

  import tensorflow as tf    n1 = tf.constant(2)  n2 = tf.constant(3)    n3 = tf.constant(4)  n4 = tf.constant(5)    def true_fn1():   return tf.constant(11)    def false_fn1():   return tf.constant(22)    def true_fn():    return tf.cond(n3<n4,true_fn1,false_fn1)    def false_fn():    return tf.constant(33)    r = tf.cond(n1<n2,true_fn,false_fn)    sess = tf.Session()    print(sess.run(r))

print結果11

相當於實現了if n1<n2 and n3<n4:

後來發現,用 & 和 | 就行了

  import tensorflow as tf    n1 = tf.constant(True,tf.bool)  n2 = tf.constant(False,tf.bool)    r1 = n1 | n2  r2 = n1 & n2    sess = tf.Session()    print(sess.run(r1))  print(sess.run(r2))

 

  import tensorflow as tf    n1 = tf.constant(1)>tf.constant(0)  n2 = tf.constant(1)<tf.constant(0)    r1 = n1 | n2  r2 = n1 & n2    sess = tf.Session()    print(sess.run(r1))  print(sess.run(r2))


[ml5rwbikls ] Tensorflow tensor 數學運算和邏輯運算方式已經有236次圍觀

http://coctec.com/docs/program/show-post-240558.html