tensorflow `tf.strided_slice()`函数的`inclusive_end`选项

oknwwptz  于 6个月前  发布在  其他
关注(0)|答案(3)|浏览(44)

请确保这是一个功能请求。根据我们的规定,我们只在GitHub上解决代码/文档错误、性能问题、功能请求和构建/安装问题。标签:功能模板

系统信息

  • TensorFlow版本(您正在使用的):最新(2.8)
  • 您是否愿意为其做出贡献(是/否):是
    描述功能及其当前行为/状态。

我是R interface to tensorflow的维护者。在R中,使用[进行子集划分的习惯是以1为基数,包括切片结束。在大多数情况下,将R中的[Tensor方法适应为Python的0为基础索引和半开区间很容易。除了一个情况:当切片结束也是容器的第一个元素时。
例如,

x = [1, 2, 3, 4, 5, 6]

一个像x[3:1]这样的R调用将返回[3, 2, 1]。要将其翻译成Python,调用应该是x[2::-1]。这种翻译在急切模式下很容易完成,但在图模式下如果用户将切片结束作为Tensor提供,那么这就很困难,因为这会使end的数据类型变为变体(整数或None,取决于运行时的Tensor值)。
end Package 在tf.experimental.Optional()中不起作用,tf.strided_slice()也不接受Tensor值作为end_mask。这意味着如果x[start:end]是Tensor且end可能解析为Tensor的第一位元素,那么就没有办法忠实地翻译像end这样的R调用。

这会改变当前的API吗?如何?

有几种解决方法,但我认为最简单的方法是在参数中添加默认值为tf.strided_slice(..., inclusive_end=False)。这对现有代码不会造成破坏。从R接口来看,我们可以调用tf.strided_slice(..., inclusive_end = True)

哪些人会从这个功能中受益?

所有来自R的Tensorflow用户,以及具有以1为基础和闭区间切片语义的其他语言的Tensorflow接口(例如Julia)。

其他信息。

拥有一个额外的参数tf.strided_slice(..., one_based = False)将锦上添花。让tf.strided_slice()自动推断何时应为负值将是最棒的部分 :)

5cg8jx4n

5cg8jx4n1#

感谢您指出问题!这是一个合理的功能请求。不幸的是,我不确定我们近期是否会有足够的带宽来实现它。

5q4ezhmt

5q4ezhmt2#

感谢您的回复。这对于R用户来说将是一个生活质量的很大提升,我愿意尽我所能来实现它。您是否愿意接受这个PR?

ktecyv1j

ktecyv1j3#

我很高兴接受这个PR。您的贡献将受到赞赏!

相关问题