我需要训练一个有2-4个隐藏层的神经网络,不确定实际网络的结构。我正在考虑使用Hadoop map reduce(12个集群)或gpu来训练它以获得更快的结果。你觉得哪个更好?还有任何可用的库已经实现了吗? 感谢
答案 0 :(得分:32)
我一直幸运地在一个实验室工作,这个实验室涉及这两种训练网络的方法,虽然两者在计算量很大的设置中都很有用,但计算瓶颈的位置通常决定了使用哪种方法。 / p>
使用分布式系统(例如HADOOP)培训网络
当网络很大足以使传统PC上的培训中涉及的矩阵乘法变得难以处理时,此功能非常有用。当你有严格的时间限制时(例如在线培训),这个问题尤为普遍,否则HADOOP实施的麻烦是不值得的(只需在一夜之间运行网络)。如果您正在考虑HADOOP,因为您想要摆弄网络参数而不必等待一天再摆弄一些(在我的实验室中经常出现这种情况),那么只需在不同的机器上运行具有不同参数的多个网络实例。这样,您可以在不处理实际分布式计算的情况下使用您的集群。
示例:
您正在训练网络以查找图像中的人数。您决定让程序从Google中提取随机图像,而不是预定义的一组训练示例(图像对人数)。在网络处理图像时,您必须查看图像并提供有关图像中实际人数的反馈。由于这是图像处理,因此您的网络规模可能达到数百万单位。而且,由于您实时提供的反馈,网络计算的速度很重要。因此,您应该投资分布式实施。
在GPU上培训网络
如果主要计算瓶颈不是网络规模,而是训练集的大小(尽管网络仍然非常大),这是正确的选择。由于GPU非常适用于在大量数据集中应用相同向量/矩阵运算的情况,因此主要用于批量训练非常大批量大小>强>
示例:
您正在培训网络来回答用自然语言提出的问题。你有一个巨大的问题 - 答案对数据库,并不介意网络每10000个问题只更新其权重。如此庞大的批量大小,并且可能是一个相当大的网络,基于GPU的实现将是一个好主意。