为了我的研究生研究,我正在创建一个神经网络,它经过训练来识别图像。我做的比简单地获取 RGB 值的网格,进行降采样,然后将它们发送到网络的输入要复杂得多,就像许多例子所做的那样。我实际上使用了超过 100 个独立训练的神经网络来检测特征,例如线条、阴影模式等等。这更像人眼,而且到目前为止效果非常好!问题是我有很多训练数据。我向它展示了超过 100 个汽车的例子,然后展示了超过 100 个人物的例子,然后是超过 100 只狗的例子,等等。这是相当多的训练数据!目前我需要大约一周的时间来训练网络。这有点扼杀我的进度,因为我需要调整和重新训练。
我正在使用 Neuroph,作为一个底层的神经网络 API。我正在运行一台双四核机器(16 个核心,带有超线程),所以这应该很快。但是我的处理器使用率只有 5%。有没有关于 Neuroph 性能的技巧?或者一般的 Java 性能的技巧?有什么建议吗?我是一名认知心理学博士生,作为一名程序员还算可以,但对性能编程了解不多。
回答:
是的,我几个月前也走过这条路。也是为了一个大学项目。首先的问题是 Neuroph。它非常慢。Neuroph 有众所周知的重大架构和性能问题,上周在代码项目上就有一篇关于此的文章。
http://www.codeproject.com/KB/recipes/benchmark-neuroph-encog.aspx
我遵循了与本文作者相似的道路。从 Neuroph 切换到 Encog 是一个非常容易的移植。上面文章的作者甚至还有另一篇文章比较了 Encog、JOONE 和 Neuroph 的语法,你可以比较一下。关于 Encog 的更多信息,
http://www.heatonresearch.com/encog
Encog 也会更多地利用你的核心。看看上面文章中的图表就知道了。
祝你好运!你的研究听起来真的很棒,我很想看到结果。