From 4e50ac3daae2189e8cce4e40055460117c752870 Mon Sep 17 00:00:00 2001 From: Arthur Mensch Date: Wed, 27 May 2015 09:53:05 +0200 Subject: [PATCH 1/2] Setting n_jobs = 1 during online dictionary learning process Copying X before Lasso.fit call, for lasso_cd algorithm, to avoid buffer source-array read-only error --- sklearn/decomposition/dict_learning.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sklearn/decomposition/dict_learning.py b/sklearn/decomposition/dict_learning.py index f563627a978ac..1f59d7b0fb04e 100644 --- a/sklearn/decomposition/dict_learning.py +++ b/sklearn/decomposition/dict_learning.py @@ -110,7 +110,8 @@ def _sparse_encode(X, dictionary, gram, cov=None, algorithm='lasso_lars', clf = Lasso(alpha=alpha, fit_intercept=False, precompute=gram, max_iter=max_iter, warm_start=True) clf.coef_ = init - clf.fit(dictionary.T, X.T) + # Copying X to avoid buffer source-array read only error + clf.fit(dictionary.T, X.copy().T) new_code = clf.coef_ elif algorithm == 'lars': @@ -669,8 +670,9 @@ def dict_learning_online(X, n_components=2, alpha=1, n_iter=100, print ("Iteration % 3i (elapsed time: % 3is, % 4.1fmn)" % (ii, dt, dt / 60)) + # Setting n_jobs = 1 to avoid creating workers at each iteration this_code = sparse_encode(this_X, dictionary.T, algorithm=method, - alpha=alpha, n_jobs=n_jobs).T + alpha=alpha, n_jobs=1).T # Update the auxiliary variables if ii < batch_size - 1: From 4c94ee649fc3300ddd3af5faf1ad460e8c7e654d Mon Sep 17 00:00:00 2001 From: Arthur Mensch Date: Wed, 27 May 2015 14:53:41 +0200 Subject: [PATCH 2/2] removed copy (bug fixed in another PR --- sklearn/decomposition/dict_learning.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sklearn/decomposition/dict_learning.py b/sklearn/decomposition/dict_learning.py index 1f59d7b0fb04e..e8408e2fdb265 100644 --- a/sklearn/decomposition/dict_learning.py +++ b/sklearn/decomposition/dict_learning.py @@ -110,8 +110,7 @@ def _sparse_encode(X, dictionary, gram, cov=None, algorithm='lasso_lars', clf = Lasso(alpha=alpha, fit_intercept=False, precompute=gram, max_iter=max_iter, warm_start=True) clf.coef_ = init - # Copying X to avoid buffer source-array read only error - clf.fit(dictionary.T, X.copy().T) + clf.fit(dictionary.T, X.T) new_code = clf.coef_ elif algorithm == 'lars':