tf.strided_slice的一些心得
最近在测试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
- 点赞
- 收藏
- 关注作者
评论(0)