Press "Enter" to skip to content

图解TensorFlow op:tf.strided_slice

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

田海立@CSDN 2020-11-14

 

本文用图文的方式来解释该TensorFlow中strided_slice算子运算的方式。

 

一、strided_slice原型

 

strided_slice在各个维度上对数据做切片,做切片过程中可以指定stride。

 

原型如下:

 

tf.strided_slice(
    input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0,
    new_axis_mask=0, shrink_axis_mask=0, var=None, name=None
)

 

其中:begin/end/strides指定各个维度上的起始/结束与步长的vector,长度是rank。注意:end是开区间,也即是达不到的。

 

也就是在axis#0上切片[begin[0], end[0]),stride: strides[0];在axis#1上切片[begin[1], end[1]),stride: strides[1],…

 

二、strided_slice对数据的处理

 

以一个3D Tensor [4, 6, 3]做begin[0, 1, 0], end[4, 6, 3], stride[2, 2, 1]为例,看 strided_slice操作对数据的处理 就是:

 

 

    1. axis#0维上,[0, 4),stride 2,也就是切片#0,#2;

 

    1. axis#1维上,切片[1, 6),stride 2,也就是切片#1,#3,#5;

 

    1. axis#2维上,切片[0, 3),stride 1,也就是切片#0,#1,#2;也就是该维上不变。

 

 

上述的处理过程,一张图展示就是这样:

 

 

三、strided_slice程序实现

 

上述过程用程序实现,如下:

 

定义一个[4, 6, 3]的Tensor:

 

>>> 
>>> t = tf.range(4*6*3)
>>> t = tf.reshape(t, [4, 6, 3])
>>> t
<tf.Tensor: shape=(4, 6, 3), dtype=int32, numpy=
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],
       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26],
        [27, 28, 29],
        [30, 31, 32],
        [33, 34, 35]],
       [[36, 37, 38],
        [39, 40, 41],
        [42, 43, 44],
        [45, 46, 47],
        [48, 49, 50],
        [51, 52, 53]],
       [[54, 55, 56],
        [57, 58, 59],
        [60, 61, 62],
        [63, 64, 65],
        [66, 67, 68],
        [69, 70, 71]]], dtype=int32)>
>>>

 

执行strided_slice(begin = [0, 1, 0], end = [4, 6, 3], strides = [2, 2, 1])之后:

 

>>> 
>>> t = tf.strided_slice(t, begin = [0, 1, 0], end = [4, 6, 3], strides = [2, 2, 1])
>>> t
<tf.Tensor: shape=(2, 3, 3), dtype=int32, numpy=
array([[[ 3,  4,  5],
        [ 9, 10, 11],
        [15, 16, 17]],
       [[39, 40, 41],
        [45, 46, 47],
        [51, 52, 53]]], dtype=int32)>
>>>

 

总结

 

本文以图示和程序分析了tf.strided_slices对Tensor的处理,在各个维度上做切片。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注