Как выполнить einsum для разложенных тензорных операций?

Я пытаюсь измерить производительность ускорения между np.einsum('bcd,bce,bef->df' tensor1, tensor2, tensor1)а также np.einsum('...->...', decomposed_tensor1, tensor2, decomposed_tensor1)операции. Метод разложения, который я использую,tensorly.decomposition.tucker

Однако для decomposed_tensor, тензорных операций довольно сложно следовать индексам, которые я должен суммировать.

Ниже приведены размеры тензоров и разложенных тензоров.

      from tensorly.decomposition import tucker
import numpy as np

d1, d2, d3 = 256, 4, 12

# the tensor of interest 
tensor1 = np.random.rand(d1, d2, d3)

# a tensor with appropriate dimensions to perform operations
tensor2 = np.random.rand(d1, d2, d2)

# tensor1, tensor2, tensor1 operation
tens1Tens2tens1 = np.einsum('ilk,ilm,imp->kp', tensor1, tensor2, tensor1, optimize='optimal')

# tucker decomposition of the tensor1
rank_tucker = (8,4,2)
core, factors = tucker(tensor1, rank_tucker)
print("Core Dimension:\t\t",core.shape)
print("Factors Dimensions:\t", [f.shape for f in factors])

# decomposed_tensor1, tensor2, decomposed_tensor1
# decTens1tens2decTens1 = np.einsum('...->...', core, factors, tensor2, core, factors)

Вне:

      Core Dimension:      (8, 4, 2)
Factors Dimensions:  [(256, 8), (4, 4), (12, 2)]

Может ли кто-нибудь подсказать мне, как мне выполнять эти разложенные тензорные и тензорные операции?

Спасибо.

0 ответов

Другие вопросы по тегам