tf.slice()到底怎么切的爬迟,看不懂你掐死我

對(duì)于java起手的程序猿剩瓶,python的計(jì)算多維度數(shù)組的方式真的是有點(diǎn)蛋疼。最近看代碼的時(shí)候需要弄明白tf.slice()的具體操作方法含鳞。去看了看官方的注釋和例子還是一頭霧水影锈,就是看不明白這到底是怎么切的。于是搜了幾個(gè)quora的帖子蝉绷,終于搞懂了鸭廷。下面舉3個(gè)例子??解釋一下切割原理。如果你也跟我一樣不太明白的話就接著往下看吧熔吗。解釋不清楚我吃粑粑辆床。(少在我的簡(jiǎn)書(shū)里騙吃騙喝~)


首先看一眼源代碼注釋是怎么說(shuō)的:

This operation extracts a slice of size `size` from a tensor `input` starting at the location specified by `begin`. The slice `size` is represented as tensor shape, where `size[i]` is the number of elements of the 'i'th dimension of `input` that you want to slice. The starting location (`begin`) for the slice is represented as an offset in each dimension of `input`. In other words, `begin[i]` is the offset into the 'i'th dimension of `input` that you want to slice from.

方程的signature是這樣的:

def slice(input_, begin, size, name=None):

其中“input_”是你輸入的tensor,就是被切的那個(gè)桅狠。

“begin”是每一個(gè)維度的起始位置讼载,這個(gè)下面詳細(xì)說(shuō)。

“size”相當(dāng)于問(wèn)每個(gè)維度拿幾個(gè)元素出來(lái)中跌。


下面看例1:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])

tf.slice(t, [1, 0, 0], [1, 1, 3])

這個(gè)輸出是:

[[[3, 3, 3]]]

首先作為一個(gè)3維數(shù)組t咨堤,你要先明白他的shape是[3,2,3].??


Shape:

這個(gè)shape是怎么來(lái)的呢?咱們把這個(gè)t分解一下看就好理解了漩符。那一大堆有括號(hào)的t一喘,只看它最外面的括號(hào)的話,可以看成是:

t = [A, B, C]? ?#這是第一維度

然后每一個(gè)里面有兩個(gè)東西嗜暴,可以寫(xiě)成:

A = [i, j]津滞, B = [k, l], C = [m, n]? #這是第二維度

最后灼伤,這i, j, k, l, m, n里面分別是:

i = [1, 1, 1],?j = [2, 2, 2],?k = [3, 3 ,3],?l = [4, 4, 4],?m = [5, 5, 5],?n = [6, 6, 6]? # 這是第三維度

所以shape就是中括號(hào) [ ] 的層級(jí)里單位的數(shù)量触徐。

對(duì)于t來(lái)說(shuō),最外面括號(hào)里有3個(gè)東西狐赡,分別是A, B, C撞鹉。這三個(gè)東西每個(gè)里面有兩個(gè)玩意兒, i和j, k和l, m和n。

他們里面每一個(gè)又有3個(gè)數(shù)字。所以t的shape是[3,2,3]鸟雏。這是我的理解方式享郊。


Slice:

在解釋slice之前,有一點(diǎn)要知道的是python的數(shù)組index是從0開(kāi)始的孝鹊。

有了這個(gè)基礎(chǔ)炊琉,我們?cè)賮?lái)看例子:

tf.slice(t, [1, 0, 0], [1, 1, 3])? # begin =?[1, 0, 0]

這里根據(jù)順序我們知道,begin是[1, 0, 0], size是[1, 1, 3].? 他們兩個(gè)數(shù)組的意義是從左至右又活,每一個(gè)數(shù)字代表一個(gè)維度苔咪。上面說(shuō)了begin的意思是起始位置,那么[1, 0, 0]的意思是在3個(gè)維度中柳骄,每個(gè)維度從哪里算起团赏。

第一維度是[A, B, C]。 begin里[1, 0, 0]是1耐薯,也就是從B算起舔清。其次第二維度里B = [k, l](注意啊,我這里只寫(xiě)了B = [k, l]曲初,可不代表只有B有用体谒,如果size里第一個(gè)數(shù)字是2的話,B和C都會(huì)被取的)臼婆,begin里第二個(gè)數(shù)是0抒痒,也就是從k算起。第三維度k = [3, 3 ,3]目锭,begin里第三個(gè)數(shù)是0评汰,就是從第一個(gè)3算起。

到現(xiàn)在都能看懂吧痢虹?知道了這三個(gè)起始點(diǎn)之后被去,再來(lái)看size。

size的意思是每個(gè)維度的大小奖唯,也就是每個(gè)維度取幾個(gè)元素惨缆。size的應(yīng)該是最后輸出的tensor的shape。

例子里面:

tf.slice(t, [1, 0, 0], [1, 1, 3])? # size =?[1, 1, 3]

size里第一個(gè)是1丰捷,意思是在第一個(gè)維度取1個(gè)元素坯墨。t = [A, B, C] begin是起算是B,取一個(gè)那就是B了唄病往。那么第一維度結(jié)果就是[B]

size第二個(gè)也是1捣染,第二維度B = [k, l], begin里起算是k停巷,取一個(gè)是k耍攘。那么第二維度結(jié)果是[[k]]榕栏。

size第三個(gè)是3,第三維度k = [3, 3 ,3],begin里起算是第一個(gè)3蕾各。三個(gè)3取3個(gè)數(shù)扒磁,那就要把三個(gè)3都取了,所以是

