gpt4 book ai didi

python - `tf.strided_slice()` 有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 20:51:09 25 4
gpt4 key购买 nike

我想知道 tf.strided_slice() 运算符实际上做了什么。
doc说,

To a first order, this operation extracts a slice of size end - begin from a tensor input starting at the location specified by begin. The slice continues by adding stride to the begin index until all dimensions are not less than end. Note that components of stride can be negative, which causes a reverse slice.

在示例中,

# 'input' is [[[1, 1, 1], [2, 2, 2]],
# [[3, 3, 3], [4, 4, 4]],
# [[5, 5, 5], [6, 6, 6]]]
tf.slice(input, [1, 0, 0], [2, 1, 3], [1, 1, 1]) ==> [[[3, 3, 3]]]
tf.slice(input, [1, 0, 0], [2, 2, 3], [1, 1, 1]) ==> [[[3, 3, 3],
[4, 4, 4]]]
tf.slice(input, [1, 1, 0], [2, -1, 3], [1, -1, 1]) ==>[[[4, 4, 4],
[3, 3, 3]]]

所以在我对文档的理解中,第一个示例 (tf.slice(input, begin=[1, 0, 0], end=[2, 1, 3], strides=[1, 1 , 1])),

  • 结果大小为 end - begin = [1, 1, 3]。示例结果显示[[[3, 3, 3,]]],那个shape是[1, 1, 3],看起来还可以。
  • 结果的第一个元素位于 begin = [1, 0, 0]。示例结果的第一个元素是3,也就是input[1,0,0],好像还可以。
  • 切片通过将步幅添加到开始索引来继续。所以结果的第二个元素应该是input[begin + strides] = input[2, 1, 1] = 6,但是示例显示第二个元素是3 .

strided_slice() 是做什么的?

(注:method names in the samples and the last example is incorrect。)

最佳答案

我对这种方法进行了一些实验,这给了我一些见解,我认为这可能会有一些用处。假设我们有一个张量。

a = np.array([[[1, 1.2, 1.3], [2, 2.2, 2.3], [7, 7.2, 7.3]],
[[3, 3.2, 3.3], [4, 4.2, 4.3], [8, 8.2, 8.3]],
[[5, 5.2, 5.3], [6, 6.2, 6.3], [9, 9.2, 9.3]]])
# a.shape = (3, 3, 3)

strided_slice() 需要 4 个必需的参数 input_, begin, end, strides 我们将 a 作为 input_ 参数。 与 tf.slice() 方法的情况一样,begin 参数是从零开始的,其余的 args 是基于形状的。 但是在文档中 beginend 都是从零开始的

方法的功能很简单:
它的工作方式类似于遍历循环,其中 begin 是循环开始的张量中元素的位置,而 end 是循环停止的位置。

tf.strided_slice(a, [0, 0, 0], [3, 3, 3], [1, 1, 1])

# output = the tensor itself

tf.strided_slice(a, [0, 0, 0], [3, 3, 3], [2, 2, 2])

# output = [[[ 1. 1.3]
# [ 7. 7.3]]
# [[ 5. 5.3]
# [ 9. 9.3]]]

strides 就像循环迭代的步骤,这里 [2,2,2] 使方法生成从 (0,0,0) 开始的值, (0,0,2), (0,2,0), (0,2,2), (2,0,0), (2,0,2) ..... 在 一个张量。

tf.strided_slice(input3, [1, 1, 0], [2, -1, 3], [1, 1, 1]) 

将产生类似于 tf.strided_slice(input3, [1, 1, 0], [2, 2, 3], [1, 1, 1]) 作为张量的输出a 具有 shape = (3,3,3)

关于python - `tf.strided_slice()` 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41380126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com