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é)果會降低維度,如果不傳入這個(gè)參數(shù)磷脯,則系統(tǒng)默認(rèn)為False;
- name:操作的名稱;
- reduction_indices:在以前版本中用來指定軸蛾找,已棄用;
- keep_dims:在以前版本中用來設(shè)置是否保持原張量的維度,已棄用;
什么是維度赵誓?什么是軸(axis)打毛?
維度是用來索引一個(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)了吧~
再多的維只不過是是把上一個(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維來說局义,數(shù)字3的坐標(biāo)是[0, 1, 0]喜爷,那么第一個(gè)數(shù)字0的axis是0,第二個(gè)數(shù)字1的axis是1萄唇,第三個(gè)數(shù)字0的axis是2檩帐。
讓我們再看看我們是如何得到3這個(gè)數(shù)字的:
- 找到3所在的2維矩陣在這個(gè)3維立方的索引:0
- 找到3所在的1維數(shù)組在這個(gè)2維矩陣的索引:1
- 找到3這個(gè)數(shù)這個(gè)1維數(shù)組的索引:0
也就是說,對于[ [[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例子簡單說明。下面是個(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 說明是按第一個(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)算)怜械;