请确保这是一个功能请求。根据我们的规定,我们只在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()
自动推断何时应为负值将是最棒的部分 :)
3条答案
按热度按时间5cg8jx4n1#
感谢您指出问题!这是一个合理的功能请求。不幸的是,我不确定我们近期是否会有足够的带宽来实现它。
5q4ezhmt2#
感谢您的回复。这对于R用户来说将是一个生活质量的很大提升,我愿意尽我所能来实现它。您是否愿意接受这个PR?
ktecyv1j3#
我很高兴接受这个PR。您的贡献将受到赞赏!