3cbf815 | Aaron Meurer | 19 December 2018, 21:41:27 UTC | Fix the PDF build of the docs The LaTeX preamble wasn't properly included in the latex_elements dictionary in conf.py. | 19 December 2018, 21:41:27 UTC |
122acd7 | Aaron Meurer | 17 December 2018, 23:04:09 UTC | Add information on masks (tensorly/tensorly#91) | 17 December 2018, 23:04:09 UTC |
5c81d44 | Anthony Scopatz | 13 December 2018, 15:28:21 UTC | Merge branch 'sparse-parafac' into sparse-parafac-missing | 13 December 2018, 15:28:21 UTC |
12e1765 | Anthony Scopatz | 13 December 2018, 15:27:45 UTC | Merge branch 'sparse' into sparse-parafac | 13 December 2018, 15:27:45 UTC |
02a0942 | Anthony Scopatz | 13 December 2018, 15:24:27 UTC | Merge branch 'sparse' into sparse-docs | 13 December 2018, 15:24:27 UTC |
895a805 | Anthony Scopatz | 13 December 2018, 15:22:33 UTC | Merge branch 'sparse' of github.com:Quansight/tensorly into sparse | 13 December 2018, 15:22:33 UTC |
19d538b | Anthony Scopatz | 13 December 2018, 15:12:03 UTC | Merge branch 'sparse' into sparse-robust-pca | 13 December 2018, 15:12:03 UTC |
952b684 | Anthony Scopatz | 13 December 2018, 15:11:01 UTC | some minor sparse fixes | 13 December 2018, 15:11:01 UTC |
3c8fec9 | Hameer Abbasi | 13 December 2018, 11:49:53 UTC | Wrap non-negative PARAFAC for the sparse back-end. | 13 December 2018, 11:49:53 UTC |
4922c55 | Hameer Abbasi | 13 December 2018, 11:49:27 UTC | Fix typo in non-negative PARAFAC kwarg. | 13 December 2018, 11:49:27 UTC |
ea4ad8f | Aaron Meurer | 12 December 2018, 23:05:30 UTC | Correct kruskal_to_tensor() with both weights and a mask | 12 December 2018, 23:05:30 UTC |
3cfd3e4 | Aaron Meurer | 12 December 2018, 22:51:40 UTC | Make the parafac mask support sparse friendly This required adding a mask flag to kruskal_to_tensor() and kr() so that the mask could be absorbed into the calculation in a sparse friendly way. In order to be sparse friendly, the mask should be a sparse array with a fill value of 1 (True). In other words, the number of missing values should itself be sparse. The generic kr() algorithm was rewritten to use a generic outer product, and kruskal_to_tensor() now uses sum instead of dot (the NumPy kr() just multiplies the mask). | 12 December 2018, 22:51:40 UTC |
f0ef0a1 | Aaron Meurer | 12 December 2018, 22:42:45 UTC | Fix nonnegative -> non_negative | 12 December 2018, 22:42:45 UTC |
7a7ba8a | Aaron Meurer | 12 December 2018, 21:29:24 UTC | Revert "Add broadcast_to to the backends" Turns out I didn't need it. This reverts commit 729b8b95ab736916929d33d89192423c912b2b4d. | 12 December 2018, 21:29:24 UTC |
729b8b9 | Aaron Meurer | 12 December 2018, 21:29:12 UTC | Add broadcast_to to the backends | 12 December 2018, 21:29:12 UTC |
f8427ef | Anthony Scopatz | 12 December 2018, 20:06:52 UTC | Merge branch 'sparse' into sparse-robust-pca | 12 December 2018, 20:06:52 UTC |
ae0f5eb | Anthony Scopatz | 12 December 2018, 20:06:12 UTC | Merge branch 'sparse' into sparse-parafac | 12 December 2018, 20:06:12 UTC |
28ee1fc | Anthony Scopatz | 12 December 2018, 20:05:18 UTC | Merge branch 'sparse' into sparse-docs | 12 December 2018, 20:05:18 UTC |
1f1c500 | Anthony Scopatz | 12 December 2018, 20:03:59 UTC | remove sparse tensor | 12 December 2018, 20:03:59 UTC |
218bcac | Aaron Meurer | 11 December 2018, 21:34:11 UTC | Start adding support for masked values to parafac() The idea to modify the tensor with the masked array is from Tomasi, Giorgio, and Rasmus Bro. "PARAFAC and missing values." Chemometrics and Intelligent Laboratory Systems 75.2 (2005): 163-180. This still needs to be modified to continue to work with sparse arrays. Right now, it fully decomposes the factors to compute the modification, which will not work if the fully decomposed factors do not fit in memory. | 11 December 2018, 21:34:11 UTC |
367f376 | Aaron Meurer | 11 December 2018, 20:45:23 UTC | Fix some text in a comment | 11 December 2018, 20:45:23 UTC |
7a8f205 | Anthony Scopatz | 11 December 2018, 18:45:05 UTC | convert output of svd_threshold() to orginal tensor type, as needed. | 11 December 2018, 18:45:05 UTC |
492455f | Aaron Meurer | 10 December 2018, 22:19:44 UTC | Add non_negative_parafac to the sparse backend | 10 December 2018, 22:19:44 UTC |
66d66a0 | Aaron Meurer | 10 December 2018, 22:10:02 UTC | Nonnegative PARAFAC supports sparse now as well | 10 December 2018, 22:10:02 UTC |
15ed539 | Aaron Meurer | 10 December 2018, 21:26:07 UTC | Fold non_negative_parafac() into parafac(non_negative=True) non_negative_parafac() still exists as a alias to it. | 10 December 2018, 21:26:07 UTC |
96392e1 | Aaron Meurer | 10 December 2018, 20:45:34 UTC | tucker should be partial_tucker | 10 December 2018, 20:45:34 UTC |
d0be36f | Anthony Scopatz | 10 December 2018, 19:43:04 UTC | fix typo: U -> V | 10 December 2018, 19:43:04 UTC |
2312d75 | Aaron Meurer | 10 December 2018, 19:02:05 UTC | Add an example showing the parafac decomposition with sparse | 10 December 2018, 19:02:05 UTC |
a5386f8 | Aaron Meurer | 10 December 2018, 18:40:46 UTC | Remove cruft | 10 December 2018, 18:40:46 UTC |
562ee2b | Aaron Meurer | 10 December 2018, 18:39:08 UTC | Add some more docs about the sparse backends | 10 December 2018, 18:39:08 UTC |
75cc845 | Aaron Meurer | 10 December 2018, 18:28:25 UTC | Remove sparse_backend from the development_guide index | 10 December 2018, 18:28:25 UTC |
d8cfd52 | Aaron Meurer | 10 December 2018, 18:27:56 UTC | Fix filename spelling | 10 December 2018, 18:27:56 UTC |
08077ba | Aaron Meurer | 10 December 2018, 18:07:40 UTC | Add the sparse backend docs to the index | 10 December 2018, 18:07:40 UTC |
b632cc2 | Aaron Meurer | 10 December 2018, 18:07:17 UTC | Move the sparse backend docs from the development guide to the user guide | 10 December 2018, 18:07:17 UTC |
f90b049 | Aaron Meurer | 10 December 2018, 18:02:55 UTC | Make the docs always builds with the git version of tensorly | 10 December 2018, 18:02:55 UTC |
ee17745 | Aaron Meurer | 07 December 2018, 20:21:26 UTC | Convert A and b to csc in sparse.solve This avoids warnings from scipy that csc is more efficient when using solve. | 07 December 2018, 20:21:26 UTC |
ba19cfc | Aaron Meurer | 06 December 2018, 22:30:10 UTC | Add kruskal_to_tensor to the sparse backend | 06 December 2018, 22:30:10 UTC |
fe0694b | Jean Kossaifi | 06 December 2018, 21:44:34 UTC | Adding a KruskalTensor class | 06 December 2018, 21:44:34 UTC |
2769207 | Anthony Scopatz | 06 December 2018, 20:15:45 UTC | use dense linear alg when needed in partial_svd | 06 December 2018, 20:15:45 UTC |
6cb7e71 | Aaron Meurer | 06 December 2018, 19:25:21 UTC | Fix typo in mxnet moveaxis | 06 December 2018, 19:25:21 UTC |
91d56bc | Aaron Meurer | 06 December 2018, 19:23:38 UTC | Remove axis keyword argument from prod() call It is a different keyword argument name for different backends. | 06 December 2018, 19:23:38 UTC |
680c750 | Aaron Meurer | 06 December 2018, 19:15:03 UTC | Fix stack for the pytorch backend It calls the second argument 'dim' instead of 'axis'. | 06 December 2018, 19:15:03 UTC |
57f8751 | Aaron Meurer | 06 December 2018, 19:09:58 UTC | Use an implementation of moveaxis that supports negative indices for mxnet | 06 December 2018, 19:09:58 UTC |
ce48e52 | Aaron Meurer | 06 December 2018, 18:53:58 UTC | Make sure the dot product is against a n x 1 vector Only NumPy will take the dot product of a shape (m, n) with shape (n,) array it seems. | 06 December 2018, 18:59:30 UTC |
d5a2c48 | Aaron Meurer | 06 December 2018, 18:49:08 UTC | Fix moveaxis for the pytorch backend for negative source or target | 06 December 2018, 18:49:08 UTC |
0bb275a | Aaron Meurer | 06 December 2018, 18:47:22 UTC | Fix moveaxis for the tensorflow backend for negative source or target arguments | 06 December 2018, 18:47:22 UTC |
b51171b | Aaron Meurer | 06 December 2018, 18:33:05 UTC | Use a.dot(b) for the numpy backend dot This fixes an issue with the sparse library when dotting a sparse array with a dense array. | 06 December 2018, 18:33:05 UTC |
71150f7 | Aaron Meurer | 06 December 2018, 18:15:25 UTC | Add stack to the pytorch backend | 06 December 2018, 18:15:25 UTC |
ca56b96 | Aaron Meurer | 06 December 2018, 18:13:29 UTC | Fix an instance of array.dot -> tl.dot | 06 December 2018, 18:13:29 UTC |
814d254 | Aaron Meurer | 06 December 2018, 18:07:40 UTC | Use tl.dot and tl.transpose instead of .dot and .T | 06 December 2018, 18:07:40 UTC |
2a0d58c | Aaron Meurer | 06 December 2018, 18:03:58 UTC | Merge branch 'sparse' into sparse-parafac | 06 December 2018, 18:03:58 UTC |
21d49b7 | Aaron Meurer | 06 December 2018, 17:57:28 UTC | Add stack to the other backends | 06 December 2018, 17:57:28 UTC |
9bf66a4 | Aaron Meurer | 06 December 2018, 17:51:49 UTC | Use tl.moveaxis instead of np.moveaxis | 06 December 2018, 17:51:49 UTC |
701b9ec | Anthony Scopatz | 05 December 2018, 21:49:57 UTC | V gets transposed in quick return | 05 December 2018, 21:49:57 UTC |
ce58bc1 | Aaron Meurer | 05 December 2018, 21:26:04 UTC | Add explanatory comment | 05 December 2018, 21:26:04 UTC |
c0bba38 | Anthony Scopatz | 05 December 2018, 20:07:29 UTC | numpy sparse clip() fix and partial_svd fix for nnz == 0 tensors | 05 December 2018, 20:07:29 UTC |
1cf4b5c | Aaron Meurer | 05 December 2018, 19:04:08 UTC | Print the variation after 2 iterations instead of 3 | 05 December 2018, 19:04:08 UTC |
d382f20 | Aaron Meurer | 05 December 2018, 19:03:59 UTC | Easier to read verbose output | 05 December 2018, 19:03:59 UTC |
ab42284 | Aaron Meurer | 05 December 2018, 18:53:16 UTC | Fix typo in norm calculation | 05 December 2018, 18:53:16 UTC |
ccad6e1 | Aaron Meurer | 04 December 2018, 22:23:56 UTC | Add stack to the backend core so that tl.stack works | 04 December 2018, 22:23:56 UTC |
a769a0b | Aaron Meurer | 04 December 2018, 21:50:57 UTC | Remove random-sparse method from initialize_factors() | 04 December 2018, 21:50:57 UTC |
111e636 | Aaron Meurer | 04 December 2018, 21:42:43 UTC | Add stack() to the numpy and sparse backends It still needs to be added to the other backends. | 04 December 2018, 21:42:43 UTC |
0a08c08 | Aaron Meurer | 04 December 2018, 21:41:59 UTC | Leave in some commented out code, but clarify what it is | 04 December 2018, 21:41:59 UTC |
3b67a89 | Aaron Meurer | 04 December 2018, 21:40:51 UTC | Indicate how many modes there are in the verbose message | 04 December 2018, 21:40:51 UTC |
b9eb244 | Anthony Scopatz | 04 December 2018, 21:13:01 UTC | initial robust_pca wrapping | 04 December 2018, 21:13:01 UTC |
2b407b2 | Aaron Meurer | 04 December 2018, 20:04:04 UTC | Fix IndexError in parafac | 04 December 2018, 20:04:04 UTC |
b3054cc | Aaron Meurer | 04 December 2018, 19:12:46 UTC | Compute the norm at the end of ALS in a sparse-safe way We can never compute the exact kruskal_to_tensor() for a decomposed sparse tensor, because it will be highly dense due to numerical inaccuracies (the zeroes of the original will become near-zeroes). Rather, we compute ||tensor - kruskal_to_tensor(factors)|| as sqrt(||tensor||^2 + ||factors||^2 - 2<tensor, factors>). The second term can be computed via sum(hadamard_product(f.T.dot(f) for f in factors)). See section 5.2.5 from Bader, Brett W., and Tamara G. Kolda. "Efficient MATLAB computations with sparse and factored tensors." SIAM Journal on Scientific Computing 30.1 (2007): 205-231. The third term can be computed from the matricized Khatri-Rao product computed earlier in the algorithm. The idea was this was taken from the above cited paper and corresponding source code. See https://gitlab.com/tensors/tensor_toolbox/blob/master/cp_als.m and https://gitlab.com/tensors/tensor_toolbox/blob/master/@ktensor/norm.m. The norm computed here is not numerically identical to the norm as previously computed, due to numerical differences. This still requires cleanup to continue to work with non-sparse arrays (I haven't factored out sparse.stack to the backend yet). | 04 December 2018, 19:12:46 UTC |
4ff986b | Anthony Scopatz | 03 December 2018, 21:51:38 UTC | more docs | 03 December 2018, 21:51:38 UTC |
e49a448 | Anthony Scopatz | 03 December 2018, 20:48:05 UTC | try to fix local_threadsafe tests | 03 December 2018, 20:48:05 UTC |
6a5ac92 | Anthony Scopatz | 03 December 2018, 20:38:58 UTC | import tensorly as tl | 03 December 2018, 20:38:58 UTC |
2c8555a | Anthony Scopatz | 03 December 2018, 20:18:00 UTC | make_session_default -> local_threadsafe | 03 December 2018, 20:18:00 UTC |
359ee35 | Aaron Meurer | 30 November 2018, 23:34:37 UTC | Some more verbose printing This commit should eventually be reverted. | 30 November 2018, 23:34:37 UTC |
c864360 | Aaron Meurer | 30 November 2018, 23:34:17 UTC | Better variable names | 30 November 2018, 23:34:17 UTC |
2653b70 | Aaron Meurer | 30 November 2018, 20:30:21 UTC | Experimental work in progress support for sparse matrix-times-khatri-rao | 30 November 2018, 20:30:21 UTC |
f2fc3f1 | Anthony Scopatz | 29 November 2018, 23:39:35 UTC | added sparse tensor to initi | 29 November 2018, 23:39:35 UTC |
1608ad0 | Anthony Scopatz | 29 November 2018, 23:20:50 UTC | added sparse_tensor and backend system docs | 29 November 2018, 23:20:50 UTC |
6e03faa | Anthony Scopatz | 29 November 2018, 22:22:14 UTC | revert tests to using relative imports | 29 November 2018, 22:22:14 UTC |
e636133 | Anthony Scopatz | 28 November 2018, 21:13:04 UTC | Sparse developer docs fixes | 28 November 2018, 21:13:04 UTC |
eeac726 | Anthony Scopatz | 28 November 2018, 19:05:53 UTC | Sparse developer docs | 28 November 2018, 19:05:53 UTC |
79a29e3 | Aaron Meurer | 26 November 2018, 23:32:43 UTC | Clear trailing whitespace in candecomp_parafac.py | 26 November 2018, 23:32:43 UTC |
0bbba71 | Aaron Meurer | 26 November 2018, 23:32:26 UTC | Split out some variables for easier debugging | 26 November 2018, 23:32:26 UTC |
29c6ddd | Aaron Meurer | 26 November 2018, 23:30:51 UTC | Add random-sparse initialize_factors method This is still experimental. I still need to figure out how to reliably get an initial set of factors that are dense for the algorithm to work but sparse enough to work with large sparse tensors. | 26 November 2018, 23:30:51 UTC |
b1e93bb | Aaron Meurer | 26 November 2018, 23:29:55 UTC | Add solve for the sparse backend | 26 November 2018, 23:29:55 UTC |
f1941ec | Aaron Meurer | 26 November 2018, 23:29:26 UTC | Wrap parafac for sparse (it doesn't actually work yet) | 26 November 2018, 23:29:26 UTC |
ba1c13b | Anthony Scopatz | 26 November 2018, 20:48:05 UTC | fixed make_session_default tests | 26 November 2018, 20:48:05 UTC |
f6a908d | Anthony Scopatz | 26 November 2018, 20:42:21 UTC | some minor refactors | 26 November 2018, 20:42:21 UTC |
f532a16 | Anthony Scopatz | 26 November 2018, 19:35:52 UTC | Skip MPS tests when on tensorflow backend due to unsupported fancy indexing operations | 26 November 2018, 19:35:52 UTC |
c66bd7b | Anthony Scopatz | 26 November 2018, 18:47:37 UTC | Merge branch 'master' into sparse | 26 November 2018, 18:47:37 UTC |
3a35360 | Jean Kossaifi | 26 November 2018, 16:25:12 UTC | DOC FIX: home page user_guide link | 26 November 2018, 16:25:12 UTC |
9fc1f82 | Aaron Meurer | 20 November 2018, 19:03:33 UTC | Add argmin and argmax for tensorflow | 20 November 2018, 19:03:33 UTC |
4848bf9 | Aaron Meurer | 19 November 2018, 23:45:40 UTC | register_method is only for functions that *aren't* defined as staticmethods | 19 November 2018, 23:45:40 UTC |
23d21ba | Aaron Meurer | 19 November 2018, 23:32:04 UTC | Fix assert_ import | 19 November 2018, 23:32:04 UTC |
f7a9519 | Aaron Meurer | 19 November 2018, 23:28:15 UTC | Add argmin and argmax to __init__.py | 19 November 2018, 23:28:15 UTC |
e4144a0 | Aaron Meurer | 19 November 2018, 23:09:15 UTC | Merge branch 'master' into sparse | 19 November 2018, 23:09:15 UTC |
ff75e67 | Jim Crist | 30 October 2018, 14:41:47 UTC | Add tensorly.contrib.sparse.tenalg | 30 October 2018, 14:41:47 UTC |
ec8add1 | Jean Kossaifi | 29 October 2018, 14:45:26 UTC | Random: deprecate old functions | 29 October 2018, 14:45:26 UTC |
841e7e6 | Jean Kossaifi | 29 October 2018, 14:30:25 UTC | DOC: update random module API | 29 October 2018, 14:30:25 UTC |
e782136 | Jean Kossaifi | 29 October 2018, 14:29:04 UTC | Refactored random module | 29 October 2018, 14:29:04 UTC |
c5cef8e | Jean Kossaifi | 29 October 2018, 14:28:39 UTC | Sanity checks on rank for MPS | 29 October 2018, 14:28:39 UTC |
54297a3 | Jean Kossaifi | 28 October 2018, 21:00:47 UTC | FIX: use tl.ones not np. | 28 October 2018, 21:00:47 UTC |