1. 程式人生 > >tensorflow執行mnist的一些常用函式整理(1)

tensorflow執行mnist的一些常用函式整理(1)

 

最近在tensorflow環境下用CNN來實現mnist,裡面設計了一些tensorflow的函式,在之後的學習中肯定會經常使用,因此記錄整理下來。

      函式如下,現將函式名列在此,後面進行詳細分析:

          tf.truncated_naomal()

          tf.Variable()

          tf.reshape()

          tf.matmul()

          tf.muitiply()

          tf.reduce_sum()

          tf.reduce_mean()

具體分析:

tf.truncated_normal(shape, mean, stddev) 

           shape表示生成張量的維度

           mean是均值

           stddev是標準差

           這個函式產生正態分佈,均值和標準差自己設定。這是一個截斷的產生正太分佈的函式,就是說產生正態分佈的值如果與均值的差值大於兩倍的標準差,那就重新生成,和一             般的正太分佈的產生隨機資料比起來,這個函式產生的隨機數與均值的差距不會超過兩倍的標準差

tf.Variable(initializer,name)

          引數initializer是初始化引數

          name是可自定義的變數名稱

          例如     v2=tf.Variable(tf.constant(2),name='v2')

tf.reshape(tensor, shape, name=None)

          第1個引數為被調整維度的張量

          第2個引數為要調整為的形狀,注意shape裡最多有一個維度的值可以填寫為-1,表示自動計算此維度    

x = tf.placeholder("float", shape=[None, 784])
x_image = tf.reshape(x, [-1, 28, 28, 1])

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)

         將矩陣a乘於矩陣b-------矩陣相乘

         transpose_a: 如果為真, a則在進行乘法計算前進行轉置。 
         transpose_b: 如果為真, b則在進行乘法計算前進行轉置。 
         adjoint_a: 如果為真, a則在進行乘法計算前進行共軛和轉置。 
         adjoint_b: 如果為真, b則在進行乘法計算前進行共軛和轉置。 
         a_is_sparse: 如果為真, a會被處理為稀疏矩陣。 
         b_is_sparse: 如果為真, b會被處理為稀疏矩陣。 
         name: 操作的名字(可選引數)

注意:1 輸入必須是矩陣(或者是張量秩 >2的張量,表示成批的矩陣),並且其在轉置之後有相匹配的矩陣尺寸

           2 兩個矩陣必須都是同樣的型別,支援的型別如下:float16, float32, float64, int32, complex64, complex128

tf.multiply(x, y, name=None) 

      x: 一個型別為:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的張量。 
      y: 一個型別跟張量x相同的張量。

      1 multiply這個函式實現的是元素級別的相乘,也就是兩個相乘的數元素各自相乘,而不是矩陣乘法

      2 兩個相乘的數必須有相同的資料型別,不然就會報錯

tf.reduce_sum(tensor, axis = None, keep_dims = False, name = None)

      此函式用於降緯相加,

      tensor-輸入的張量   

      axis-要求和的 rank,如果為 none,則表示所有 rank 都要求和

      keep_dims-如果為真,則求和之後不降緯

      心得:如果輸入張量的維度為n,則axis的取值為0 - (n-1)

      例如:用下面程式碼進行測試

     

import tensorflow as tf
import numpy as np
#生成形狀為2*2*3的三維資料
x = np.asarray([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
x_p = tf.placeholder(tf.int32,[2,2,3])
#修改下面的值
#axis=0    對第一緯進行相加,降緯
#axis=1    對第二緯進行相加,降緯
#axis=2    對第三緯進行相加,降緯
#axis=[0,1,2]    對第所有緯進行相加,降緯
#axis=None    效果同上,降緯
#axis=0 keep_dims = True    對第一緯進行相加,不降緯
y =  tf.reduce_sum(x_p,0)
with tf.Session() as sess:
    y = sess.run(y,feed_dict={x_p:x})
    print y

輸出結果依次是:

           

           

           

           

           

           

tf.reduce_mean(tensor, axis = None, keep_dims = False, name = None)

         此函式與tf.reduce_sum()類似

         axis-要求平均的 rank,如果為 none,則表示所有 rank 都要求平均

         keep_dims-如果為真,則求和之後不降緯

         心得:如果輸入張量的維度為n,則axis的取值為0 - (n-1)

         例如:用下面程式碼進行測試

     

import tensorflow as tf
import numpy as np
#生成形狀為2*2*3的三維資料
x = np.asarray([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
x_p = tf.placeholder(tf.int32,[2,2,3])
#修改下面的值
#axis=0    對第一緯進行求平均,降緯
#axis=1    對第二緯進行求平均,降緯
#axis=2    對第三緯進行求平均,降緯
#axis=[0,1,2]    對第所有緯進行求平均,降緯
#axis=None    效果同上,降緯
#axis=0 keep_dims = True    對第一緯進行求平均,不降緯
y =  tf.reduce_mean(x_p,0)  #修改此處的引數
with tf.Session() as sess:
    y = sess.run(y,feed_dict={x_p:x})
    print y

輸出結果為: