图解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操作对数据的处理就是:
- axis#0维上,切片[0, 4),stride 2,也就是切片#0,#2;
- axis#1维上,切片[1, 6),stride 2,也就是切片#1,#3,#5;
- 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的处理,在各个维度上做切片。
智能推荐
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。...
冒泡排序,及改进方式,性能优化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__,硬盘也没有了,但是切换分支的时候依然是会提示本地重写的情况。 提示:需要我在切换分支之前,提交一次更新。 提交了更新之后,再来尝试切换分支,如下: 成功了,说明当做了任何变更之后,切换分支前需要执...
