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
輸出結果為: