我需要训练一个有2-4个隐藏层的神经网络,还不确定实际网络的结构。我正在考虑使用Hadoop map reduce ( 12台pcs的集群)或gpu来训练它,以便获得更快的结果。你觉得这样会更好吗?另外,有没有已经实现了这些的可用的库呢?谢谢
发布于 2011-11-30 09:16:29
我很幸运地在一个实验室工作,该实验室已经涉猎了这两种训练网络的方法,虽然这两种方法在非常昂贵的计算环境中都很有用,但计算瓶颈的位置通常决定了使用哪种方法。
使用分布式系统(例如HADOOP)训练网络
当您的网络足够大,以至于训练中涉及的矩阵乘法在传统PC上变得笨拙时,这一点很有用。当您有苛刻的时间限制(例如HADOOP online training)时,这个问题尤其普遍,否则实现HADOOP的麻烦是不值得的(只需连夜运行网络)。如果您正在考虑HADOOP,因为您想摆弄网络参数,而不必等待一天就能摆弄更多的参数(在我的实验室中通常就是这种情况),那么只需在不同的机器上运行具有不同参数的多个网络实例。这样,您就可以在不处理实际分布式计算的情况下使用您的集群。
示例:
您正在训练一个网络来查找图像中的人数。您决定让程序从Google中随机拉取图像,而不是预先定义的一组训练示例(图像-人数对)。当网络处理图像时,您必须查看图像并提供有关图像中实际有多少人的反馈。由于这是图像处理,因此您的网络规模可能在数百万个单位的规模上。而且,由于您提供的是实时反馈,因此网络的计算速度很重要。因此,您可能应该投资于分布式实现。
在图形处理器上训练网络
如果的主要计算瓶颈不是网络大小,而是训练集的大小(尽管网络通常仍然相当大),这是正确的选择。由于GPU非常适合对大量数据集应用相同的向量/矩阵运算的情况,因此它们主要用于将批处理训练与 very large batch size配合使用。
示例:
你正在训练一个网络来回答用自然语言提出的问题。你有一个庞大的问答对数据库,并不介意网络每10000个问题才更新一次权重。有了如此大的批处理大小,而且可能还有相当大的网络,基于GPU的实现将是一个好主意。
https://stackoverflow.com/questions/8250867
复制相似问题