并行化MATLAB代码

并行化MATLAB代码,matlab,parallel-processing,Matlab,Parallel Processing,您好,我想使用并行化我的MATLAB代码来运行高计算服务器。这是代码,使图像数据库的深入学习。为了并行化我找到的代码,我必须为parfor循环。但我在第一个循环或第二个循环中使用了它,它显示由于变量imdb和image_counter,错误parfor无法运行。任何人请帮我改变代码,与parfor一起工作 for i = 1:length(cur_images) X = sprintf('image Numb: %d ',i); disp(X)

您好,我想使用并行化我的MATLAB代码来运行高计算服务器。这是代码,使图像数据库的深入学习。为了并行化我找到的代码,我必须为parfor循环。但我在第一个循环或第二个循环中使用了它,它显示由于变量imdb和image_counter,错误parfor无法运行。任何人请帮我改变代码,与parfor一起工作

for i = 1:length(cur_images)
            X = sprintf('image Numb: %d ',i);
            disp(X)
        cur_image = load(cur_images{i,:});
        cur_image=(cur_image.Image.crop);


        %----------------------------------------------

        cur_image = imresize(cur_image, image_size);


        if(rgb < 1)
            imdb.images.data(:,:,1,image_counter) = cur_image;
        else
            imdb.images.data(:,:,1,image_counter) = cur_image(:,:,1); 
            imdb.images.data(:,:,2,image_counter) = cur_image(:,:,2);
            imdb.images.data(:,:,3,image_counter) = cur_image(:,:,3); 
            imdb.images.data(:,:,4,image_counter) = cur_image(:,:,4); 
            imdb.images.data(:,:,5,image_counter) = cur_image(:,:,5); 
            imdb.images.data(:,:,6,image_counter) = cur_image(:,:,6); 
            imdb.images.data(:,:,7,image_counter) = cur_image(:,:,7); 
            imdb.images.data(:,:,8,image_counter) = cur_image(:,:,8); 
            imdb.images.data(:,:,9,image_counter) = cur_image(:,:,9); 
            imdb.images.data(:,:,10,image_counter) = cur_image(:,:,10);

        end


        imdb.images.set(     1,image_counter) = set;             
        image_counter = image_counter + 1;
    end
i=1的
长度(当前图像)
X=sprintf('图像编号:%d',i);
显示(X)
cur_image=load(cur_image{i,:});
cur_image=(cur_image.image.crop);
%----------------------------------------------
cur_image=imresize(cur_image,image_size);
如果(rgb<1)
imdb.images.data(:,:,1,图像计数器)=当前图像;
其他的
imdb.images.data(:,:,1,图像计数器)=当前图像(:,:,1);
imdb.images.data(:,:,2,图像计数器)=当前图像(:,:,2);
imdb.images.data(:,:,3,图像计数器)=当前图像(:,:,3);
imdb.images.data(:,:,4,图像计数器)=当前图像(:,:,4);
imdb.images.data(:,:,5,图像计数器)=当前图像(:,:,5);
imdb.images.data(:,:,6,图像计数器)=当前图像(:,:,6);
imdb.images.data(:,:,7,图像计数器)=当前图像(:,:,7);
imdb.images.data(:,:,8,图像计数器)=当前图像(:,:,8);
imdb.images.data(:,:,9,图像计数器)=当前图像(:,:,9);
imdb.images.data(:,:,10,图像计数器)=当前图像(:,:,10);
结束
imdb.images.set(1,图像计数器)=set;
图像计数器=图像计数器+1;
结束

这里的主要问题是,您无法按照您尝试的方式分配到
parfor
内部结构的字段。此外,您的输出需要通过循环变量进行索引,以符合-的条件,即不要使用
image\u计数器
。把这些放在一起,你需要更像这样的东西:

% Make a numeric array to store the output.
data_out = zeros([image_size, 10, length(cur_images)]);

parfor i = 1:length(cur_images)
    cur_image = load(cur_images{i, :});
    cur_image=(cur_image.Image.crop);
    cur_image = imresize(cur_image, image_size);

    % Now, assign into 'data_out'. A little care needed
    % here.
    if rgb < 1
        data_tmp = zeros([image_size, 10]);
        data_tmp(:, :, 1) = cur_image;
    else
        data_tmp = cur_image;
    end
    data_out(:, :, :, i) = data_tmp;
end
imdb.images.data = data_out;
%创建一个数字数组来存储输出。
数据输出=零([图像大小,10,长度(当前图像)];
parfor i=1:长度(当前图像)
cur_image=load(cur_image{i,:});
cur_image=(cur_image.image.crop);
cur_image=imresize(cur_image,image_size);
%现在,分配到“数据输出”。需要一点照顾
%在这里。
如果rgb<1
数据_tmp=零([image_size,10]);
数据tmp(:,:,1)=当前图像;
其他的
数据\u tmp=当前图像;
结束
数据输出(:,:,:,i)=数据tmp;
结束
imdb.images.data=数据输出;

这里的主要问题是,您无法按照您尝试的方式分配到
parfor
内部结构的字段。此外,您的输出需要通过循环变量进行索引,以符合-的条件,即不要使用
image\u计数器
。把这些放在一起,你需要更像这样的东西:

% Make a numeric array to store the output.
data_out = zeros([image_size, 10, length(cur_images)]);

parfor i = 1:length(cur_images)
    cur_image = load(cur_images{i, :});
    cur_image=(cur_image.Image.crop);
    cur_image = imresize(cur_image, image_size);

    % Now, assign into 'data_out'. A little care needed
    % here.
    if rgb < 1
        data_tmp = zeros([image_size, 10]);
        data_tmp(:, :, 1) = cur_image;
    else
        data_tmp = cur_image;
    end
    data_out(:, :, :, i) = data_tmp;
end
imdb.images.data = data_out;
%创建一个数字数组来存储输出。
数据输出=零([图像大小,10,长度(当前图像)];
parfor i=1:长度(当前图像)
cur_image=load(cur_image{i,:});
cur_image=(cur_image.image.crop);
cur_image=imresize(cur_image,image_size);
%现在,分配到“数据输出”。需要一点照顾
%在这里。
如果rgb<1
数据_tmp=零([image_size,10]);
数据tmp(:,:,1)=当前图像;
其他的
数据\u tmp=当前图像;
结束
数据输出(:,:,:,i)=数据tmp;
结束
imdb.images.data=数据输出;

加载
cur\u image
的大小为
250x250x10
后,您只需要一个关于您可以和不能并行执行什么的教程。数据应存储在
imdb.images.data
中,如(250x250x10x1)用于第一个图像,而(250x250x10x2)用于第二个图像<代码>数据输出(:,:,:,i)=数据tmp
imdb.images.data=data\u out
也会这样做吗?还有一件事是这个
parfor
循环正在运行另一个
for
循环的集合数。共有3组,每一组都运行此
parfor
。第一组的大小为28x28x61x11028。第二组和第三组的大小为
data\u out
28x28x61x2048
。如何连接它是集合的循环?加载
cur_image
is
250x250x10
后。数据应存储在
imdb.images.data
中,如(250x250x10x1)用于第一个图像,而(250x250x10x2)用于第二个图像<代码>数据输出(:,:,:,i)=数据tmp
imdb.images.data=data\u out
也会这样做吗?还有一件事是这个
parfor
循环正在运行另一个
for
循环的集合数。共有3组,每一组都运行此
parfor
。第一组的大小为28x28x61x11028。第二组和第三组的大小为
data\u out
28x28x61x2048
。我如何连接它是集合的循环?