如果我使用该功能:
net=feedfowardnet([60 60])
net2=train(net,x,t)
训练大约需要20分钟。 (我在多台计算机上完成了这项工作{具有相同的规格},平均时间总是大约20分钟)
如果我使用该功能:
parpool %//starts a local parallel pool connected to 2 workers
net2=train(net,x,t,'useParallel','yes')
完成培训大约需要40分钟。我有两个核心,所以这是反直觉的,它应该是两倍的速度,而不是两倍的速度。我使用相同的起始网络,以及相同的培训输入和目标。
此外,当我在NN培训期间打开任务管理器时,它显示两个CPU都在100%工作,即使parpool
和useParallel
已关闭。
This page表示," Parallel Computing Toolbox™允许神经网络工具箱™更快地模拟和训练网络,并且可以在比一台PC上更大的数据集上训练网络。目前,并行训练仅适用于反向传播训练,而不适用于自组织地图。"
我在数据集中使用了2000个训练样例。有32个输入和3个输出,所以这绝对是一个大数据集。当我只使用net2=train(net,x,t)
函数时,并行关闭池也一定会关闭。
我已经测试了parpool
与其他函数(包含parfor
循环的函数)的使用情况,计算速度通常是其两倍。这似乎是神经网络训练变得更慢。
这有什么理由吗?
我使用的是Intel Core 2 Duo E8400 Cpu @ 3GHz,我使用的是MATLAB版本R2013 b。我也在网络上使用计算机(在大学里面)。我不确定这是否有所作为。
有关大学计算机网络的更多信息。我在网络上同时使用多台计算机。我没有以分布式计算的方式将它们连接在一起,每个人都在自己的2个处理器上使用并行计算做自己的事情。但是我不确定计算机是否仍然以某种方式相互干扰,因为它们是使用同一用户登录的。我使用以下方法将训练输入和目标数据加载到每台计算机上的matlab工作空间中:
load('H:\18-03-14\x.mat')
load('H:\18-03-14\net.mat')
load('H:\18-03-14\t.mat')
其中H:
是网络驱动器。我不确定一旦它们在matlab工作区中,它们仍然以某种方式连接,并且在不同的计算机上相互干扰。他们呢?
答案 0 :(得分:4)
不使用并行计算工具箱的100%cpu负载表明,函数train
或相关的被调用函数是使用多线程实现的。在这些情况下,并行计算工具箱只会增加进程间通信的无用开销。
答案 1 :(得分:4)
有两种类型的并行性:多核和多线程。 MATLAB通过多核支持实现基本矩阵运算,因此即使没有并行计算工具箱,也可以利用所有核心。
Parallel Computing Toolbox还允许多个线程。多线程有两个优点。首先,它们允许使用MATLAB Distributed Computing Server在多台PC上进行计算,以实现可靠的线性加速。第二个不那么明显,即单个PC上的多个线程可以改进已经单线程的多核计算,即使这看起来可能是反直觉的。但是,使用并行线程会产生额外的开销,因此并非总是这样。更多核心和大问题更有可能加速。
你的问题不是很大。一个大问题是成千上万的例子或更多,而你的问题只有2000。
此外,两个隐藏的层,每个60个神经元,几乎可以肯定是一个比你需要的更大的网络。您的问题有2000个样本* 3个输出= 6000个约束。您的网络具有32 * 60 + 60 * 60 + 60 * 3权重和32 + 60 + 3偏差,总共5795个可调变量,几乎与约束数一样多。我会建议更少的权重,可能只有一个隐藏层。这将加快训练速度,也可能更好地推广。
因此,可以从feedforwardnet(100)开始,然后在未找到所需精度的情况下增加它。
使用包含68,308个示例的神经网络工具箱示例数据集,您可以看到多个线程对更大问题的好处:
[x,t] = vinyl_dataset;
net = feedforwardnet(140,'trainscg');
rng(0), tic, net2 = train(net,x,t); toc
parpool
rng(0), tic, net2 = train(net,x,t,'useParallel','yes'); toc