首先,不要使用反向传播。还有许多其他选择。我建议尝试使用RPROP(d性传播)。对您的反向传播算法的修改不会那么大。您无需指定学习率或动力。实际上,对于神经网络中的每个连接,几乎就像您具有一个单独的,可变的学习率。
至于将多线程应用于反向传播。我刚刚写了一篇有关该主题的文章。
http://www.heatonresearch.com/encog/mprop/compare.html
基本上,我创建了多个线程并划分了训练数据,因此每个线程的数量几乎相等。我正在计算每个线程中的梯度,并将它们累加到一个归约步骤中。如何将梯度应用于权重取决于所使用的传播训练算法,但是权重更新是在关键部分完成的。
如果训练样本的数量远多于权重,则代码在多线程梯度计算中所花费的时间要比关键部分权重更新所花的时间多得多。
我在上面的链接中提供了一些性能结果。它确实确实加快了速度!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)