1. 程式人生 > >tf.strided_slice()官方示例解釋

tf.strided_slice()官方示例解釋

Welcome To My Blog
tf.strided_slice( input_, begin, end ) 提取張量的一部分
1. 一個維度一個維度地看:begin 加 stride,直到二者的和大於等於end
2. [begin,end),左閉右開
3. 清楚各個維度指的是哪部分
4. 返回的張量中,元素的個數:end與begin對應元素做差再相乘,結果取絕對值
下面以官方的三個示例為例進行解釋,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維,所以不用繼續加stride了,取值區間為[1,2),第0維返回索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
再看第1維,取值區間為[0,1),在第0維結果的基礎上

,第1維返回索引為0的元素,即[3, 3, 3]
最後看第2維,取值區間為[0,3),在第1維結果的基礎上,第2維返回索引為0,1,2的元素,即[3, 3, 3]
最終結果為[3, 3, 3]

示例2

tf.strided_slice(t, [1, 0, 0], [2, 2, 3], [1, 1, 1])
第0維取值區間為[1,2),返回第0維索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
第1維取值區間為[0,2),在第0維結果的基礎上,返回第1維索引為0,1的元素,即[3, 3, 3], [4, 4, 4]
第2維取值區間為[0,3],在第1維結果的基礎上,返回第2維索引為0,1,2的元素,即[3, 3, 3], [4, 4, 4],這裡注意,因為第1維結果是兩個list,0,1,2這三個索引分別作用於這兩個list
最終結果[[3, 3, 3], [4, 4, 4]]

示例3

tf.strided_slice(t, [1, -1, 0], [2, -3, 3], [1, -1, 1])
第0維取值區間[1,2),第0維返回索引為1的元素,即[[3, 3, 3], [4, 4, 4]]
第1維取值區間[-1,-3),在第0維結果的基礎上,返回第1維索引為-1,-2的元素,即[4, 4, 4],[3, 3, 3]
第2維取值區間為[0,3),在第1維結果的基礎上,返回第2維索引為0,1,2的元素,即[4, 4, 4],[3, 3, 3]
最終結果[[4, 4, 4],[3, 3, 3]]