轉載:https://www.cnblogs.com/yuzhuwei/p/6986171.html
1.概述
在深度學習裏研究的物體的關係,都是比較複雜的。好比一個圖片32X32大小的,它的像素信息就有1024個點,若是考慮RGB三種顏色,就是1024X3了。對於目前尚未辦法構造140億個神經元的計算機來講,只能幹一件事情,就是簡化,化繁爲簡。爲了簡化,就須要使用算法來進行,在數學上最簡單的處理,就是求平均值。這個道理很是簡單,若是10個數,只要把它們相加,再除以10便可。對於0維數字,能夠這樣來計算,若是對於N維的張量,就不是這麼簡單的計算了。就拿二維的矩陣來講,它能夠橫着算,還能夠是豎着算,還能夠所有加到一塊兒,再除以總數。可見對於N維的張量來講,有更多的可能,那麼就得抽像一個數軸出來。數軸在初中的代數就學習了,可見數軸在高等數學裏也會使用到的,N維張量,就是N個數軸的表示,若是沿着不一樣的數軸進行計算,就會產生不一樣的做用。其實平均值也能夠算是降維思想的一種。html
在TF裏,就提供了這樣一個算法來計算張量的平均值:算法
沿着張量不一樣的數軸進行計算平均值。函數
input_tensor: 被計算的張量,確保爲數字類型。學習
axis: 方向數軸,若是沒有指明,默認是全部數軸都減少爲1。spa
keep_dims: 若是定義true, 則保留維數,但數量個數爲0..net
name: 操做過程的名稱。code
reduction_indices: 爲了舊函數兼容的數軸。htm
返回值:blog
下降維數的平均值。圖片
3.代碼實現
import tensorflow as tf #建立張量 x = tf.Variable([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]); #顯示 init = tf.global_variables_initializer(); with tf.Session() as sess: sess.run(init); #tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None) y = tf.reduce_mean(x); y01 = tf.reduce_mean(x, axis=0, keep_dims=False); y02 = tf.reduce_mean(x, axis=0, keep_dims=True); y1 = tf.reduce_mean(x, axis=1); print("x = ", x.eval()); print("tf.reduce_mean(x) = ", y.eval()); print("tf.reduce_mean(x, axis=0, keep_dims=False) = ", y01.eval()); print("tf.reduce_mean(x, axis=0, keep_dims=True) = ", y02.eval()) print("tf.reduce_mean(x, axis=1) = ", y1.eval());
執行結果:
('x = ', array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]], dtype=float32)) ('tf.reduce_mean(x) = ', 5.0) ('tf.reduce_mean(x, axis=0, keep_dims=False) = ', array([ 4., 5., 6.], dtype=float32)) ('tf.reduce_mean(x, axis=0, keep_dims=True) = ', array([[ 4., 5., 6.]], dtype=float32)) ('tf.reduce_mean(x, axis=1) = ', array([ 2., 5., 8.], dtype=float32))
總結:
tf.reduce_mean(x)表示計算全局平均值;
tf.reduce_mean(x, axis=0)表示計算y軸平均值;
tf.reduce_mean(x, axis=1)表示計算x軸平均值;