Тензорный парафак 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)
Другие вопросы по тегам