tf.strided_slice的一些心得

举报
司马流云 发表于 2020/12/28 01:13:26 2020/12/28
【摘要】 最近在测试strided_slice算子,由于这个算子应用不多,算子计算逻辑较为复杂,mark下。 这个算子的主要功能是对tensor的shape进行切片,起始位置&终止位置&步长可以指定。应用场景类似于剥离三维图像中的核心部分。 算子的定义如下: tf.strided_slice( input_, # 输入的data begin, # 切分的起始位置为一个一维向量,实...

最近在测试strided_slice算子,由于这个算子应用不多,算子计算逻辑较为复杂,mark下。
这个算子的主要功能是对tensor的shape进行切片,起始位置&终止位置&步长可以指定。应用场景类似于剥离三维图像中的核心部分。
算子的定义如下:
tf.strided_slice(
input_, # 输入的data
begin, # 切分的起始位置为一个一维向量,实测len(
end,
strides=None,
begin_mask=0,
end_mask=0,
ellipsis_mask=0,
new_axis_mask=0,
shrink_axis_mask=0,
var=None,
name=None
)
input_, 输入的data
begin, 切分的起始位置为一个一维向量,实测len(begin)可以大于
input_的维数
end/strides 长度需要与begin保持一致
算子的大致说明可以参考:https://blog.csdn.net/silentob/article/details/96007568
但是对于begin_mask, end_mask, ellipsis_mask, new_axis_mask, shrink_axis_mask这五个变量原csdn博客解释的部分内容与实际有偏差,因此增加一些解释。
begin_mask掩码:使用二进制flag对input tensor不同维度进行标志,输入为int类型,算子内部会转化为二进制,再倒序排布后进行计算。假设shape为[1,2,3,4,5]如输入begin_mask为1,二进制位0b00001,其扩展至5维分布为0b10000,忽略0b开头仅对shape[0]起作用。如输入begin_mask为4,二进制位0b00110,其扩展至5维分布为0b01100,忽略0b开头仅对shape[1]&shape[2]起作用。end_mask类似。
ellipsis_mask 掩码可以参考博文。
new_axis_mask掩码这个比较难,目前仍为理解透彻,但是增加的1维不一定是插在shape[0]位置。
shrink_axis_mask掩码则为降维使用。

文章来源: blog.csdn.net,作者:司马流云 crab,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xieyang_auto/article/details/108990908

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。