小编Jun*_*ier的帖子

MATLAB parfor慢于 - 出了什么问题?

我正在处理的代码有如下循环:

bistar = zeros(numdims,numcases); 
parfor hh=1:nt       
  bistar = bistar +  A(:,:,hh)*data(:,:,hh+1)' ;
end   
Run Code Online (Sandbox Code Playgroud)

小nt(10).

计时后,它实际上比使用常规循环慢100倍!我知道parfor可以做并行总和,所以我不确定为什么这不起作用.

我跑

matlabpool
Run Code Online (Sandbox Code Playgroud)

在运行我的代码之前使用开箱即用的配置.

我对matlab比较陌生,刚开始使用并行功能,所以请不要认为我没有做一些愚蠢的事情.

谢谢!

PS:我在四核上运行代码,所以我希望看到一些改进.

parallel-processing performance matlab parfor

17
推荐指数
2
解决办法
1万
查看次数

OpenCL中全局工作量是否需要是工作组大小的倍数?

您好:OpenCL中全局工作量(维度)是否需要是工作组大小(维度)的倍数?

如果是这样,是否有一种处理矩阵的标准方法而不是工作组维度的倍数?我可以想到两种可能性:

动态地将工作组维度的大小设置为全局工作维度的因子.(这会产生查找因子的开销,并可能将工作组设置为非最佳大小.)

将全局工作的维度增加到工作组维度的最接近倍数,保持所有输入和输出缓冲区相同但检查内核中的边界以避免segfaulting,即对所需输出超出工作项的任何操作.(这似乎是更好的方式.)

第二种方式会起作用吗?有没有更好的办法?(或者它是否没有必要,因为工作组维度不需要划分全球工作维度?)

谢谢!

gpu gpgpu matrix opencl

10
推荐指数
1
解决办法
3031
查看次数

实值输入深度信念网络(RBM)的问题

我正在尝试使用神经网络自动编码使用MNIST数字matlab代码的改编版本的olivetti face数据集来重新生成数据维数中报告的结果,但是我遇到了一些困难.似乎无论我对时期,速率或动量的数量进行了多少调整,堆叠的RBM都会进入微调阶段并出现大量误差,因此在微调阶段无法大幅提升.我在另一个实值数据集上也遇到了类似的问题.

对于第一层,我使用的RBM学习率较低(如论文所述)和

negdata = poshidstates*vishid' + repmat(visbiases,numcases,1);
Run Code Online (Sandbox Code Playgroud)

我相当自信我遵循支持材料中的说明,但我无法达到正确的错误.

有什么我想念的吗?请参阅下面我用于实值可见单元RBM的代码,以及整个深度培训.其余的代码可以在这里找到.

rbmvislinear.m:

epsilonw      = 0.001; % Learning rate for weights 
epsilonvb     = 0.001; % Learning rate for biases of visible units
epsilonhb     = 0.001; % Learning rate for biases of hidden units 
weightcost  = 0.0002;  
initialmomentum  = 0.5;
finalmomentum    = 0.9;


[numcases numdims numbatches]=size(batchdata);

if restart ==1,
  restart=0;
  epoch=1;

% Initializing symmetric weights and biases.
  vishid     = …
Run Code Online (Sandbox Code Playgroud)

matlab artificial-intelligence machine-learning neural-network rbm

7
推荐指数
1
解决办法
2816
查看次数

机器学习路径的好功能

我正在研究ML问题(主要是密度估计和异常检测),路径由坐标(GPS)组成.除了坐标本身和增量(相邻坐标点之间的变化)和极坐标之外还有哪些其他好的特征?什么功能使直观,弯曲,平滑和循环显式等直观属性?

geometry machine-learning geospatial coordinates

6
推荐指数
1
解决办法
297
查看次数

C++动态内存细节

我是一名C和Java程序员,因此内存分配和OOP对我来说并不是什么新鲜事.但是,我不确定如何使用C++实现对象来避免内存泄漏.即:

string s1("0123456789");
string s2 = s1.substr(0,3);
Run Code Online (Sandbox Code Playgroud)

s2 现在有一个新的字符串对象,所以它必须通过以下方式释放:

delete &s2;
Run Code Online (Sandbox Code Playgroud)

对?

此外,我是否正确地假设我将不得不删除函数返回的任何(新)对象的地址,无论返回类型不是指针或引用?生活在堆上的对象在必须被释放时不会作为指针返回,这似乎很奇怪.

c++ memory free memory-management dynamic

4
推荐指数
4
解决办法
1265
查看次数