39c1f27 | Jean Kossaifi | 05 April 2019, 10:47:27 UTC | Added reference | 05 April 2019, 10:47:27 UTC |
0bd6e88 | Jean Kossaifi | 26 March 2019, 23:14:37 UTC | More efficient kruskal_to_tensor | 26 March 2019, 23:14:37 UTC |
a0bde0d | Jean Kossaifi | 26 March 2019, 23:14:11 UTC | Readibility of khatri-rao | 26 March 2019, 23:14:11 UTC |
429b4a7 | Aaron Meurer | 12 March 2019, 18:04:29 UTC | Use tl.kruskal_to_tensor Also remove an unused import. | 12 March 2019, 18:04:29 UTC |
d541246 | Aaron Meurer | 12 March 2019, 17:59:13 UTC | Merge branch 'master' into sparse-parafac-missing | 12 March 2019, 17:59:13 UTC |
d0976b2 | Jean Kossaifi | 12 March 2019, 11:10:40 UTC | Merge pull request #102 from JeanKossaifi/sparse_parafac Adding sparse parafac | 12 March 2019, 11:10:40 UTC |
7d60391 | Jean Kossaifi | 11 March 2019, 20:17:48 UTC | Added test for sparse parafac | 11 March 2019, 20:17:48 UTC |
61ea788 | Jean Kossaifi | 11 March 2019, 12:37:50 UTC | Tests for sparse tenalg | 11 March 2019, 12:37:50 UTC |
8a89e6a | Jean Kossaifi | 11 March 2019, 12:23:18 UTC | TYPO | 11 March 2019, 12:23:18 UTC |
dddc4ed | Jean Kossaifi | 11 March 2019, 12:19:43 UTC | Update Travis + test for sparse with numpy | 11 March 2019, 12:19:43 UTC |
85bab72 | Jean Kossaifi | 10 March 2019, 19:44:02 UTC | Sparse: minor refactor + test tenalg | 10 March 2019, 19:44:02 UTC |
181f83e | Jean Kossaifi | 10 March 2019, 19:00:45 UTC | Adding unfolding_dot_khatri_rao test + misc * wrap unfolding_dot_khatri_rao for sparse * added email for asmeurer | 10 March 2019, 19:00:45 UTC |
8ec55ae | Jean Kossaifi | 07 March 2019, 22:18:24 UTC | Remove unused variable | 07 March 2019, 22:18:24 UTC |
44d7608 | Jean Kossaifi | 07 March 2019, 22:17:44 UTC | Update authors list | 07 March 2019, 22:17:44 UTC |
ab257e6 | Jean Kossaifi | 07 March 2019, 22:09:16 UTC | Refactor mttkrp | 07 March 2019, 22:09:16 UTC |
4996a23 | Jean Kossaifi | 26 February 2019, 14:02:08 UTC | Merge branch 'sparse-parafac' of git://github.com/Quansight/tensorly into sparse_parafac | 26 February 2019, 14:02:08 UTC |
8206345 | Aaron Meurer | 21 February 2019, 02:28:13 UTC | Use tl.shape instead of tensor.shape | 21 February 2019, 02:28:13 UTC |
5d6290b | Aaron Meurer | 21 February 2019, 02:18:18 UTC | Use tl.reshape instead of tensor.reshape | 21 February 2019, 02:18:18 UTC |
d7f320a | Aaron Meurer | 20 February 2019, 23:48:46 UTC | More efficient mttkrp in parafac() It now computes along all ranks at once, while still computing in such a way so as to be sparse-safe (it does not create the full Khatri-Rao as an intermediate array). This is about 3x faster. | 21 February 2019, 00:05:32 UTC |
80e17b5 | Jean Kossaifi | 20 February 2019, 23:54:34 UTC | FIX: sparse imports | 20 February 2019, 23:54:34 UTC |
69db31b | Aaron Meurer | 20 February 2019, 19:16:45 UTC | Fix dot in the numpy backend It must use a.dot(b) for the numpy backend parafac to work properly with sparse inputs. | 20 February 2019, 19:16:45 UTC |
26ce3d1 | Aaron Meurer | 18 February 2019, 19:01:54 UTC | Use direct slicing instead of reshape to create a new axis | 18 February 2019, 19:01:54 UTC |
b491ef1 | Jean Kossaifi | 11 February 2019, 22:57:30 UTC | Merge branch 'sparse-parafac' of git://github.com/Quansight/tensorly into Quansight-sparse-parafac | 11 February 2019, 22:57:30 UTC |
1d54a35 | Aaron Meurer | 11 February 2019, 21:27:36 UTC | Use transpose directly instead of moveaxis in the mttkrp This provides a slight performance improvement. | 11 February 2019, 21:27:36 UTC |
ad0c2a6 | Jean Kossaifi | 06 February 2019, 12:50:37 UTC | FIX for solve in PyTorch backend | 06 February 2019, 12:50:37 UTC |
ddc74bf | Aaron Meurer | 05 February 2019, 20:01:33 UTC | Remove duplicate stack definition | 05 February 2019, 20:01:33 UTC |
cd88d3f | Aaron Meurer | 05 February 2019, 19:45:23 UTC | Fix issues with mxnet backend Some custom methods were not being used because of a bad merge conflict resolution. | 05 February 2019, 19:45:23 UTC |
bbe5336 | Aaron Meurer | 05 February 2019, 18:24:32 UTC | Merge branch 'master' into sparse-parafac | 05 February 2019, 18:24:32 UTC |
2d56a42 | Jean Kossaifi | 05 February 2019, 18:18:43 UTC | Merge pull request #95 from JeanKossaifi/backend-manager Backend refactor + sparse support for numpy | 05 February 2019, 18:18:43 UTC |
114e663 | Jean Kossaifi | 01 February 2019, 15:11:57 UTC | Test backend: remove needless try | 01 February 2019, 15:11:57 UTC |
6fd2894 | Jean Kossaifi | 30 January 2019, 23:58:40 UTC | Add back dynamical dispatch for backend methods Also bump version | 30 January 2019, 23:58:40 UTC |
99f2d6a | Jean Kossaifi | 14 January 2019, 15:55:22 UTC | FIX sparse backend | 14 January 2019, 15:55:22 UTC |
b742c47 | Jean Kossaifi | 10 January 2019, 20:44:06 UTC | FIX contraction tests | 10 January 2019, 20:44:06 UTC |
478d832 | Jean Kossaifi | 10 January 2019, 18:01:10 UTC | Fix the sparse backend | 10 January 2019, 18:01:10 UTC |
c10f44e | Jean Kossaifi | 08 January 2019, 21:55:22 UTC | Merge branch 'master' into backend-manager | 08 January 2019, 21:55:22 UTC |
e1361b8 | Jean Kossaifi | 08 January 2019, 15:55:14 UTC | FIX: forgotten backend registration | 08 January 2019, 15:55:14 UTC |
591f5b7 | Jean Kossaifi | 02 January 2019, 16:16:11 UTC | Revert to functions | 02 January 2019, 16:16:11 UTC |
91f85a5 | Jean Kossaifi | 28 December 2018, 12:10:37 UTC | Refactor + Thread Local + context manager | 28 December 2018, 12:10:37 UTC |
7e69725 | Jean Kossaifi | 25 December 2018, 21:57:43 UTC | update | 25 December 2018, 21:57:43 UTC |
247917c | Jean Kossaifi | 23 December 2018, 23:37:01 UTC | TYPO | 23 December 2018, 23:37:01 UTC |
f04806e | Jean Kossaifi | 23 December 2018, 23:32:26 UTC | MXNET: fix reshape with empty shape | 23 December 2018, 23:32:26 UTC |
05b6b2f | Jean Kossaifi | 23 December 2018, 23:13:49 UTC | Adds tensor contraction | 23 December 2018, 23:13:49 UTC |
3580c8f | Jean Kossaifi | 23 December 2018, 20:57:48 UTC | BackendManager draft | 23 December 2018, 20:57:48 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 |
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 |
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 |
ae0f5eb | Anthony Scopatz | 12 December 2018, 20:06:12 UTC | Merge branch 'sparse' into sparse-parafac | 12 December 2018, 20:06:12 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 |
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 |
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 |
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 |
ce58bc1 | Aaron Meurer | 05 December 2018, 21:26:04 UTC | Add explanatory comment | 05 December 2018, 21:26:04 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 |
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 |