Тензорный парафак Python, возвращающий ValueError
У меня есть набор произведенных данных (сгенерированных из явной математической функции), хранящихся в трехмерном тензоре, называемом
A
. При попытке запустить парафак получаю следующее:
Traceback (most recent call last):
File "./ParafacPrintValues.py", line 145, in <module>
A1, A2, A3 = parafac(A,2)
ValueError: not enough values to unpack (expected 3, got 2)
Я импортирую парафак вот так:
from tensorly.decomposition import parafac
Я установил (и снова обновил) тензорную библиотеку с помощью:
pip3 install -U tensorly
Однако когда я запускаю идентичный код в записной книжке Jupyter, он работает должным образом. Похоже, что есть разница между тем, что я установил через Pip, и тем, что находится в IPython ноутбука Jupyter. Кто-нибудь может помочь?
1 ответ
В последней версии TensorLy parafac возвращает CPTensor, который действует как кортеж (вес, факторы): в дополнение к факторам разложения вы также получаете вектор весов. Это связано с тем, что CP-разложение выражает исходный тензор как взвешенную сумму тензоров ранга 1.
Другими словами, если вы используете последнюю версию TensorLy, ваш код должен быть либо:
weights, factors = parafac(tensor, rank)
или, если вы хотите явно сохранить каждый фактор в переменной, как в вашем примере:
weights, (A1, A2, A3) = parafac(tensor, rank)