Мне интересно, что действительно делает оператор tf.strided_slice()
.
doc говорит,
В первый порядок эта операция извлекает срез конца конца - начинается с тензорного ввода, начиная с места, указанного в начале. Срез продолжается добавлением шага к индексу begin, пока все размеры не будут меньше конца. Обратите внимание, что компоненты шага могут быть отрицательными, что вызывает обратный срез.
И в образце
# '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,]]]
, что форма[1, 1, 3]
, кажется ОК. - первый элемент результата находится в
begin = [1, 0, 0]
. Первый элемент результата выборки3
, который равенinput[1,0,0]
, кажется ОК. - фрагмент продолжается добавлением шага к индексу begin. Таким образом, второй элемент результата должен быть
input[begin + strides] = input[2, 1, 1] = 6
, но образец показывает, что второй элемент3
.
Что strided_slice()
делает?
(Примечание: имена методов в образцах, а последний пример неверен.)