reduce_sum() 用于計(jì)算張量tensor沿著某一維度的和,可以在求和后降維。
tf.reduce_sum(
input_tensor,
axis=None,
keepdims=None,
name=None,
reduction_indices=None,
keep_dims=None)
- input_tensor:待求和的tensor;
- axis:指定的維,如果不指定,則計(jì)算所有元素的總和;
- keepdims:是否保持原有張量的維度,設(shè)置為True,結(jié)果保持輸入tensor的形狀,設(shè)置為False,結(jié)果會(huì)降低維度,如果不傳入這個(gè)參數(shù),則系統(tǒng)默認(rèn)為False;
- name:操作的名稱;
- reduction_indices:在以前版本中用來(lái)指定軸,已棄用;
- keep_dims:在以前版本中用來(lái)設(shè)置是否保持原張量的維度,已棄用;
什么是維度?什么是軸(axis)?
維度是用來(lái)索引一個(gè)多維數(shù)組中某個(gè)具體數(shù)所需要最少的坐標(biāo)數(shù)量。
- 0維,又稱0維張量,數(shù)字,標(biāo)量:1
- 1維,又稱1維張量,數(shù)組,vector:[1, 2, 3]
- 2維,又稱2維張量,矩陣,二維數(shù)組:[[1,2], [3,4]]
- 3維,又稱3維張量,立方(cube),三維數(shù)組:[ [[1,2], [3,4]], [[5,6], [7,8]] ]
- n維:你應(yīng)該get到點(diǎn)了吧~
再多的維只不過(guò)是是把上一個(gè)維度當(dāng)作自己的元素
1維的元素是標(biāo)量,2維的元素是數(shù)組,3維的元素是矩陣。
在紙上寫寫看,想要精確定位一個(gè)數(shù)字,需要幾個(gè)數(shù)字呢?比如上面例子中的3維數(shù)組,我們想要3這個(gè)數(shù)字,至少要3個(gè)數(shù)字定位,它的坐標(biāo)是(0為索引起點(diǎn)):[0, 1, 0]
axis是多維數(shù)組每個(gè)維度的坐標(biāo)。
還拿3維來(lái)說(shuō),數(shù)字3的坐標(biāo)是[0, 1, 0],那么第一個(gè)數(shù)字0的axis是0,第二個(gè)數(shù)字1的axis是1,第三個(gè)數(shù)字0的axis是2。
讓我們?cè)倏纯次覀兪侨绾蔚玫?這個(gè)數(shù)字的:
- 找到3所在的2維矩陣在這個(gè)3維立方的索引:0
- 找到3所在的1維數(shù)組在這個(gè)2維矩陣的索引:1
- 找到3這個(gè)數(shù)這個(gè)1維數(shù)組的索引:0
也就是說(shuō),對(duì)于[ [[1,2], [3,4]], [[5,6], [7,8]] ]這個(gè)3維情況,[[1,2],[3,4]], [[5,6], [7,8]]這兩個(gè)矩陣(還記得嗎,高維的元素低一個(gè)維度,因此三維立方的元素是二維矩陣)的axis是0,[1,2],[3,4],[5,6],[7,8]這4個(gè)數(shù)組(二維矩陣的元素是一維數(shù)組)的axis是1,而1,2,3,4,5,6,7,8這8個(gè)數(shù)的axis是2。
越往里axis就越大,依次加1。
這里需要注意的是,axis可以為負(fù)數(shù),此時(shí)表示倒數(shù)第axis個(gè)維度,這和Python中列表切片的用法類似。
下面舉個(gè)多維tensor例子簡(jiǎn)單說(shuō)明。下面是個(gè) 2 * 3 * 4 的tensor。
[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]],
[[ 13 14 15 16]
[ 17 18 19 20]
[ 21 22 23 24]]]
tf.reduce_sum(tensor, axis=0) axis=0 說(shuō)明是按第一個(gè)維度進(jìn)行求和。那么求和結(jié)果shape是3*4
[[1+13 2+14 3+15 4+16]
[5+17 6+18 7+19 8+20]
[9+21 10+22 11+23 12+24]]
依次類推,如果axis=1,那么求和結(jié)果shape是2*4,即:
[[ 1 + 5 + 9 2 + 6+10 3 + 7+11 4 + 8+12]
[13+17+21 14+18+22 15+19+23 16+20+24]]
如果axis=2,那么求和結(jié)果shape是2*3,即:
[[1+2+3+4 5+6+7+8 9+10+11+12]
[13+14+15+16 17+18+19+20 1+22+23+24]]
類似的方法還有:
- tf.reduce_mean():計(jì)算tensor指定軸方向上的所有元素的累加和;
- tf.reduce_max():計(jì)算tensor指定軸方向上的各個(gè)元素的最大值;
- tf.reduce_all():計(jì)算tensor指定軸方向上的各個(gè)元素的邏輯和(and運(yùn)算);
- tf.reduce_any():計(jì)算tensor指定軸方向上的各個(gè)元素的邏輯或(or運(yùn)算);