天天看點

tensorflow運作mnist的一些

最近在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           

複制

輸出結果依次是:

tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些

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           

複制

輸出結果為:

tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些
tensorflow運作mnist的一些