#python #numpy #pytorch #torch #algebra
#python #numpy #pytorch #факел #алгебра
Вопрос:
У меня есть 4-мерный параметр тензора факела, определенный следующим образом :
nn.parameter.Parameter(data=torch.Tensor((13,13,13,13)), requires_grad=True)
и четыре тензора с уменьшениями (batch_size,13) (или один тензор с уменьшениями (batch_size, 4,13)).
Я хотел бы получить тензор с размерами (batch_size), равными формуле в конце этого рисунка :
[РЕДАКТИРОВАТЬ: я допустил ошибку в первом изображении, я ее исправил]
Я видел в документации torch функцию tensordot, но мне не удается заставить ее работать самостоятельно.
Комментарии:
1. Просто чтобы быть уверенным, вы индексируете свой вывод B с
i
помощью, но он отличается от переменной mute, для которой вы выполняете самую внешнюю сумму, верно?2. Это
result = (A[None, :, :, :, :] * X[:, :, None, None, None] * Y[:, None, :, None, None] * Z[:, None, None, :, None] * T[:, None, None, None, :]).flatten(1).sum(dim=1)
то, что вы хотите? Если это так, я могу опубликовать ответ с объяснением.3. Единственная причина, по которой я в замешательстве и не публикую в качестве ответа, — это использование индекса i в левой и правой частях уравнения, которое вы опубликовали.
4. @trialNerror Я исправил свою картинку, и вы правы, мне пришлось добавить переменную b для пакетных элементов.
5. @jodag я не уверен, что это то, что я пытаюсь сделать, поскольку X, Y, Z и T в вашем уравнении являются тензорами dims 5, а мои — тензорами dims 2.
Ответ №1:
всякий раз, когда у вас есть забавный тензорный продукт torch.einsum
(или numpy.einsum
), ваш друг:
batch_size = 5
A = torch.rand(13, 13, 13, 13)
a = torch.rand(batch_size, 13)
b = torch.rand(batch_size, 13)
c = torch.rand(batch_size, 13)
d = torch.rand(batch_size, 13)
B = torch.einsum('ijkl,bi,bj,bk,bl->b', A, a, b, c, d)
Комментарии:
1. Отлично, большое спасибо, не знал об этой функции. Может ли он работать и на gpu?
2. @Jogima_cyber
torch.einsum
является частью pytorch basic operations. Он не только работает на cpu / gpu, но и распространяет градиенты на входные тензоры.3. Такие замечательные, такие сложные скрытые вычисления.