在我的大学项目中,我正在创建一个神经网络,可以对信用卡交易欺诈与否的可能性进行分类。我正在用反向传播进行训练。我正在用 Java 写这个。我想应用多线程,因为我的电脑是四核i7。花几个小时训练却发现我的大部分核心都闲置,这让我很烦恼。

但是我如何将多线程应用于反向传播呢?反向传播的工作原理是通过网络向后调整误差。必须先完成一层,然后才能继续另一层。有什么方法可以修改我的程序来实现多核背景吗?

有帮助吗?

解决方案

首先不使用反向传播。还有许多其他的选择了。我会建议尝试RPROP(弹性传播)。这不会是大的修改到您的BP算法。你并不需要指定学习速率或动量。它真的差不多,如果你有一个单独的,可变的,学习率神经网络中的每个连接的。

至于施加多线程来反向传播。我只是写了一篇关于这个话题的文章。

http://www.heatonresearch.com/encog/mprop/compare.html

基本上我创建多个线程和瓜分训练数据,以便每个线程具有接近相等的量。我计算每个线程的梯度和它们在降低一步相加。梯度是如何施加到权重取决于所使用的传播训练算法,但体重更新在临界段进行。

在具有比配重得多的训练样本的代码花费在多线程梯度计算比临界部分权重更新更多的时间。

我提供一些在上述链路的性能结果。它确确实实加快速度!

其他提示

要在 Java 中使用更多 CPU 核心,您只需尝试 JVM 的更多选项,而无需更改代码:

  • -服务器
  • -d64
  • -XX:-使用并行GC

和其他选项 http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top