Как уменьшить среднее значение игнорирования нулевой строки в 3D-тензоре ⇐ Python
Как уменьшить среднее значение игнорирования нулевой строки в 3D-тензоре
У меня есть 3D-тензор A имеет форму (batch_size, N, dim), а 3D-тензор B имеет форму (размер_пакета, N, 2). В котором B имеет некоторую строку заполнения для заполнения до N (который не является нулевым вектором, поскольку он уже передан в некоторых функциях). Чтобы узнать, какая строка дополнена, мне нужно найти тензор B. Если строка k дополнена, значение в строке k в тензор B равен [0, 0]. Я хочу отфильтровать эти дополненные строки в A перед вычислением среднего значения.
После приведения A к среднему значению по dim=1 результат имеет форму (batch_size, dim).
Изменить: я нашел одно решение. Любое другое решение приветствуется!
# сжать в 2D A = A.view(-1, A.size(-1)) B = Б.просмотр(-1, Б.размер(-1)) # замаскировать дополненную строку маска = torch.sum(B, dim=-1) маска[маска!=0] = 1 # дело в том, что мне нужно присвоить дополненную строку в A нулем A = маска.разжать(-1)*A # вычислить реальный размер каждого кластера. маска = маска.view(batch_size, -1) Batch_cluster_size = torch.sum(маска, dim=-1, keepdim=True) # конвертируем обратно в исходную форму A = A.view(batch_size, -1, A.size(-1)) вывод = torch.sum(A, dim=1)/batch_cluster_size
У меня есть 3D-тензор A имеет форму (batch_size, N, dim), а 3D-тензор B имеет форму (размер_пакета, N, 2). В котором B имеет некоторую строку заполнения для заполнения до N (который не является нулевым вектором, поскольку он уже передан в некоторых функциях). Чтобы узнать, какая строка дополнена, мне нужно найти тензор B. Если строка k дополнена, значение в строке k в тензор B равен [0, 0]. Я хочу отфильтровать эти дополненные строки в A перед вычислением среднего значения.
После приведения A к среднему значению по dim=1 результат имеет форму (batch_size, dim).
Изменить: я нашел одно решение. Любое другое решение приветствуется!
# сжать в 2D A = A.view(-1, A.size(-1)) B = Б.просмотр(-1, Б.размер(-1)) # замаскировать дополненную строку маска = torch.sum(B, dim=-1) маска[маска!=0] = 1 # дело в том, что мне нужно присвоить дополненную строку в A нулем A = маска.разжать(-1)*A # вычислить реальный размер каждого кластера. маска = маска.view(batch_size, -1) Batch_cluster_size = torch.sum(маска, dim=-1, keepdim=True) # конвертируем обратно в исходную форму A = A.view(batch_size, -1, A.size(-1)) вывод = torch.sum(A, dim=1)/batch_cluster_size
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение