轉載:
http://blog.csdn.net/caimouse/article/details/59495858;
一、概述
在深度學習里研究的物體的關系,都是比較復雜的。比如一個圖片32X32大小的,它的像素信息就有1024個點,如果考慮RGB三種顏色,就是1024X3了。對於目前還沒有辦法構造140億個神經元的計算機來說,只能干一件事情,就是簡化,化繁為簡。為了簡化,就需要使用算法來進行,在數學上最簡單的處理,就是求平均值。這個道理非常簡單,如果10個數,只要把它們相加,再除以10即可。對於0維數字,可以這樣來計算,如果對於N維的張量,就不是這么簡單的計算了。就拿二維的矩陣來說,它可以橫着算,還可以是豎着算,還可以全部加到一起,再除以總數。可見對於N維的張量來說,有更多的可能,那么就得抽像一個數軸出來。數軸在初中的代數就學習了,可見數軸在高等數學里也會使用到的,N維張量,就是N個數軸的表示,如果沿着不同的數軸進行計算,就會產生不同的作用。其實平均值也可以算是降維思想的一種。
在TF里,就提供了這樣一個算法來計算張量的平均值:
二、tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)
沿着張量不同的數軸進行計算平均值。
三、參數:
input_tensor: 被計算的張量,確保為數字類型。
axis: 方向數軸,如果沒有指明,默認是所有數軸都減小為1。
keep_dims: 如果定義true, 則保留維數,但數量個數為0.
name: 操作過程的名稱。
reduction_indices: 為了舊函數兼容的數軸。
返回值:
降低維數的平均值。
三、實戰
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軸平均值;