转载:https://www.jianshu.com/p/71e6ef6c121b

   https://www.cnblogs.com/chamie/p/11073363.html

def slice(input_, begin, size, name=None):

其中“input_”是你输入的tensor,就是被切的那个。

“begin”是每一个维度的起始位置,这个下面详细说。

“size”相当于问每个维度拿几个元素出来。


下面看例1:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [1, 1, 3])

这个输出是:

[[[3, 3, 3]]]

首先作为一个3维数组t,你要先明白他的shape是[3,2,3].


Shape:

这个shape是怎么来的呢?咱们把这个t分解一下看就好理解了。那一大堆有括号的t,只看它最外面的括号的话,可以看成是:

t = [A, B, C]   #这是第一维度

然后每一个里面有两个东西,可以写成:

A = [i, j], B = [k, l], C = [m, n]  #这是第二维度

最后,这i, j, k, l, m, n里面分别是:

i = [1, 1, 1], j = [2, 2, 2], k = [3, 3 ,3], l = [4, 4, 4], m = [5, 5, 5], n = [6, 6, 6]  # 这是第三维度

所以shape就是中括号 [ ] 的层级里单位的数量。

对于t来说,最外面括号里有3个东西,分别是A, B, C。这三个东西每个里面有两个玩意儿, i和j, k和l, m和n。

他们里面每一个又有3个数字。所以t的shape是[3,2,3]。这是我的理解方式。


Slice:

在解释slice之前,有一点要知道的是python的数组index是从0开始的。

有了这个基础,我们再来看例子:

tf.slice(t, [1, 0, 0], [1, 1, 3])  # begin = [1, 0, 0]

这里根据顺序我们知道,begin是[1, 0, 0], size是[1, 1, 3].  他们两个数组的意义是从左至右,每一个数字代表一个维度。上面说了begin的意思是起始位置,那么[1, 0, 0]的意思是在3个维度中,每个维度从哪里算起。

第一维度是[A, B, C]。 begin里[1, 0, 0]是1,也就是从B算起。其次第二维度里B = [k, l](注意啊,我这里只写了B = [k, l],可不代表只有B有用,如果size里第一个数字是2的话,B和C都会被取的),begin里第二个数是0,也就是从k算起。第三维度k = [3, 3 ,3],begin里第三个数是0,就是从第一个3算起。

到现在都能看懂吧?知道了这三个起始点之后,再来看size。

size的意思是每个维度的大小,也就是每个维度取几个元素。size的应该是最后输出的tensor的shape。

例子里面:

tf.slice(t, [1, 0, 0], [1, 1, 3])  # size = [1, 1, 3]

size里第一个是1,意思是在第一个维度取1个元素。t = [A, B, C] begin是起算是B,取一个那就是B了呗。那么第一维度结果就是[B]

size第二个也是1,第二维度B = [k, l], begin里起算是k,取一个是k。那么第二维度结果是[[k]]

size第三个是3,第三维度k = [3, 3 ,3],begin里起算是第一个3。三个3取3个数,那就要把三个3都取了,所以是

[[[3, 3, 3]]]


例2:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [1, 2, 3])

看懂了第一个,再看第二个就简单了。这里begin还是一样[1, 0 ,0]。 size第一个维度取一个,还是[B]。然后这里不是1了,是2,意思是取两个。还记得B = [k, l]吗?现在不是只要k了,是k和l都要。第三维度取3个,也就是说不光是k = [3, 3 ,3],l = [4, 4, 4]也要slice走。

总结一下,第一维度取[B]。第二维度里把B换成[k, l],就变成了[[k, l]]. 第三维度里把k换成[3, 3 ,3],把l 换成 [4, 4, 4],替换后是最终结果

[[[3, 3, 3], [4, 4, 4]]]

是不是觉得看懂了也挺简单的,只是可能不太习惯这种思维方式。


例3:

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [-1, -1, -1])

对于这种情况,源代码注释中有一句话:

If `size[i]` is -1, all remaining elements in dimension i are included in the slice. In other words, this is equivalent to setting: `size[i] = input.dim_size(i) - begin[i]`

也就是说,如果size输入值是-1的话,在那个维度剩下的数都会slice走。上面的例子中,begin是[1, 0, 0]。三个维度都是-1的话,那么结果: 第一维度是[B,C];第二维度是[[k, l], [m, n]]; 第三维度是[[[3,3,3], [4,4,4]], [[5,5,5], [6,6,6]]]

