最近在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
複制
輸出結果為: