图解TensorFlow op:tf.strided_slice

标签: ai  tf.ops  tf.tensor  TensorFlow  深度学习  strided_slice  Tensor

田海立@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;
  2. axis#1维上,切片[1, 6),stride 2,也就是切片#1,#3,#5;
  3. 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的处理,在各个维度上做切片。

 

版权声明:本文为thl789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/thl789/article/details/109695050

智能推荐

tensorflow 2.0 高阶操作 之 高阶OP

4.6 高阶操作 Outline where where(tensor) where(cond, A, B) scatter_nd one dim multi-dim meshgrid points numpy 实现 tensorflow 实现 plot Outline where 根据坐标 有目的性的选择 scatter_nd 根据坐标 有目的性的更新 meshgrid 生成坐标系 where ...

tf.concat实例用法与图解

tf.concat的参数为: 其中的axis参数并不直观。 下面的代码是官网给出的示例代码。 个人认为可以这样来理解记忆: t1和t2都是一个batch的向量,每个向量是一个样本,例如图像用CNN或者文本用RNN编码后的hidden state。设t1和t2分别为和的矩阵。那么,m代表的是batch_size,n代表的是每个样本的特征数量。本文的向量按照行向量来画图理解。 axis=0就是将两个b...

图解、手动模拟tensorflow的LSTM

LSTM结构在很多地方都有,我这里就不再赘述了。 只是稍微解释一下图中的变量,f, i, j , o (一般图中j都以表示,这里为了跟代码中的字母保持一致就改成j了) (注:点乘为矩阵乘法,星乘是两个矩阵相同位置的数字相乘。在tensorflow中,遗忘门会再加一个偏置量,默认为1.0) 上图是要实现的结构   上图是tensorflow lstm cell运算的变量和变量的shape。...

循环神经网络的用法图解-tensorflow

1 one-cell的情况 2 one sequence 的情况 3 batch sequences 的情况...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

猜你喜欢

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...

git 设置 gitignore 忽略 __pycache__

清除git缓存中的pycache 直接删掉硬盘上的文件 如果我想保留硬盘上的这个文件,而只删除版本管理中的文件,就需要加入--cached参数。 切换分支出现问题 尽管我已经删除了__pycache__,硬盘也没有了,但是切换分支的时候依然是会提示本地重写的情况。 提示:需要我在切换分支之前,提交一次更新。 提交了更新之后,再来尝试切换分支,如下: 成功了,说明当做了任何变更之后,切换分支前需要执...