问题是你是修改 params
(相同的精确数据)在每次迭代中parfor
环形。如果你有两项并行的工作,理论上他们都会试图改变same params
显然会引起问题的结构。
您的选择是创建一个array of params
在循环之前,然后使用数组中的每个元素。
%// Duplicate params once for each time through the parfor loop
params_array = repmat(params, size(lambda1_list));
parfor l1 = 1:length(lambda1_list)
for l2 = 1:length(lambda2_list)
params_array(l1).lambda1 = lambda1_list(l1);
params_array(l1).lambda2 = lambda2_list(l2);
[totBeta,theta,omega,rho,nu] = Learn_weights(dictionary(train_set,:), y(train_set,:), params_array(l1));
end
end
另一个选项是创建一个副本params
在修改它之前。
parfor l1 = 1:length(lambda1_list)
%// Make a copy of the params that is local to this loop iteration
this_param = params;
for l2 = 1:length(lambda2_list)
%// Modify this copy
this_param.lambda1 = lambda1_list(l1);
this_param.lambda2 = lambda2_list(l2);
%// Pass this modified copy to Learn_weights
[totBeta,theta,omega,rho,nu] = Learn_weights(dictionary(train_set,:), y(train_set,:), this_param);
end
end