[[[3, 3, 3]]]

看懂了嗎式曲?是不是有點(diǎn)像代數(shù)妨托?[B]里把B換成[k], 再把k換成[3, 3 ,3]吝羞。最后注意中括號(hào)的數(shù)量兰伤,和size一樣是[1, 1, 3].


例2:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])

tf.slice(t, [1, 0, 0], [1, 2, 3])

看懂了第一個(gè),再看第二個(gè)就簡(jiǎn)單了脆贵。這里begin還是一樣[1, 0 ,0]医清。 size第一個(gè)維度取一個(gè)起暮,還是[B]卖氨。然后這里不是1了,是2负懦,意思是取兩個(gè)筒捺。還記得B = [k, l]嗎?現(xiàn)在不是只要k了纸厉,是k和l都要系吭。第三維度取3個(gè),也就是說(shuō)不光是k = [3, 3 ,3]颗品,l = [4, 4, 4]也要slice走肯尺。

總結(jié)一下,第一維度取[B]躯枢。第二維度里把B換成[k, l],就變成了[[k, l]]. 第三維度里把k換成[3, 3 ,3]则吟,把l 換成 [4, 4, 4],替換后是最終結(jié)果

[[[3, 3, 3], [4, 4, 4]]]

是不是覺(jué)得看懂了也挺簡(jiǎn)單的锄蹂,只是可能不太習(xí)慣這種思維方式氓仲。


例3:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])

tf.slice(t, [1, 0, 0], [-1, -1, -1])

對(duì)于這種情況,源代碼注釋中有一句話:

If `size[i]` is -1, all remaining elements in dimension i are included in the slice. In other words, this is equivalent to setting:?`size[i] = input.dim_size(i) - begin[i]`

也就是說(shuō)得糜,如果size輸入值是-1的話敬扛,在那個(gè)維度剩下的數(shù)都會(huì)slice走。上面的例子中朝抖,begin是[1, 0, 0]啥箭。三個(gè)維度都是-1的話,那么結(jié)果: 第一維度是[B,C]治宣;第二維度是[[k, l], [m, n]]; 第三維度是[[[3,3,3], [4,4,4]], [[5,5,5], [6,6,6]]]



ref:

https://www.tensorflow.org/versions/r1.1/api_docs/python/tf/slice

https://www.quora.com/How-does-tf-slice-work-in-TensorFlow

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末急侥,一起剝皮案震驚了整個(gè)濱河市抬驴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缆巧,老刑警劉巖布持,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陕悬,居然都是意外死亡题暖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)捉超,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)胧卤,“玉大人,你說(shuō)我怎么就攤上這事拼岳≈μ埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵惜纸,是天一觀的道長(zhǎng)叶撒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耐版,這世上最難降的妖魔是什么祠够? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮粪牲,結(jié)果婚禮上古瓤,老公的妹妹穿的比我還像新娘。我一直安慰自己腺阳,他們只是感情好落君,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著亭引,像睡著了一般绎速。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痛侍,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天朝氓,我揣著相機(jī)與錄音,去河邊找鬼主届。 笑死赵哲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的君丁。 我是一名探鬼主播枫夺,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绘闷!你這毒婦竟也來(lái)了橡庞?” 一聲冷哼從身側(cè)響起较坛,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扒最,沒(méi)想到半個(gè)月后丑勤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吧趣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年法竞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强挫。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岔霸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俯渤,到底是詐尸還是另有隱情呆细,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布八匠,位于F島的核電站絮爷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏臀叙。R本人自食惡果不足惜略水,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一价卤、第九天 我趴在偏房一處隱蔽的房頂上張望劝萤。 院中可真熱鬧,春花似錦慎璧、人聲如沸床嫌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厌处。三九已至,卻和暖如春岁疼,著一層夾襖步出監(jiān)牢的瞬間阔涉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工捷绒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瑰排,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓暖侨,卻偏偏與公主長(zhǎng)得像椭住,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子字逗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • TF API數(shù)學(xué)計(jì)算tf...... :math(1)剛開(kāi)始先給一個(gè)運(yùn)行實(shí)例京郑。tf是基于圖(Graph)的計(jì)算系統(tǒng)...
    MachineLP閱讀 3,467評(píng)論 0 1
  • 1. tf函數(shù) tensorflow 封裝的工具類函數(shù) | 操作組 | 操作 ||:-------------| ...
    南墻已破閱讀 5,124評(píng)論 0 5
  • 一 前段時(shí)間,在跟銀行里的幾個(gè)中年領(lǐng)導(dǎo)打交道户魏,托他們辦點(diǎn)事情兽肤。 中間,請(qǐng)他們吃了幾次飯绪抛。 第一次吃飯時(shí)资铡,我?guī)Я藥灼?..
    吃酒ChiJiu閱讀 1,250評(píng)論 1 4
  • 有時(shí)候笤休,似乎已經(jīng)忽略了時(shí)間,每天睡覺(jué)上班下班睡覺(jué)症副,重復(fù)的一成不變的生活漸漸使時(shí)間概念變得模糊店雅。 一首不知多久沒(méi)聽(tīng)的...
    木魚(yú)沐閱讀 277評(píng)論 0 0
  • 在孤寂的時(shí)候, 你總是悄然相伴贞铣。 陪我再回味那個(gè)激情燃燒的大萬(wàn)闹啦! 回味過(guò)去, 在那些風(fēng)景里採(cǎi)摘故事制成茶...
    A都督閱讀 213評(píng)論 0 0