Допустим, у меня есть тензор A формы [x, y, z]
.
Для объяснения, давайте предположим, что A имеет форму [2,4,3]
:
[[[1,2,3],[2,2,3],[4,4,4],[1,1,1]], [[2,2,2],[2,2,2],[2,2,2],[3,3,3]]]
Я хочу «замаскировать» этот тензор так, чтобы
если элементы с индексом 1 в самом внутреннем измерении равны 2 , то окружающие тензоры не должны изменяться, в противном случае все они изменяются на 0.
В этом примере тензор должен стать
[[[1,2,3],[2,2,3],[0,0,0],[0,0,0]], [[2,2,2],[2,2,2],[2,2,2],[0,0,0]]]
Как правильно использовать тензор потока для выполнения этой операции? Я попробовал несколько подходов и был ограничен тем, что работа с тензорами, которые содержат тензор переменного размера, болезненна в тензорном потоке.
Единственное решение, которое я могу придумать, - это использовать map_fn
для перебора тензора (до измерения -2). Но использование map_fn
сложно и ухудшит производительность, потому что
Если у меня есть тензоры более высокого ранга (скажем, 4+), необходимо использовать несколько map_fn
внутренностей map_fn
.
map_fn
не может работать на графическом процессоре и может снизить производительность, особенно в случае большого набора данных.
Кто-нибудь может пролить свет на это?