转载于:https://www.cnblogs.com/happystudyeveryday/p/11073991.html

tensorflow之tf.slice()相关推荐

  1. Tensorflow API 学习(3)-tf.slice()

    1,函数原型 tf.slice(inputs,begin,size,name='') 2,用途:从inputs中抽取部分内容 inputs:可以是list,array,tensor begin:n维列 ...

  2. 计算机一级电子表格TF函数,tf.slice()函数详解(极详细)

    tf.slice()是TensorFlow库中分割张量的一个函数,其定义为def slice(input_, begin, size, name=None):.tf.slice()函数的那些参数设置实 ...

  3. tf.slice解析

    tf.slice(input_, begin, size, name = None) 解释 : 这个函数的作用是从输入数据input中提取出一块切片 切片的尺寸是size,切片的开始位置是begin. ...

  4. 【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积

    介绍 关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论: 1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional networ ...

  5. tensorflow op tf.global_variables_initializer

    一.安装 目前用了tensorflow.deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更新到3.6,故安装最新版体验使用. 慢慢长征路 ...

  6. Tensorflow中tf.ConfigProto()详解

    参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...

  7. 【TensorFlow】tf.nn.conv2d是怎样实现卷积的?

    int height_col= (height + 2 * pad_h - kernel_h) / stride_h + 1; int width_col = (width + 2 * pad_w - ...

  8. 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

    [TensorFlow]tf.nn.softmax_cross_entropy_with_logits的用法 from:https://blog.csdn.net/mao_xiao_feng/arti ...

  9. python3 tensorflowprint错误_解决import tensorflow as tf 出错的原因

    笔者在运行 import tensorflow as tf时出现下面的错误,但在运行import tensorflow时没有出错. >>> import tensorflow as ...

  10. Tensorflow:tf.contrib.rnn.DropoutWrapper函数(谷歌已经为Dropout申请了专利!)、MultiRNNCell函数的解读与理解

    Tensorflow:tf.contrib.rnn.DropoutWrapper函数(谷歌已经为Dropout申请了专利!).MultiRNNCell函数的解读与理解 目录 1.tf.contrib. ...

最新文章

  1. 计算机山西特岗考试题库,山西特岗历年试题
  2. LeetCode Ugly Number II(丑数的计算)
  3. 《BI那点儿事》数据流转换——排序
  4. javascript Date 格式化
  5. 物联网成果初显但瓶颈犹存
  6. 小技巧:让linux程序在后台运行
  7. scapy 安装及简单测试
  8. linux 备份mysql并上传_linux备份数据库并上传至远程服务器(定时执行shell进行ftp上传)...
  9. 英伟达2022财年第二季度获得创纪录营收65.1亿美元
  10. 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网络 Deep RNN
  11. 电脑如何测网速_职场人必备?告别加班的软件,100%提升工作效率|电脑|程序员|mac...
  12. 八段锦是一种不错的养生运动
  13. 【免疫优化物流选址】基于MATLAB的免疫优化算法在物流配送中心选址中的应用仿真
  14. javascript跑马灯效果
  15. ros实现dhcp上网
  16. 【双十一精选】史上最强的宝贝详情页设计思路以及操作流程
  17. The Backrooms - Level 0.2 - 我爱杏仁水
  18. 解决Android Studio的ADB连接不到手机问题
  19. Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能
  20. MAC系统下安装homebrew(2020.04)

热门文章

  1. 拓端tecdat|Python多项式Logistic逻辑回归进行多类别分类和交叉验证准确度箱线图可视化
  2. Android-创建简单登陆界面
  3. mybatis 多租户saas_SaaS 微服务脚手架
  4. matlab定位噪声位置,Matlab怎么样调节KALMAN滤波中的过程噪声和观测噪声
  5. 清华大学操作系统OS学习(十四)——文件系统和文件描述符
  6. pandas获取符合条件值的索引
  7. 基于内容的图像检索技术:从特征到检索
  8. 非极大值抑制(Non-Maximum Suppression)
  9. 神经网络中常用激活函数总结【Python实现激活函数与导函数,曲线可视化分析】
  10. 在计算机中 用于完成系统配置的文件是,历年真题:全国2015年4月自考02323操作系统概论考试试卷以及答案...