Welcome To My Blog
tf.strided_slice( input_, begin, end ) 提取張量的一部分
- 一個維度一個維度地看:begin 加 stride,直到二者的和大于等于end
- [begin,end),左閉右開
- 清楚各個維度指的是哪部分
-
返回的張量中,元素的個數(shù):end與begin對應(yīng)元素做差再相乘,結(jié)果取絕對值
下面以官方的三個示例為例進(jìn)行解釋,t是一個3*2*3的張量
1.png
示例1
對于tf.strided_slice(t, [1, 0, 0], [2, 1, 3], [1, 1, 1]) ,一個維度一個維度地看.
begin的第0維是1,end的第0維是2,begin+stride=1+1=2,2大于等于end的第0維,所以不用繼續(xù)加stride了,取值區(qū)間為[1,2),第0維返回索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
再看第1維,取值區(qū)間為[0,1),在第0維結(jié)果的基礎(chǔ)上,第1維返回索引為0的元素,即[3, 3, 3]
最后看第2維,取值區(qū)間為[0,3),在第1維結(jié)果的基礎(chǔ)上,第2維返回索引為0,1,2的元素,即[3, 3, 3]
最終結(jié)果為[3, 3, 3]
示例2
tf.strided_slice(t, [1, 0, 0], [2, 2, 3], [1, 1, 1])
第0維取值區(qū)間為[1,2),返回第0維索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
第1維取值區(qū)間為[0,2),在第0維結(jié)果的基礎(chǔ)上,返回第1維索引為0,1的元素,即[3, 3, 3], [4, 4, 4]
第2維取值區(qū)間為[0,3],在第1維結(jié)果的基礎(chǔ)上,返回第2維索引為0,1,2的元素,即[3, 3, 3], [4, 4, 4],這里注意,因為第1維結(jié)果是兩個list,0,1,2這三個索引分別作用于這兩個list
最終結(jié)果[[3, 3, 3], [4, 4, 4]]
示例3
tf.strided_slice(t, [1, -1, 0], [2, -3, 3], [1, -1, 1])
第0維取值區(qū)間[1,2),第0維返回索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
第1維取值區(qū)間[-1,-3),在第0維結(jié)果的基礎(chǔ)上,返回第1維索引為-1,-2的元素,即[4, 4, 4],[3, 3, 3]
第2維取值區(qū)間為[0,3),在第1維結(jié)果的基礎(chǔ)上,返回第2維索引為0,1,2的元素,即[4, 4, 4],[3, 3, 3]
最終結(jié)果[[4, 4, 4],[3, 3, 3]]